Wyświetlanie zawartości SELECT'a w delphi

0

Witam

Stworzyłem baze danych Znajomi.gdb w ktorej jest: imie, nazwisko, nr_tel, nr_kom itp
W programie mam użyte: IBQuery1, IBDatabase1, IBTransaction1

operacje SELECT wykonuje przy pomocy kodu umieszczonego na http://www.ultrabit.prv.pl/prv.pl/:

procedure TForm1.Button1Click(Sender: TObject);
begin
    with IBQuery1, SQL do
     begin
      Close;
      Clear;
      Add('SELECT IMIE, NAZWISKO FROM ZNAJOMI');
      Open;
     end;
end;

Przy pomocy czego moge wydobyc wykonanego selecta? Pobierać dane probowalem tak:
Edit14.Text:=IBQuery1.Fields[1].AsString;
dla powyższego przykładu przypisać mogę tylko pierwsze znalezione IMIE i NAZWISKO - jak wstawie w nawias kwadratowy 3 to juz błąd wyskakuje
Docelowo chciałem żeby imiona i nazwiska znalazly sie w ComboBox, w innym miejscu chciałem powstawiac do Editów w calu edytowania rekordów.
Do tej pory mało zajmowałem się Delphi i bazami więc proszę o wyrozumiałośc jeśli pytam o banały...

Pozdrawiam

0

Witam. Ja tworzyłem projekt za pomoca obiektów z palety ADO. Powinno działać podobnie.Przykładowy kod może coś pomoże - u mnie śmiga :-)

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
 begin
  SHOWPARTS;
  Label15.Caption:=DM.ADOQueryLENS.Fields.Fields[2].AsString;
  Label16.Caption:=DM.ADOQueryLENS.Fields.Fields[4].AsString;
  GroupBox1.Visible:=True;
   if DM.ADOQueryLENS.Fields.Fields[3].Value='true' then
     begin
      Label8.Caption:='OLD TYPE';
       end else
       Label8.Caption:='NEW TYPE';
 end;

Jeśli chodzi o DBComboboxa to musisz ustawić właściwości komponentu :
ListSource - na źródło listy
ListField - pole które cię interesuje z tej listy - mogą być 2 lub więcej po średniku
KeyField - klucz

Oczywiście najpierw ustaw Active komponentu Query - wykonaj zaytanie do bazy aby uzyskać rezultat w DBComboboxie.

0
Porucznik napisał(a)

Witam. Ja tworzyłem projekt za pomoca obiektów z palety ADO. Powinno działać podobnie.Przykładowy kod może coś pomoże - u mnie śmiga :-)

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
 begin
  SHOWPARTS;
  Label15.Caption:=DM.ADOQueryLENS.Fields.Fields[2].AsString;
  Label16.Caption:=DM.ADOQueryLENS.Fields.Fields[4].AsString;
  GroupBox1.Visible:=True;
   if DM.ADOQueryLENS.Fields.Fields[3].Value='true' then
     begin
      Label8.Caption:='OLD TYPE';
       end else
       Label8.Caption:='NEW TYPE';
 end;

Jeśli chodzi o DBComboboxa to musisz ustawić właściwości komponentu :
ListSource - na źródło listy
ListField - pole które cię interesuje z tej listy - mogą być 2 lub więcej po średniku
KeyField - klucz

Oczywiście najpierw ustaw Active komponentu Query - wykonaj zaytanie do bazy aby uzyskać rezultat w DBComboboxie.

P.S Błąd pojawia się gdy przypisujesz wartość 3 pola ( w tym kwadratowym nawiasie) ponieważ w zapytaniu SQL pytasz tylko o 2 pierwsze pola - Imie i nazwisko

0

To może da sie jakos pobrać daną z pierwszej kolumny drugiego rekordu i kolejnych?
Jak wyświetle selecta w grid'zie to wyswietla calość, czyli gdzies jest tylko czy jest do niej dostep???
Mozna to zrobic wpisujac do Grid'a a pozniej w pola tylko to wyglada malo estetycznie:)

Porucznik dzieki za podpowiedź z DBComboBox - zadziałało, a dokładniej na DBLookupComboBox, w tym pierwszym nie mogłem znaleźć podanyc właściwości komponentu. W DBLookupComboBox wyświetla mi na liści odpowiednie dane ale przy pierwszym otwarciu tego komponentu zwinięte są do jednego wiersza. Jak można zrobić żeby lista rozwijała się?? Druga sprawa jest taka że po wybraniu myszką pozycji z imieniem i nazwiskiem podswietlone mam tylko to pierwsze.

0

IBQuery.FieldByName('IMIE').AsString;

0

O ile dobrze zrozumiałem pytanie to :
do poruszania się po kolejnych rekordach służą : IBQuery.Next lub Prior , First , Last , ewent.Locate() i inne
IBQuery.Field[ i tu numer pola (0) 1,2 ...].AsString podajesz o które pole Ci chodzi w aktualnym rekordzie czyli o pole imie , nazwisko itp i numer oczywiście nie może być większy niż ilość tych pól w danym rekordzie.
Często (nie zawsze) lepiej używać zamiast Field - FieldByName('Nazwisko') itd.
Można zrobić tak (z głowy, nie testowałem) :

IBQuery.First;
While not IBQuery.Eof do
begin
Jakiś ComboBox .AddItem:=IBQuery.FieldByName('Imie').AsString + ' '+IBQuery.FieldByName('Nazwisko').AsString;
IBQuery.Next;
end;

Używam ZeosLib (ZQuery,ZConnection...), ale myślę, że IBQuery działa podobnie.
Pozdr. Robert J.

0

'bobekrj' czegoś takiego szukałem:

begin
 IBQuery1.First;
while not IBQuery1.Eof do
   begin
      ComboBox1.Items.Add(IBQuery1.FieldByName('IMIE').AsString + '  '+IBQuery1.FieldByName('NAZWISKO').AsString);
      IBQuery1.Next;
   end;
end;

Sprawdziłem i działa u mnie wielkie dziękuję za odpowiedź.

pozdrawiam

0

w innym miejscu chciałem powstawiac do Editów w calu edytowania rekordów

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
     if IBQuery1.RecordCount>0 then
      begin
       Edit1.Text:=IBQuery1.Fields[0].AsString;
        Edit2.Text:=IBQuery1.FieldValues['Pole2'];
         Edit3.Text:=IBQuery1.FieldValues['Pole3'];
          Edit4.Text:=IBQuery1.FieldValues['Pole4'];
         Edit5.Text:=IBQuery1.FieldValues['Pole5'];
       Edit6.Text:=IBQuery1.FieldValues['Pole6'];
     end
   else
if IBQuery1.RecordCount=0 then
if Application.MessageBox('Musisz dodać nowy rekord do bazy.','Brak danych w bazie', MB_IconInformation or MB_OK)=IDOK then.....
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1