2010年9月23日木曜日

SQL Server のデータベースのテーブルとフィールド名を表示する。(その1)

仕事でSql Serverのテーブルリストを表示する必要があったので・・・

DelphiでSQl Srerverのテーブルリストを表示する方法をいくつか


1. dbGOのConnectionのGetTableNamesメソッドとGetFieldNamesメソッドを利用する。


dbGoのGetTableNamesを利用すればInitial_Catalogで指定したデータベースの
テーブルリストを取得できます。

また、GetFieldNamesを利用すれば、指定したテーブルのフィールドのリストを表示できます。

ソースは、こんな感じ・・・
(ボタンをクリックするとテーブルのリストを表示し、リストの中のテーブルをクリックすると
クリックしたテーブルのリストを表示します。)

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2. begin  
  3.   ADOConnection1.Connected := true;  
  4.   ADOConnection1.GetTableNames(ListBox1.Items,false);  
  5.   ADOConnection1.Connected := false;  
  6. end;  
  7.   
  8. procedure TForm1.ListBox1Click(Sender: TObject);  
  9. var  
  10.   TableName : String;  
  11. begin  
  12.    if ListBox1.Items.Count > 0 then  
  13.    begin  
  14.       TableName := ListBox1.Items[ListBox1.ItemIndex];  
  15.       if Length(TableName) > 0 then  
  16.       begin  
  17.         ADOConnection1.Connected := true;  
  18.         ADOConnection1.GetFieldNames(TableName,ListBox2.Items);  
  19.         ADOConnection1.Connected := false;  
  20.       end;  
  21.    end;  
  22. end;  

2. DbExpressを利用する。

DbExpressのSQLConnectionにもGetTableNamesメソッドとGetFieldNamesがあるので
dbGOと同様に処理できます。

ただし、試した中では、DbExpressでは、スキーマを指定しないとdboスキーマのテーブル
しか取得しないようなので、GetSchemaNamesでスキーマ名のリストを取得したうえで
スキーマ毎にテーブルを取得する必要がありました。

でソースはこんな感じ。スキーマ名を取得してる関係でちょっと複雑です。

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2.   
  3. procedure TForm1.Button2Click(Sender: TObject);  
  4. var  
  5.   GetSchemaNames : TStringList;  
  6.   TableNames : TStringList;  
  7.   i,j : Integer;  
  8. begin  
  9.   ListBox3.Items.Clear;  
  10.   SQLConnection1.Connected := true;  
  11.   GetSchemaNames := TStringList.Create;  
  12.   try  
  13.     SQLConnection1.GetSchemaNames(GetSchemaNames);  
  14.     for i := 0 to GetSchemaNames.Count -1 do  
  15.     begin  
  16.       TableNames := TStringList.Create;  
  17.       try  
  18.         SQLConnection1.GetTableNames(TableNames,GetSchemaNames.Strings[i],false);  
  19.         for j := 0 to TableNames.Count-1 do  
  20.         begin  
  21.           ListBox3.Items.Add(GetSchemaNames.Strings[i] + '.' + TableNames.Strings[j]);  
  22.         end;  
  23.       finally  
  24.         TableNames.Free;  
  25.       end;  
  26.     end;  
  27.   finally  
  28.     GetSchemaNames.Free;  
  29.   end;  
  30.   SQLConnection1.Connected := false;  
  31. end;  
  32.   
  33. procedure TForm1.ListBox3Click(Sender: TObject);  
  34. var  
  35.   TableName : String;  
  36. begin  
  37.    if ListBox1.Items.Count > 0 then  
  38.    begin  
  39.       TableName := ListBox3.Items[ListBox3.ItemIndex];  
  40.       if Length(TableName) > 0 then  
  41.       begin  
  42.         SQLConnection1.Connected := true;  
  43.         SQLConnection1.GetFieldNames(TableName,ListBox4.Items);  
  44.         SQLConnection1.Connected := false;  
  45.       end;  
  46.   
  47.    end;  
  48. end;  

0 件のコメント: