再看客戶端:
現在給它再加一個ComboBox,以顯示當前打開的數據庫的表名。
; 在.FormCreate事件過程中,再聲明一個變量:
DBTables: OleVariant;
在.FormCreate程序的最後加上:
//顯示表名
ComboBox2.Clear;
DBTables := DCOMConnection1.APPServer.GetTableNames;
if VarIsArray(DBTables) then
for I := 0 to VarArrayHighBound(DBTables, 1) do
ComboBox2.Items.Add(DBtables[I]);
為了在改變數據庫後也能正確顯示相應的表名,ComboBox1的雙擊事件也要加 上相應的一段。
procedure TForm1.ComboBox1DblClick(Sender: TObject);
var
UserName, PassWord: string;
//下面兩的變量聲明是新加的
DBTables: OleVariant;
i:integer;
begin
// 當您在ComboBox中選取的數據不是空字符串時
if ComboBox1.Text <> '' then
begin
ClIEntDataSet1.Close;
try
// 先給應用程序服務器傳一次空的UserName及PassWord
// 如果後台數據庫是Paradox或DBase可能就沒問題,
// 可是如果是SQL base的關系型數據庫則會收到exception。
//SetDatabaseNames是服務端的COM 方法
DCOMConnection1.APPServer.SetDatabaseName(ComboBox1.Text,'','');
except
// 由於後台數據庫是SQL base的關系型數據庫,所以您必須
// 通過Form2輸入UserName及PassWord,並且把這些數據
// 通過應用程序服務器提供的SetDatabaseName傳給後台數
// 據庫驗證。
on E: Exception do
if E.Message = 'PassWord Required' then
begin
if InputDialog(UserName, PassWord) then
DCOMConnection1.APPServer.SetDatabaseName(ComboBox1.Text,
UserName, PassWord);
end else raise;
end;
//顯示表名,這段程序是新加的
ComboBox2.Clear;
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];
end;
end;
給ComboBpx2加一個雙擊事件,可以把表的名字加入SQL 語言:
procedure TForm1.ComboBox2DblClick(Sender: TObject);
begin
Memo1.text:=Memo1.text+combobox2.text;
end;