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