请教 各位大哥:怎么取的 sql server 服务器 的名字(如 lsh\lsh2004).谢谢! |
尚未結案
|
lsh998
中階會員 ![]() ![]() ![]() 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
h@visli
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:103 回覆:429 積分:431 註冊:2004-02-13 發送簡訊給我 |
建議你參考一下SDAC元件,它的MSAccess原始檔案中有一個GetServerList的過程,就是用於取服務列表的。原型如下(具體請參考原始檔案): procedure GetServerList(List: TStrings);
procedure GetServerListByReg;
var
Reg: TRegistry;
i: integer;
Value: string;
sl: tstringlist;
begin
Reg := TRegistry.Create;
sl := TStringList.Create;
try
Reg.RootKey := HKEY_Local_Machine;
if Reg.OpenKeyReadOnly('SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo') then begin
Reg.GetValueNames(sl); // Delete non-server occurences
for i := sl.Count - 1 downto 0 do begin
Value := Reg.ReadString(sl[i]);
if Pos(',', Value) = 0 then
sl.Delete(i);
end; sl.Sort;
List.AddStrings(sl);
end;
finally
Reg.Free;
sl.Free;
end;
end; procedure GetServerListByOleDBEnum;
var
SourcesRowset: ISourcesRowset;
Rowset: IRowset;
ds: TCustomMSDataset;
iu: IUnknown;
begin
if CoCreateInstance(CLSID_SQLOLEDB_ENUMERATOR,
nil,
CLSCTX_INPROC_SERVER,
IID_ISourcesRowset,
SourcesRowset) <> S_OK then
Exit;
if SourcesRowset.GetSourcesRowset(nil, IID_IRowset, 0, nil, iu) <> S_OK then
Exit; Rowset := IRowset(iu);
ds := TCustomMSDataSet.Create(nil);
try
TDBAccessUtils.SetLockDebug(ds, True); // To prevent AV on TCustomDADataSet.OpenCursor -> UsedConnection.SQLMonitorClass
ds.FIRecordSet.SetIRowset(Rowset, False);
ds.Open; while not ds.Eof do begin
List.Add(ds.Fields[0].AsString);
ds.Next;
end;
finally
ds.Free;
end;
end; begin
List.Clear;
GetServerListByOleDBEnum;
GetServerListByReg;
end;
------
------------------------ 博采眾家之長,奉獻綿薄之力 ------------------------ |
lsh998
中階會員 ![]() ![]() ![]() 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
lsh998
中階會員 ![]() ![]() ![]() 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |