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 件のコメント:
コメントを投稿