Private Sub Command1_Click()
Dim target_name As String
Dim r As Integer
target_name = InputBox("PODAJ NAZWĘ", "NAZWA", "")
If Len(target_name) = 1 Then Exit Sub
target_name = LCase$(target_name)
For r = 1 To MSHFlexGrid1.Rows - 1
If LCase$(MSHFlexGrid1.TextMatrix(r, 7)) = target_name Then
MSHFlexGrid1.Row = r
MSHFlexGrid1.RowSel = r
MSHFlexGrid1.Col = 0
MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1
MSHFlexGrid1.TopRow = r
Exit Sub
End If
Next r
Beep
End Sub
kod działa poprawnie ale znajduje tylko pierwszy wpis spełniający warunek z InputBoxa, chciałbym aby za jego pomocą w kolumnie 7 znalazło mi resztę danych spełniających warunek. W jaki sposób zmienić kod, czy ma ktoś jakieś pomysły??
To tylko przez kolorowanie albo utworzenie nowej tabeli z wybranych elementów.
Private Sub Command1_Click()
Dim target_name As String
Dim r As Integer
target_name = InputBox("PODAJ NAZWĘ", "NAZWA", "")
If Len(target_name) <= 1 Then Exit Sub
target_name = LCase$(target_name)
MSHFlexGrid1.Col = 2
For r = 1 To MSHFlexGrid1.Rows - 1
i = InStr(LCase(MSHFlexGrid1.TextMatrix(r, 7)), target_name)
If i Then
MSHFlexGrid1.Row = r
MSHFlexGrid1.CellBackColor = RGB(250, 128, 128)
MSHFlexGrid1.RowExpanded = True
End If
Next r
End Sub
i dodatkowy klawisz dla odznaczania
Private Sub Command2_Click()
MSHFlexGrid1.Col = 7
For r = 1 To MSHFlexGrid1.Rows - 1
MSHFlexGrid1.Row = r
If MSHFlexGrid1.CellBackColor = RGB(250, 128, 128) Then
MSHFlexGrid1.CellBackColor = RGB(255, 255, 255)
MSHFlexGrid1.RowExpanded = False
End If
Next r
End Sub
i raczej nie używał bym okienka inputbox bo jest modalne czyli nie można nic więcej robić przed jego zamknięciem. Wolał bym użyć okienka tekstowego. W moim przykładzie użyłem jeszcze instrukcji:instr(przeszukiwany tekst, wyszukiwany tekst) aby nie trzeba było wpisywać całego tekstu do wyszukiwania, a tylko jego część. Instrukcja MSHFlexGrid1.RowExpanded = True to rozwijanie pasma jeśli istnieje. Drugi sposób przeglądania: Po pierwszym naciśnięciu klawisza command3 zaznaczony jest pierwszy wiersz z szukanym elementem. Po ponownym naciśnięciu klawisza command3 zaznaczany jest następny wiersz w którym występuje ten element itd. Aby metoda była skuteczna zmienna licznik musi być globalna i zadeklarowana. Wchodzimy do General i wpisujemy: Dim licznik As Long
Private Sub Command3_Click()
target_name = Text1.Text
If Len(target_name) <= 1 Then Exit Sub
For r = licznik To MSHFlexGrid1.Rows - 1
licznik = licznik + 1
i = InStr(LCase(MSHFlexGrid1.TextMatrix(r, 7)), target_name)
If i Then
MSHFlexGrid1.Row = r
MSHFlexGrid1.RowSel = r
MSHFlexGrid1.Col = 0
MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1
MSHFlexGrid1.TopRow = r
Exit Sub
End If
Next r
If licznik > MSHFlexGrid1.Rows - 1 Then licznik = 0
End Sub
Jesteś genialny wszystko chodzi jak należy a jeszcze pytanie w którym miejscu należy zmodyfikować kod aby mshflexgrid zazmaczał mi w kolorze co drugi wiersz.
Dim wiersz As Long
Dim kol As Long
With Me.MSHFlexGrid1
For wiersz = 1 To 1 ' .Rows - 1
For kol = 0 To .Cols - 1
.Row = wiersz
.Col = kol
.CellBackColor = vbYellow
'.CellForeColor = vbGreen
.CellFontBold = True
Next
Next
End With
Dim wiersz As Long
Dim kol As Long
With Me.MSHFlexGrid1
For wiersz = 1 To .Rows - 1
If Int(wiersz / 2) = wiersz / 2 Then
For kol = 1 To .Cols - 1
.Row = wiersz
.Col = kol
.CellBackColor = vbYellow
.CellForeColor = vbGreen
.CellFontBold = True
Next
End If
Next
End With
A powiedz mi jeśli możesz, jeśli w mshflexgrid mam wyświetlane więcej niż jedna tabela?? Mam na myśli wyświetlanie relacji tabel, w jaki sposób powinienem się odnosić do drugiej i trzeciej tabeli które są wyświetlane??
To trochę bardziej skomplikowana sprawa bo trzeba się odwoływać do bazy danych poprzez interfejs DataEnvironment.
Dla trzech tabel w bazie danych Access i wyszukaniu elementu z tabeli3 bierzemy przyporządkowane mu id3 a następnie należy wyszukać według tego id3 w tabeli drugiej przyporządkowane mu id2 i kolejno w tabeli pierwszej znajdujemy id1 przyporządkowane id2 z tabeli drugiej. mając ide1 z tabeli pierwszej wyszukujemy wiersz według tego id1 w tabeli MSHFlexGrid1 i rozwijamy go.
Źle sformułowałem pytanie, chodziło mi bardziej dodatkowe elementy takie jak wyżej mi podawałes wyszukiwanie, kolorowanie ewentualnie usuwanie całego wiersza. Jak w kodzie powinienem się odwołać do tabeli drugiej i trzeciej?
Mshflexgrid wyświetla mi 3 tabele(tabele z accessa) w których utworzone są relacje, jak powinienem sformułować kod żeby w mshflexgrid kolorowało(wyszukiwało oraz usuwało) mi również drugą i trzecią tabele tak jak robi to z pierwszą tabelą którą wyświetla msflexgrid ?
Tak na zdrowy rozum. Skąd mam wiedzieć jak sformułować kod w drugiej i trzeciej tabeli żeby było tak jak w pierwszej tabeli jeżeli żadnej z tych tabel nie widziałem na oczy.
Tu jeszcze parę przykładów i dochodź sam jak zrobić u siebie:bazy
Minęło trochę czasu i ciekawe jak sobie dałeś radę z tą swoją bazą i prezentacją w tabeli MSHFlexGrid przy wykorzystaniu DataEnvironment. Po przebadaniu tychże doszedłem do wniosku, że przy bardziej zaawansowanych projektach lepsze rezultaty można uzyskać wykorzystując możliwości samej bazy Access.
Spróbowałem też poćwiczyć i przetestować niektóre możliwości jakie daje DataEnvironment, a o to rezultaty:
Gdybyś chciał niektóre elementy wykorzystać, a były by problemy to pytaj bo jeśli się nie ma dokładnego opisu wszystkich funkcji programu to trudno do tego dojść samodzielnie, nawet jeśli się ma jakiś tam wzorcowy przykład.
Trochę odpoczywałem od VB i przez pewien czas nie zaglądałem tutaj, jeśli chodzi o bazę udało mi się zrobić to co potrzebowałem.
Chyba znowu zacznę się tym troszkę bawić podoba mi się to chociaż nie jest to proste i łatwe, przy pisaniu bazy miałem sporo siedzenia i główkowania Jeśli mogę spytać gdzie nauczyłeś się tego wszystkiego ??? Co ewentualnie byś mi polecał w zdobyciu wiedzy odnośnie VB?
Jeśli chodzi o plik załączony wygląda to całkiem ciekawie w razie czego na pewno będę pytał