效果就完全不同了,你可以方便的選擇數據庫和表:
然後組合適當的SQL語言,最終打開一個合適的表。
進一步考慮,組合新的SQL語言的時候最好要有字段名的數據,這不需要從服 務器得到,因為在多層情況下,ClIEntDataSet實際上起著Ttable或者Tquery相 似的作用,對數據庫的控制上,有幾乎相同的語言,例如記錄指針的移動,字段 數據的取得和寫入等等,這樣一來,你也可以直接使用這些方法來操縱數據庫。
再一次提醒大家,ClIEntDataSet是個功能強大非常重要的控件,在Delphi的 很多高級場合,都要使用到它。
當然,利用ClIEntDataSet,被打開數據庫的字段名表也很容易得到。
首先再加一個Combbox控件Combbox3。
把SQL 查詢的Button事件作如下修改:
procedure TForm1.Button1Click(Sender: TObject);
//首先要定義兩個變量
var i,N:integer;
begin
ClIEntDataSet1.Close;
ClIEntDataSet1.CommandText := Memo1.Lines.Text;
ClIEntDataSet1.Open;
//這是後加入的顯示子段名的程序
ComboBox3.Clear;
N:=ClientDataSet1.FIEldCount;
for I := 0 to N - 1 do
ComboBox3.Items.Add(ClientDataSet1.Fields[i].FIEldName);
ComboBox3.Text:=ComboBox3.items[0];
end;
事實上,FormCreate事件程序也要加入相應的程序,使一打開程序就有子段 名表顯示。
procedure TForm1.FormCreate(Sender: TObject);
var
//增加兩個定義
I,N: Integer;
DBNames: OleVariant;
DBTables: OleVariant;
begin
// 連上應用程序服務器
DCOMConnection1.Connected := True;
// 取得BDE所有設置的數據庫別名數據
DBNames := DCOMConnection1.APPServer.GetDatabaseNames;
// 假如有數據庫別名數據,則將其一個一個地加到ComboBox控件內
if VarIsArray(DBNames) then
for I := 0 to VarArrayHighBound(DBNames, 1) do
ComboBox1.Items.Add(DBNames[I]);
//把默認的數據庫顯示在第一個
ComboBox1.Text:='abc';
//顯示表名
DBTables := DCOMConnection1.APPServer.GetTableNames;
if VarIsArray(DBTables) then
for I := 0 to VarArrayHighBound(DBTables, 1) do
ComboBox2.Items.Add(DBtables[I]);
ComboBox2.Text:=ComboBox2.items[0];
//顯示字段名表,增加的程序
ComboBox3.Clear;
N:=ClientDataSet1.FIEldCount;
for I := 0 to N - 1 do
ComboBox3.Items.Add(ClientDataSet1.Fields[i].FIEldName);
ComboBox3.Text:=ComboBox3.items[0];
end;
需要時,也可以寫入ComboBox3的雙擊事件:
好了,現在可以看看效果:
這些數據取得以後,你就可以把這個客戶程序做得更加方便通用,那就要看 你的想象力和程序設計的水平了,這裡的例子,主要是想提供客戶端使用DCOM提 供的方法的思想和規則,通過這樣的研究,您是不是對DCOM 和分布式數據庫的 問題有了更深的理解了呢?