Tym razem mam problem z usunięciem wiersza w *.mdb
Mam kod który usuwa dane z MSHFLEXGRID ale po odświeżeniu wcześniej usunięty wiersz cały czas jest widoczny.
Private Sub Command7_Click()
With MSHFlexGrid1
If (.Rows > .FixedRows + 1) Then
.RemoveItem .Row
Else
.Rows = .FixedRows
End If
End With
Domyślam się że muszę do wyżej podanego kodu dopisać linijkę kodu który będzie odpowiedzialny za usunięcie wybranego wiersza również w bazie w accessie. Próbowałem rozwiązać porblem kodem takim jak zastosowałem w DATAGRID ale usuwa się tylko wiersz pierwszy z góry
Adodc1.Recordset.Delete
Na formularzu mam umieszczony MSHFLEXGRID oraz ADODC1., połączenie działa poprawnie.
Jeżeli tabela w bazie acces będzie miała nazwę np. tabela1 a kolumna w tej tabeli nosi nazwę: nazwa i w kolumnie tej tabeli są umieszczane teksty z MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2)
to procedura usuwania znaczonego wiersza może wyglądać tak:
Private Sub Command7_Click()
dim tekst as string
tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1)
Adodc1.RecordSource = "select *from tabela1 Where tabela1.nazwa='" + tekst + "'"
Adodc1.Refresh
If (Adodc1.Recordset.RecordCount > 0) Then
Adodc1.Recordset.Delete
With MSHFlexGrid1
If (.Rows > .FixedRows + 1) Then
.RemoveItem .Row
Else
.Rows = .FixedRows
End If
End With
End If
End sub
Ważne jest aby w kolumnie którą wybieramy były tylko wartości które się nie powtarzają.
tak analizuje twój kod którymi mi podałeś no i coś mi nie działa za bardzo,
tabela o której mówiłeś nazywa się mserwis i zawiera 16 kolumn( z czego wszystkie mają wartość tekst a jedna kolumna jest ustawiona jako data), żeby usunąć cały wiersz z bazy accessa wystarczy że podam tylko jeden wiersz??
tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2)
notka.RecordSource = "select *from tabela1 Where tabela1.nazwa='" + tekst + "'"
no i za bardzo nie wiem co oznacza “notka” przed RecordSource
notka.RecordSource = "select *from tabela1 Where tabela1.nazwa='" + tekst + "'"
If (notka.Recordset.RecordCount > 0) Then
Adodc1.RecordSource = "select *from tabela1 Where tabela1.nazwa='" + tekst + "'"
If (Adodc1.Recordset.RecordCount > 0) Then
Poprawiłem.
Jeżeli tabela ma nazwę :mserwis , to taką nazwę wpisujesz w miejsce tabela1.nazwa czyli
mserwis.nazwa gdzie słowo nazwa oznacza nazwę kolumny (na szarym tle są nazwy kolumn w tabeli czyli w wierszu o numerze 0. Nie znam nazw kolumn w Twojej tabeli bo nie podałeś więc nie mogę takiej nazwy użyć jaka występuje u Ciebie.
Zmieniłem na Adodc1 i w dalszym ciągu pojawia się ten komunikat co wyżej,
Czy wystarczy że podam tylko jedną nazwę kolumny z tabeli żeby usunąć wiersz( w tabeli mam ich 16)??
Adodc1.RecordSource = "select *from tabela1 Where tabela1.nazwa='" + tekst + "'"
If (Adodc1.Recordset.RecordCount > 0) Then
Private Sub Command7_Click()
Dim tekst As text
tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2)
Adodc1.RecordSource = "select *from mserwis 'Where mserwis.zlecenie_numer='" + tekst + "'"
If (Adodc1.Recordset.RecordCount > 0) Then
Adodc1.Refresh
Adodc1.Recordset.Delete
With MSHFlexGrid1
If (.Rows > .FixedRows + 1) Then
.RemoveItem .Row
Else
.Rows = .FixedRows
End If
End With
End If
End Sub
wstawiłem nazwę kolumny tak jak jest w bazie access “numer_zlecenia” kolumna ta jest jako pierwsza na liscie czyli w tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 2) podaje 0 ( próbowałem również 1)
Private Sub Command7_Click()
Dim tekst As text
tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 1)
Adodc1.RecordSource = "select *from mserwis 'Where mserwis.numer_zlecenia='" + tekst + "'"
If (Adodc1.Recordset.RecordCount > 0) Then
Adodc1.Refresh
Adodc1.Recordset.Delete
With MSHFlexGrid1
If (.Rows > .FixedRows + 1) Then
.RemoveItem .Row
Else
.Rows = .FixedRows
End If
End With
End If
End Sub
Oczywiście, że błąd. Chyba wczoraj było za gorąco (38°) i stąd takie zaczadzenie umysłu.
Jeśli już deklarujemy zmienną tekst to tak : Dim tekst As string
Uwaga:
jeżeli w naszej bazie nie ma kolumny w której elementy by się nie powtarzały, to można użyć kolumny 0 z bazy Accessa o nazwie Identyfikator. Należy jednak pamiętać aby elementy tej kolumny były też wczytywane do tabeli MSHFlexGrid1 np. w kolumnie 0 (lub innej). Jeżeli kolumnie tej przypiszemy szerokość 0 instrukcją: MSHFlexGrid1.ColWidth(0) = 0, to nie będzie widoczna czyli nie będzie przeszkadzać w ogólnym widoku.
Usuwanie wiersza z bazy będzie miało wówczas postać:
dim tekst as string
tekst = MSHFlexGrid1.TextMatrix(MSHFlexGrid1.Row, 0)
Adodc1.RecordSource = "select *from mserwis Where mserwis.Identyfikator=" & tekst
Adodc1.Refresh
Adodc1.Recordset.Delete
With MSHFlexGrid1
If (.Rows > .FixedRows + 1) Then
.RemoveItem .Row
Else
.Rows = .FixedRows
End If
End With