Witam!
Problem:
Po poprawnym odczycie z bazy danych sql do komponentu ListView po wybraniu odpowiedniego rekordu chcę aby po przez komponent SQLDataSet pobrano kilka wartości pól z bazy sql i następnie chcę je wyświetlić w komponentach Edit. kombinuję od kilku godzin ale efekt mizerny. Proszę o pomoc.
niewiem czy zrozumiałem
Odczytałeś dane do listView, zaznaczasz jakiś element w listView i chcesz zeby ci odczytało dane o tym rekordzie z bazy?
Po 1 zapisyj gdzieś Id rekordu np. w StateIndex listview, nastepnie podczas klikania wywołujesz zapytanie gdzie dodajesz warunek 'WHERE id='+IntToStr(ListView.selected.StateIndex); baza powinna zwrócić ci jego dane.
Jeśli to nie oto chodzi to napisz jakiś kod co robiłeś bo z opisu to niewiele wynika.
puchi napisał(a)
niewiem czy zrozumiałem
Odczytałeś dane do listView, zaznaczasz jakiś element w listView i chcesz zeby ci odczytało dane o tym rekordzie z bazy?Po 1 zapisyj gdzieś Id rekordu np. w StateIndex listview, nastepnie podczas klikania wywołujesz zapytanie gdzie dodajesz warunek 'WHERE id='+IntToStr(ListView.selected.StateIndex); baza powinna zwrócić ci jego dane.
Jeśli to nie oto chodzi to napisz jakiś kod co robiłeś bo z opisu to niewiele wynika.
chodzi dokładnie o to ale chcę wynik z bazy w postaci pojedynczego rekordu zapisać w pojedyczym polu edit.
oki już sobie poradziłem - zrealizowałem wszystko na komponencie memo
var
SQLQuery : String;
i : integer;
begin
SQLQuery := Format('select * from `klienty` WHERE numer="%s"',[label4.Caption]);
DM.SQLDatapo.CommandText := SQLQuery;
Dm.SQLDatapo.Open;
Memo1.Clear;
for I := 1 to Dm.SQLDatapo.RecordCount do
begin
Memo1.Lines.Add(DM.SQLDatapo.FieldValues['imienaz']);
Memo1.Lines.Add(DM.SQLDatapo.FieldValues['adres']);
Memo1.Lines.Add(DM.SQLDatapo.FieldValues['kodmiast']);
Dm.SQLDatapo.Next;
end;
Dm.SQLDatapo.Close;
end;
pozwole sobie dodac cos co było wiele razy poruszane przy pobieraniu danych z bazy
Lepiej jest nie uzywac FieldValues Używaj FieldByName
var
SQLQuery : String;
i : integer;
begin
SQLQuery := Format('select * from `klienty` WHERE numer="%s"',[label4.Caption]);
DM.SQLDatapo.CommandText := SQLQuery;
Dm.SQLDatapo.Open;
Memo1.Clear;
for I := 1 to Dm.SQLDatapo.RecordCount do
begin
Memo1.Lines.Add(DM.SQLDatapo.FieldByName['imienaz'].AsSting);
Memo1.Lines.Add(DM.SQLDatapo.FieldByName['adres'].AsSting);
Memo1.Lines.Add(DM.SQLDatapo.FieldByName['kodmiast'].AsSting);
Dm.SQLDatapo.Next;
end;
Dm.SQLDatapo.Close;
end;
a i skoro wiesz ze bobierasz jeden rekord nie musisz robić tego w pętli
A dlaczego nie użyjesz DBListBox ?
puchi - w przypadku gdyby znalazł więcej niż jeden rekord chcę to zobaczyć bo to błąd bazy danych który będzie wyłapany przez osobną funkcję sprawdzającą.
toyman - Nie korzystałem jeszcze z tego komponentu w użytkowaniu bazy danych. Mógł byś opisać jak konkretnie widział byś jego wykorzystanie?
hs2 napisał(a)
toyman - Nie korzystałem jeszcze z tego komponentu w użytkowaniu bazy danych. Mógł byś opisać jak konkretnie widział byś jego wykorzystanie?
Na którą wersję postu mam odpowiadać. To powyżej, czy tą z powiadomienia emailowego:
hs2 napisał(a)
toyman - tekst który znajdzie się w memo ma podlegać swobodnej edycji czego listwiev nie daje.