połączenie dbgrida z listbox`em

0

Witam.
Mam do napisania procedurę która będzie wyświetlała w dbgridzie tabele które są umieszczone w listboxie. W listboxie tabele z bazy wyświetlone są za pomocą polecenia gettablenames.
bardzo proszę o pomoc

0

nodobra ale w czym problem bo jak juz pobrałas do listoxa to wczym problem zeby tez w dbgrid je wyswietlic?

0

Problem w tym zeby klikajac na poszczegolne tabele w ktore sa zamieszczone w listboxie wyswietlaly sie one w dbgridzie.

0

Paula musisz pod zdazenie OnClick, Twojego listboxa podpiac procedure wyswietlajaca ta tabele. Np. w ten sposob:

procedure TForm.ListBoxClick(Sender: TObject);
begin
  if Sender is TListBox then
    with Sender as TListBox do
  begin
    if ItemIndex > -1 then
      // tutaj wyswietl tabele
  end;
end;

Do wyswietlenia dowolnej tabeli, mozesz uzyc bardzo prostego zapytania:

<sql>SELECT * FROM /TABELA/</sql>

to zapytanie przed uruchomieniem musisz sobie przeksztalcic za pomoca ReplaceStr i zamienic /TABELA/ na wlasciwa nazwe tabeli uzyskana z ListBoxa.

Jakich komponentow uzywasz do podlaczenia z baza?

0

Tylko że chodzi mi o to żeby to było automatycznie wyświetlane w zależności od tabeli która się wybierze z listboxa a nie na sztywno wpisana nazwa tabeli. A do podłączenia z bazą wykorzystuję komponenty ibdatabase i ibtransaction. Wydaje mi sie że tutaj trzeba by kombinować coś z dbgrid.datasource bo w tej właściwości występuje połączenie z tabelą. Wykorzystywałam tez zdarzenie on click dla listboxa. Próbowałam na wiele sposobów i niestety sie to nie wyświetla.

0
paulina213 napisał(a)

Tylko że chodzi mi o to żeby to było automatycznie wyświetlane w zależności od tabeli która się wybierze z listboxa a nie na sztywno wpisana nazwa tabeli.

Dlatego tez pisze Ci, ze przed uruchomieniem zapytania nalezy je zmodyfikowac za pomoca podanej przeze mnie funkcji.

Czy jestes w stanie cokolwiek wyswietlic na tym gridzie?

Zrob tak aby po kliknieciu na listboxa, pojawila sie jakakolwiek tabela w gridzie. Niech bedzie na sztywno przypisana. Zrob to i pokaz tutaj jak to zrobilas, wtedy to zautomatyzujemy.

Po edycji:

Jesli nie wiesz jak to zrobic to zrob tak:
0. Upewnij się, ze polaczenie z baza jest skonfigurowane wlasciwie i IBDatabase.Connected = True.

  1. Poloz na forme komponent IBQuery.
  2. Polacz IBQuery z IBTransaction poprzez property Transaction.
  3. Polacz IBQuery z IBDatabase poprzez property Database.
  4. Napisz zapytanie do dowolnej tabeli z bazy danych. Robisz to poprzez IBQuery.SQL.
  5. Ustaw IBQuery.Active na True. W przypadku bledu, wroc do pkt 0. (sprawdz tez czy IBTransaction polaczone jest z IBDatabase, powinnas to juz miec zrobione).
  6. Poloz na forme komponent DataSource.
  7. Polacz go z IBQuery za pomoca property DataSet.
  8. Polacz komponent DBGrid z DataSource poprzez property DataSource na DBGrid.
  9. Ustaw property IBQuery.Active na True, o ile polaczenie z baza jest aktywne. Jesli tak, to juz bedziesz widziala co znajduje sie w tabeli.

Jesli uda Ci sie to osiagnac, to mozna przejsc do dynamicznego wyswietlania zawartosci.

0

mam cos takiego ale nie chodzi

procedure TForm2.ListBox1Click(Sender: TObject);
var nr:string;
i:integer;
begin
for i := 0 to Listbox1.Count - 1 do
begin
nr:=listbox1.items.Names[i];
edit1.text:=nr;
DataModule3.zmiana.TableName:=edit1.Text;
DataModule3.zmiana.Active:=true;
Dbgrid1.datasource:=datamodule3.szmiana;
end;
datamodule3.zmiana.close;
end;

zmiana jest to IBTable1 a szmiana to Datasource dla IBTable1

0

mamo kochana...

jeśli otworzysz dataset i po chwili go zamkniesz to chyba logiczne, że nic nie zobaczysz...

0

jeżeli napiszę w ten sposób wpisując tabelę na sztywno to się wyswietla w gridzie

procedure TForm2.ListBox1Click(Sender: TObject);
begin
if Sender is TListBox then
with Sender as TListBox do
begin
if ItemIndex > -1 then
begin
DataModule3.ibquery2.Active:=false;
datamodule3.IBDatabase1.connected:=true;
DataModule3.ibquery2.database:=datamodule3.IBDatabase1;
datamodule3.IBtransaction1.active:=true;
DataModule3.ibquery2.Transaction:=datamodule3.IBTransaction1;
datamodule3.ibquery2.sql.text:='SELECT * FROM Maszyny';
DataModule3.ibquery2.Active:=true;
Dbgrid1.datasource:=datamodule3.DataSource1;
end;
end;
end;

tylko sęk w tym żeby tam była automatyczna zmiana nazwy tej tabeli
niby takie łatwe a tu niestety... :-(

0

Zrób tak ja w kodzie ponizej. Dodatkowo przeczytaj kroki ktore Ci opisalem. Mozesz pominac IBQuery zastepujac je IBTable ale pamietaj o ustawieniach property.

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  if Sender is TListBox then
    with Sender as TListBox do
  begin
    if ItemIndex > -1 then
    begin
      DataModule3.zmiana.Active := False;
      DataModule3.zmiana.TableName := Items[Itemindex];
      DataModule3.zmiana.Active := True;
    end;
  end;
end;

Po edycji:

mozesz tez tak:

procedure TForm2.ListBox1Click(Sender: TObject);
begin
if Sender is TListBox then
    with Sender as TListBox do
  begin
    if ItemIndex > -1 then
    begin
    DataModule3.ibquery2.Active:=false;
      datamodule3.IBDatabase1.connected:=true;
    DataModule3.ibquery2.database:=datamodule3.IBDatabase1;
      datamodule3.IBtransaction1.active:=true;
    DataModule3.ibquery2.Transaction:=datamodule3.IBTransaction1;
    datamodule3.ibquery2.sql.text:='SELECT * FROM ' + Items[Itemindex];
    DataModule3.ibquery2.Active:=true;
    Dbgrid1.datasource:=datamodule3.DataSource1;
  end;
  end;
end;
0

DZIAłA :-)
dziękuje bardzo Wodzu za pomoc :-)

0

dodam jeszcze ze oba sposoby napisane przez Ciebie Wodzu działają
:-)

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