我的程序里连接Oracle和SQL Server 2000两个数据库,使用的是ADOConnection连接,请问如何获得局域网内的Oracle和SQL Server服务器名称和服务器上的数据库名称,希望大家多多指教,多谢了!
解决方案 »
- TDBComBox控件的小问题
- 字体类问题?
- delphi为客户端,调用webservices
- 關於execl的自動換行和自動調整列的寬度和高度,急,請大家多指點.以前好像沒有相關貼子.
- 请各位高手给我一个学习delphi的理由好吗?(千万不要说没有理由)
- 这些都是什么控件啊,求高手帮忙
- 我下载了,IPSE622.exe(是InstallShield Professional), 有谁知道注册码吗?
- 求助,请帮忙!
- 请教斑竹
- Kingron,谢谢你的编程技巧(db.zip)给你送分!进来 吧
- 如何使用DBCHART控件实现2个Series关联呀
- delphi2006的tool palette中怎么没有AxtiveX项啊?
select name from sysdatabases
unit SqlServers;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SQLDMO_TLB, StdCtrls, Buttons;
type TdmoObject = record
SQL_DMO : _SQLServer;
lConnected : boolean;
end;type
TFormServersList = class(TForm)
Label1: TLabel;
Label2: TLabel;
CB_ServerNames: TComboBox;
CB_DataNames: TComboBox;
Label3: TLabel;
Label4: TLabel;
Ed_Login: TEdit;
Ed_Pwd: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
server_Names : TStringList;
PdmoObject : array of TdmoObject;
Function GetAllServers(ServerList : TStringList) : Boolean;
public
{ Public declarations }
end;var
FormServersList: TFormServersList;implementation{$R *.dfm}
Function TFormServersList.GetAllServers(ServerList : TStringList) : Boolean;
var
sApp : _Application ;
sName : NameList;
iPos : integer;
begin
Result := True ;
try
sApp := CoApplication.Create ; //创建的对象不用释放,delphi 自己会释放
sName := sApp.ListAvailableSQLServers;
except
Result := False;
Exit;
end;
if sName.Count > 0 then // 之所以 iPos 从1开始,是因为0 位置为空值即 ' '
for iPos := 1 to sName.Count - 1 do
begin
CB_ServerNames.Items.Add(sName.Item(iPos));
ServerList.Add(sName.Item(iPos));
end;
end;
procedure TFormServersList.FormCreate(Sender: TObject);
var
lcv : integer;
begin
server_Names := TStringList.Create;
if not GetAllServers(server_Names) then
begin
ShowMessage('无法获取服务器列表,可能缺少客户端DLL库函数');
exit;
end;
for lcv := 0 to server_Names.Count - 1 do
begin
SetLength(PdmoObject,lcv + 1);
with PdmoObject[lcv] do
begin
SQL_DMO := CoSQLServer.Create;
SQL_DMO.Name := Trim(server_Names[lcv]);
//登陆安全属性,NT 身份验证
SQL_DMO.LoginSecure := false;
// 设置一个连接超时
SQL_DMO.LoginTimeout := 3;
//自动重新登陆,如果第一次失败后
SQL_DMO.AutoReconnect := true;
SQL_DMO.ApplicationName := server_Names[lcv];
lConnected := false;
end;
end;
end;procedure TFormServersList.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
server_Names.Free;
end;procedure TFormServersList.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := CaFree;
end;procedure TFormServersList.FormShow(Sender: TObject);
begin
if CB_ServerNames.Items.Count > 0 then //列举所有服务器名字
CB_ServerNames.Text := CB_ServerNames.Items.Strings[0];
end;procedure TFormServersList.BitBtn1Click(Sender: TObject);
beginend;end.
SQLDMO 对像来自 SQL Server 2000 提供的动态连接库 SQLDMO.dll。
这个 dll 本身是一个 COM 对像,首先你必须从类型库中引用Microsoft SQLDMO Object Library (Version 8.0).
Delphi 会自动为你生成SQLDMO_TLB.PAS文件,文件中包括了所有 COM 对象的接口,
由于引入的SQLDMO “TDatabase”和 “TApplication”和其它几个缺省类名与 Delphi 自带的类名冲突,
所以自己可以修改成 _TypeName 的形式。或者其它的名字,在这里改成 T_Application 、T_Database 等
var
SQLServer:Variant;
ServerList:Variant;
i,nServers:integer;
sRetValue:String;
begin
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
for i := 1 to nservers do
ListBox1.Items.Add(ServerList.Item(i));
SQLServer:=NULL;
serverList:=NULL;
except
ListBox1.Items.add('No SQL SerVer!')
end;
end;