これは私にナットを駆動している.... 私はcxComboBox1を移入するために私のデータベースの名前をフェッチ:不足している表名のプロパティ
procedure TForm1.FormShow(Sender: TObject);
var
I: Integer;
DBList: TStringDynArray;
begin
DBList := TDirectory.GetFiles(ExtractFilePath(ParamStr(0)), '*.abs', TSearchOption.soAllDirectories);
for I := 0 to Length(DBList) - 1 do
begin
cxCombobox1.Properties.Items.Add(DBList[I]);
end;
end;
これは私のデータベースのOK.Theリストの作品はcxCombobox1に表示。
2番目のcxComboboxには、データベースに属するテーブル名がcxCombobox1に表示されます。
procedure TForm1.cxComboBox1PropertiesChange(Sender: TObject);
var
TABLES: TStringList;
i: integer;
begin
if ABSTable1.Active = True then
ABSTable1.Close;
cxComboBox2.properties.Items.Clear;
TABLES := TStringList.Create;
ABSDatabase1.DatabaseFileName:=cxCombobox1.Text;
try
ABSDatabase1.Open;
ABSDatabase1.GetTablesList(TABLES);
for i:= 0 to TABLES.Count-1 do
cxComboBox2.properties.Items.Add(TABLES[i]);
finally
TABLES.free;
end;
end;
これは基本的に正常です。 cxComboBox1でデータベースを選択すると、cxComboBox2 に関連するテーブルが設定されます。
一般的な考え方は、cxComboBox2で選択するとテーブルを開くことです。 そして、私がやった:
procedure TForm1.ABSTable1BeforeOpen(DataSet: TDataSet);
begin
ABSTable1.DatabaseName:= ABSDatabase1.DatabaseName;
ABSTable1.TableName := cxComboBox2.Text;
end;
そして、私がやったcombobox2変更イベントには:
procedure TForm1.cxComboBox2PropertiesChange(Sender: TObject);
begin
cxGrid1DBTableView1.ClearItems;
ABSTable1.Open;
cxGrid1DBTableView1.DataController.CreateAllItems;
end;
これは、[OK]を動作します。しかし、私が選択したデータベース(combobox1) のテーブルをコンボボックス2に表示しているときに限ります。 テーブルを開いてから、コンボボックス1の別のデータベースを選択したとします。 「Missing ABSTable1.Tablename」というエラーが表示されます。
私はここで何が欠けていますか?テーブル名はどこで失われていますか? 私はボタンで変更イベントにcombobox2を交換する場合:
procedure TForm1.cxButton2Click(Sender: TObject);
begin
if ABSTable1.Active = True then
ABSTable1.Close;
cxGrid1DBTableView1.ClearItems;
ABSTable1.Open;
cxGrid1DBTableView1.DataController.CreateAllItems;
end;
その後、すべての作品....
'cxComboBox2.properties.Items.Clear;は、combobox2の変更イベントをトリガします。 combobox2の変更イベントでは、combobox2でテーブルが選択されたときにのみデータベースを開きます。 – NineBerry