DelphiでSQl Srerverのテーブルリストを表示する方法をいくつか
1. dbGOのConnectionのGetTableNamesメソッドとGetFieldNamesメソッドを利用する。
dbGoのGetTableNamesを利用すればInitial_Catalogで指定したデータベースの
テーブルリストを取得できます。
また、GetFieldNamesを利用すれば、指定したテーブルのフィールドのリストを表示できます。
ソースは、こんな感じ・・・
(ボタンをクリックするとテーブルのリストを表示し、リストの中のテーブルをクリックすると
クリックしたテーブルのリストを表示します。)
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Connected := true;
ADOConnection1.GetTableNames(ListBox1.Items,false);
ADOConnection1.Connected := false;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
TableName : String;
begin
if ListBox1.Items.Count > 0 then
begin
TableName := ListBox1.Items[ListBox1.ItemIndex];
if Length(TableName) > 0 then
begin
ADOConnection1.Connected := true;
ADOConnection1.GetFieldNames(TableName,ListBox2.Items);
ADOConnection1.Connected := false;
end;
end;
end;
2. DbExpressを利用する。
DbExpressのSQLConnectionにもGetTableNamesメソッドとGetFieldNamesがあるので
dbGOと同様に処理できます。
ただし、試した中では、DbExpressでは、スキーマを指定しないとdboスキーマのテーブル
しか取得しないようなので、GetSchemaNamesでスキーマ名のリストを取得したうえで
スキーマ毎にテーブルを取得する必要がありました。
でソースはこんな感じ。スキーマ名を取得してる関係でちょっと複雑です。
procedure TForm1.Button1Click(Sender: TObject);
procedure TForm1.Button2Click(Sender: TObject);
var
GetSchemaNames : TStringList;
TableNames : TStringList;
i,j : Integer;
begin
ListBox3.Items.Clear;
SQLConnection1.Connected := true;
GetSchemaNames := TStringList.Create;
try
SQLConnection1.GetSchemaNames(GetSchemaNames);
for i := 0 to GetSchemaNames.Count -1 do
begin
TableNames := TStringList.Create;
try
SQLConnection1.GetTableNames(TableNames,GetSchemaNames.Strings[i],false);
for j := 0 to TableNames.Count-1 do
begin
ListBox3.Items.Add(GetSchemaNames.Strings[i] + '.' + TableNames.Strings[j]);
end;
finally
TableNames.Free;
end;
end;
finally
GetSchemaNames.Free;
end;
SQLConnection1.Connected := false;
end;
procedure TForm1.ListBox3Click(Sender: TObject);
var
TableName : String;
begin
if ListBox1.Items.Count > 0 then
begin
TableName := ListBox3.Items[ListBox3.ItemIndex];
if Length(TableName) > 0 then
begin
SQLConnection1.Connected := true;
SQLConnection1.GetFieldNames(TableName,ListBox4.Items);
SQLConnection1.Connected := false;
end;
end;
end;
0 件のコメント:
コメントを投稿