Dynamiczne tworzenie komponentów ADO

0

Borykam się z problemem powiązania ze sobą dynamicznie utworzonych komponentów: ADOConnection, ADOQuery i ADOTable. Wizualne komponenty można zestawić za pomocą Connection. W ADOQuery1 Connection wstawiamy ADOConnection1 i wszystko pięknie się komunikuje. Dlaczego tego samego nie mogę zrobić dynamicznie ?

procedure PodlaczDoBazy;
var
ADO_Co: TADOConnection;
ADO_Qu: TADOQuery;
ADO_Ta: TADOTable;
i: Integer;
begin
try
ADO_Co := TADOConnection.Create(Form1);
ADO_Qu := TADOQuery.Create(Form1);
ADO_Ta := TADOTable.Create(Form1);

 for i := 1 to 3 do
   begin
    with ADO_Co do
      begin
      Name := 'ADOConnection' + IntToStr(i);
      end;
    with ADO_Qu do
      begin
      Connection := TADOConnection(FindComponent('ADOConnection' +
      IntToStr(i)));
      Name := 'ADOQuery' + IntToStr(i);
      end;
    with ADO_Ta do
      begin
      Connection := TADOConnection(FindComponent('ADOConnection' +
      IntToStr(i)));
      Name := 'ADOTable' + IntToStr(i);
      end;
   end;
except
 NrBledu(420, 'PodlaczDoBazy');
end;
end;

Po odwołaniu się do ADOQuery1 procedura generuje błąd. Dlaczego tak się dzieje ?

dodanie znacznika <code class="delphi"> - fp

0

A czemu masz pętle jak być używał po trzy komponenty a tworzysz tylko po jednym (w obiegach pętli zmieniasz im tylko nazwy i łączysz je z innymi) ?

0

Chciałem dynamicznie utworzyć tyle zestawów Ado ile przebiegów w pętli. Tzn. 3 przebiegi pętli powinny dać: ADOConnection1, ADOQuery1, ADOTable1; ADOConnection2, ADOQuery2, ADOTable2; ADOConnection3, ADOQuery3, ADOTable3. Każdy zestaw powinien być sparowany.

2

To nie można po ludzku?

var
  ADO_Co: array [1..3] of TADOConnection;
  ADO_Qu: array [1..3] of TADOQuery;
  ADO_Ta: array [1..3] of TADOTable;
  i: Integer;
begin
 for i := 1 to 3 do
 begin
   ADO_Co[i]:= TADOConnection.Create(Form1);
   ADO_Qu[i]:= TADOQuery.Create(Form1);
   ADO_Ta[i]:= TADOTable.Create(Form1);
   ADO_Qu[i].Connection:= ADO_Co[i];
   ADO_Ta[i].Connection:= ADO_Co[i];
 end;
end;

Te zmienne ADO_Co, ADO_Qu, ADO_Ta zadeklaruj sobie w private formy i wszędzie się możesz odwoływać do nich np. do nich w taki sposób zamiast ADOConnection1.costam piszesz ADO_Co[1].costam zamiast ADOConnection2.costam piszesz ADO_Co[2].costam itd.

0

Nawet nie wiem jak Ci dziękować. Zrobiłem tak jak mi napisałeś i wszystko śmiga. :-)

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