Uzywam DBGird + baza MySQL (myDac), Delphi7.
Wszystko jest dobrze: tworze polaczenie, program laczy sie z baza, wyswietla rekordy.
Ale kiedy próbuje usunac jakis rekord, pojawia sie problem.
Robie to tak:
{ kod zawarty w handlerze OnKeyDown( VK_DELETE ) }
If ( DBGrid1.SelectedRows.Count = 0 ) Then
Exit;
If ( MessageBox( WindowHandle, 'Napewno chcesz usunac zaznaczony rekord?', 'Pytanie', MB_YESNO ) = IDYES ) Then
Begin
With DBGrid1.DataSource.DataSet Do
Begin
For i := 0 To DBGrid1.SelectedRows.Count - 1 Do
Begin
GotoBookmark( Pointer( DBGrid1.SelectedRows.Items[ i ] ) );
MyQuery1.SQL.Strings[i] := 'DELETE FROM tabela1 WHERE id = ' + Fields[ 0 ].AsString + ' LIMIT 1;';
End;
End;
try
MyQuery1.Execute;
except
on E: EMySqlException do
begin
error := true;
end;
end;
End;
Problem polega na tym, iz pojawia sie komunikat mowiący o tym ze: nie ma elementu o indeksie "i" w DBGrid1.SelectedRows.Items. Ale kiedy debuguje wyraznie widac ze DBGrid1.SelectedRows.Count jest rowne ilosci zaznaczonych wierszy. Wiec tablica items powinna zawierac prawidlowe elementy.
Gdzie popelnilem blad?
Jesli ktos zna jakis inny sposob na pobranie indeksow zaznaczonych wierszy, bardzo chcial bym to zobaczyc.
Jest jeszcze jeden problem, jesli np umyslnie popelnie blad w skladni SQLa. To metoda Execute wyrzuci wyjatek, ktory zreszta probuje lapac. Problem polega na tym ze IDE za kazdym razem przerywa mi prace przy napotkaniu tego wyjatku mimo ze go obsluguje.
Bede wdzieczny za każda podpowiedz
(one_eddie at tenbit.pl)