如何得到SQL的服务器名和数据库名,当得到再把DELPHI内的ADOCONNECTION改成现在的服务器名
目的,做一个注册档,如果现在安装的SERVER NAME 与原先不同,则在DELPHI前台修
改。
目的,做一个注册档,如果现在安装的SERVER NAME 与原先不同,则在DELPHI前台修
改。
解决方案 »
- 多年前写了两个通用函数,一直怀疑有问题,请大家看看。
- webbrowser 中打开指定图片的问题
- 请教如何让程序在win7下让托盘图标默认显示?
- 请参与 【征求多用户操作的完美解决办法!分不够可以在开帖子!(300分)】一贴的同志近来接分!!2号贴
- 紧急求救:怎样通过汉字编码获得汉字的声母
- 出现错误:Invalid variant type convertion!在线等待
- 怎么没经验找工作那么难???????
- 关于TreeView?
- Installshield 12/14 不包括BDE??
- Delph中如何在运行时动态创建空间如TEdit,
- 高分求解,使用Socket通讯,如何在前台控制与SqlServer 2000连接数,比如超过5个客户端登录就强制退出程序!!!
- 如何在Delphi中使用多维动态数组?
一般sql都默认安装,扫描局域网得到计算机名连计算机名就可以了。
数据库名可以在master里创建一个表存放你的帐套。
var
SQLServer : Variant;
ServerList : Variant;
i,nServers : integer;
begin
Screen.Cursor := crHourGlass;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList:= SQLServer.ListAvailableSQLServers;
nServers:=ServerList.Count;
try
for i := 1 to nservers do
cbDBServer.Items.Add(ServerList.Item(i));
finally
SQLServer := Null;
ServerList := Null ;
end;
except
end;
Screen.Cursor := crDefault ;
FindOk := True;
end;
注意要USES ComCtrls。
StrConn := 'Provider=SQLOLEDB.1;Password='+edtDBPassword.Text
+';Persist Security Info=True;'
+'User ID='+edtDBUser.Text+';Initial Catalog='
+edtDBName.Text+';Data Source='+cbDBServer.Text;
adoconnection1.ConnectionString := StrConn ;
adoconnection1.LoginPrompt := False;
adoconnection1.CommandTimeout := 5;
try
try
adoconnection1.Connected := True;
except
end;
finally
if adoconnection1.Connected then
Application.MessageBox('测试连接成功!','MicroSoft 数据库连接',MB_OK+MB_ICONINFORMATION)
else begin
Application.MessageBox('测试连接失败,用户名、密码或数据库名称错误!','MicroSoft 数据库连接',MB_OK+MB_ICONINFORMATION);
// edtDBUser.SetFocus;
end;
adoconnection1.Close;
adoconnection1.Free;
uses AdoDb;var ds: wideString;
begin
ds := PromptDataSource(Application.Handle, '');
showmessage(ds);
//直接 Ado.ConnectionString := ds; 就可
end;
_SERVER_INFO_100 = record
sv100_platform_id: DWORD;
sv100_name: LPWSTR;
end;
{$EXTERNALSYM _SERVER_INFO_100}
TServerInfo100 = _SERVER_INFO_100;
SERVER_INFO_100 = _SERVER_INFO_100;
{$EXTERNALSYM SERVER_INFO_100}const
NERR_Success = 0;
MAX_PREFERRED_LENGTH = DWORD(-1);
SV_TYPE_SQLSERVER = $00000004;function NetApiBufferAllocate(ByteCount: DWORD; var Buffer: Pointer):
NET_API_STATUS; stdcall; external 'netapi32.dll' name 'NetApiBufferAllocate';function NetServerEnum(ServerName: LPCWSTR; Level: DWORD; var BufPtr: Pointer;
PrefMaxLen: DWORD; var EntriesRead: DWORD; var TotalEntries: DWORD;
ServerType: DWORD; Domain: LPCWSTR; ResumeHandle: PDWORD): NET_API_STATUS;
stdcall; external 'netapi32.dll' name 'NetServerEnum';function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall; external
'netapi32.dll' name 'NetApiBufferFree';function GetSQLServerList(out AList: TStrings; pwcServerName: PWChar = nil;
pwcDomain: PWChar = nil): Boolean;
var
NetAPIStatus: DWORD;
dwLevel: DWORD;
pReturnSvrInfo: Pointer;
dwPrefMaxLen: DWORD;
dwEntriesRead: DWORD;
dwTotalEntries: DWORD;
dwServerType: DWORD;
dwResumeHandle: PDWORD;
pCurSvrInfo: PServerInfo100;
i, j: Integer;
begin
Result := True;
try
if Trim(pwcServerName) = '' then
pwcServerName := nil; if Trim(pwcDomain) = '' then
pwcDomain := nil; dwLevel := 100;
pReturnSvrInfo := nil;
dwPrefMaxLen := MAX_PREFERRED_LENGTH;
dwEntriesRead := 0;
dwTotalEntries := 0;
dwServerType := SV_TYPE_SQLSERVER;
dwResumeHandle := nil; NetApiBufferAllocate(SizeOf(pReturnSvrInfo), pReturnSvrInfo);
try
NetAPIStatus := NetServerEnum(pwcServerName, dwLevel, pReturnSvrInfo,
dwPrefMaxLen, dwEntriesRead, dwTotalEntries, dwServerType, pwcDomain,
dwResumeHandle); if (NetAPIStatus = NERR_Success) and (pReturnSvrInfo <> nil) then
begin
pCurSvrInfo := pReturnSvrInfo; // 循环取得所有服务
i := 0;
j := dwEntriesRead;
while i < j do
begin
if pCurSvrInfo = nil then
Break; with AList do
Add(pCurSvrInfo^.sv100_name); Inc(i);
Inc(pCurSvrInfo);
end;
end;
finally
if Assigned(pReturnSvrInfo) then
NetApiBufferFree(pReturnSvrInfo);
end;
except
Result := False;
end;
end;调用:
var
i:integer;
List:TStrings;
begin
List:=TStringList.Create;
if GetSQLServerList(list) then
begin
for i:=0 to list.Count-1 do
ComboBox1.Items.Add(list[i]);
ComboBox1.ItemIndex:=0;
end;
end;
給我個例子,謝謝