???如何判断是否安装SQL server 2000 数据库??? 如何判断系统是否安装有SQL server 2000 数据库,包括没安装时和安装完后又卸载了的情况都能判断,请问该怎么写代码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果是正常安装的,可以从注册表中获得,http://www.delphibbs.com/keylife/iblog_show.asp?xid=4557对于绿色版,那没办法了 对于楼上的,是正常安装的,我试了,对于刚装的系统,可以用注册表方式判断,判断结果正确,安装前与安装后提示都正确,可把sql server 2000卸载后,再用来判断结果就不对了,提示的是sql server已安装,不准确! 貌似 sql server 2000安装卸载后 还会有挂起文件的~ 获取SQL Server服务器列表的几种方法 一、 SQL DMO描述:SQL Distributed Management Objects(SQL分布式管理对象),存在于SQLDMO.dll文件中,实际上是一个COM 对象,通过调用SQL DMO的ListAvailableSQLServers方法取得。列表类型:列举装有“客户端”和“服务端”的计算机。适用条件:装有 SQL Server,且有SQLDMO.dll文件。速度:中调用示例:GetSQLServerList(ListBox1.items);代码:uses ComObj; function GetSQLServerList(var AList: TStrings): Boolean;var SQLServerApp: Variant; ServerList: Variant; i: Integer;begin Result := True; try SQLServerApp := CreateOleObject('SQLDMO.Application'); ServerList := SQLServerApp.ListAvailableSQLServers; for i := 1 to ServerList.Count do AList.Add(ServerList.Item(i)); SQLServerApp := Unassigned; ServerList := Unassigned; except Result := False; end;end; 二、 NetServerEnum描述:网络服务函数,存在于NetApi32.dll文件中;通过NetServerEnum函数可取得装有SQL Server服务端的计算机列表,只装有SQL Server客户端的计算机将不会被列举其中;如果一台计算机的SQL Server服务刚刚启动,那么此函数将会过很久才能取到该计算机。列表类型:仅列举装有“服务端”的计算机。适用条件:有NetApi32.dll文件。速度:快调用示例:GetSQLServerList(ListBox1.items);代码:type NET_API_STATUS = DWORD; PServerInfo100 = ^TServerInfo100; _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(var 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 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) or (NetAPIStatus = ERROR_MORE_DATA)) and (pReturnSvrInfo <> nil) then begin pCurSvrInfo := pReturnSvrInfo; // 循环取得所有SQL Server服务器 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; 三、 SQLBrowseConnect描述:ODBC函数(Microsoft Open Database Connectivity,开放式数据库连接),存在于odbc32.dll文件中;通过SQLBrowseConnect函数可返回连接字符串信息,包括DSN、DRIVER、SERVER、UID、PWD、APP、WSID、DATABASE、LANGUAGE等信息。在函数GetODBCInfo 中传入itServer、itDatabase、itLanguage可分别取得“服务器”、“数据库”及“语言”等信息列表,其中itDatabase、itLanguage默认取本地信息,取远程信息请自行修改“'Driver={SQL Server};SERVER=(local);UID=sa;PWD='”连接字符串。列表类型:列举装有“客户端”和“服务端”的计算机。适用条件:由于MDAC 2.6 、2.6 SP1、2.7和Microsoft ODBC Driver for SQL Server 2000 2000.80.194有Bug,因此在这些版本中此函数无法取得Microsoft SQL Server 7.0的服务器。速度:中调用示例:GetODBCInfo(ListBox1.items, itServer);代码:type TInfoType = (itServer, itDatabase, itLanguage); SQLHANDLE = Pointer; SQLSMALLINT = SHORT; SQLINTEGER = LongInt; PSQLHANDLE = ^SQLHANDLE; SQLHENV = SQLHANDLE; SQLHDBC = SQLHANDLE; SQLRETURN = SQLSMALLINT; SQLCHAR = UCHAR; PSQLCHAR = ^SQLCHAR; SQLPOINTER = Pointer; PSQLSMALLINT = ^SQLSMALLINT; function SQLAllocHandle(HandleType: SQLSMALLINT; InputHandle: SQLHANDLE; OutputHandle: PSQLHANDLE): SQLRETURN; stdcall; external 'odbc32.dll' name 'SQLAllocHandle'; function SQLSetEnvAttr(EnvironmentHandle: SQLHENV; Attribute: SQLINTEGER; Value: SQLPOINTER; StringLength: SQLINTEGER): SQLRETURN; stdcall; external 'odbc32.dll' name 'SQLSetEnvAttr'; function SQLBrowseConnect(hdbc: SQLHDBC; szConnStrIn: PSQLCHAR; cbConnStrIn: SQLSMALLINT; szConnStrOut: PSQLCHAR; cbConnStrOutMax: SQLSMALLINT; pcbConnStrOut: PSQLSMALLINT): SQLRETURN; stdcall; external 'odbc32.dll' name 'SQLBrowseConnect'; function SQLDisconnect(ConnectionHandle: SQLHDBC): SQLRETURN; stdcall; external 'odbc32.dll' name 'SQLDisconnect'; function SQLFreeHandle(HandleType: SQLSMALLINT; Handle: SQLHANDLE): SQLRETURN; stdcall; external 'odbc32.dll' name 'SQLFreeHandle'; const SQL_HANDLE_ENV = 1; SQL_HANDLE_DBC = 2; SQL_NULL_HANDLE = LongInt(0); SQL_SUCCESS = 0; SQL_ERROR = -1; SQL_ATTR_ODBC_VERSION = 200; SQL_OV_ODBC3 = ULONG(3); SQL_NTS = -3; function GetODBCInfo(var AList: TStrings; InfoType: TInfoType): Boolean;const ConnStrOutMax = 4824; SplitterStr = '={';var HENV: SQLHENV; HDBC: SQLHDBC; RetCode: SQLRETURN; ConnStrOut: PSQLCHAR; cbConnStrOut: SQLSMALLINT; ConnStrIn, TmpStr: string; TmpPos: Integer;begin case InfoType of itServer: ConnStrIn := 'Driver={SQL Server}'; itDatabase, itLanguage: ConnStrIn := 'Driver={SQL Server};SERVER=(local);UID=sa;PWD='; end; Result := False; try // 分配 ODBC 环境句柄 RetCode := SQLAllocHandle(SQL_HANDLE_ENV, SQLPOINTER(SQL_NULL_HANDLE), @HENV); if RetCode = SQL_ERROR then Exit; // 设置 ODBC 版本 RetCode := SQLSetEnvAttr(HENV, SQL_ATTR_ODBC_VERSION, SQLPointer(SQL_OV_ODBC3), 0); if RetCode <> SQL_SUCCESS then Exit; // 分配数据库连接句柄 RetCode := SQLAllocHandle(SQL_HANDLE_DBC, HENV, @HDBC); if RetCode <> SQL_SUCCESS then Exit; GetMem(ConnStrOut, ConnStrOutMax); RetCode := SQLBrowseConnect(HDBC, PSQLCHAR(ConnStrIn), SQL_NTS, ConnStrOut, ConnStrOutMax, @cbConnStrOut); if RetCode <> SQL_ERROR then begin TmpStr := PChar(ConnStrOut); if InfoType = itLanguage then Delete(TmpStr, 1, AnsiPos('};', TmpStr) + 1); Delete(TmpStr, 1, AnsiPos(SplitterStr, TmpStr) + 1); Delete(TmpStr, AnsiPos('}', TmpStr), Length(TmpStr)); while TmpStr <> '' do begin TmpPos := AnsiPos(',', TmpStr); if TmpPos > 0 then AList.Add(Copy(TmpStr, 1, TmpPos - 1)) else begin AList.Add(TmpStr); TmpStr := ''; end; Delete(TmpStr, 1, TmpPos) end; Result := True; end; FreeMem(ConnStrOut, ConnStrOutMax); finally if Assigned(HDBC) then begin SQLDisconnect(HDBC); SQLFreeHandle(SQL_HANDLE_DBC, HDBC); HDBC := nil; end; if Assigned(HENV) then begin SQLFreeHandle(SQL_HANDLE_ENV, HENV); HENV := nil; end; end;end; Delphi代码实现检查电脑中是否安装SQL Server数据库2010-04-20 20:011.检查注册表ARegistry := Tregistry.Create;ARegistry.RootKey := HKEY_LOCAL_MACHINE;tryARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);cdkey := ARegistry.ReadString('CD_KEY');ARegistry.CloseKey;exceptcdkey := '';end;2列出局域网上SQLSERVER服务var SQLServer:Variant; TABLE与QUERY.的小问题. 〓〓如何控制不允许向EDIT中输入全角字符? 100分求Recordset.Find的用法,在线等!马上结贴! 两个小问题 belllab,你有DevExpress系列 For D7版的下载地址吗? Topendialog中哪个属性改变编码类型,把ANCI改变为UNICODE <<<< 这个线程问题 300分。 求教n的阶乘的算法。 有没这样的控件? 如何得到局域网中另一台PC的系统时间? delphi时间转字符在win7提示异常 DELPHI中,中文字符可否直接转换成十进制?
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4557
对于绿色版,那没办法了
ARegistry := Tregistry.Create;
ARegistry.RootKey := HKEY_LOCAL_MACHINE;
try
ARegistry.OpenKey('SOFTWARE\MICROSOFT\MICROSOFT SQL SERVER\80\Registration', False);
cdkey := ARegistry.ReadString('CD_KEY');
ARegistry.CloseKey;
except
cdkey := '';
end;2列出局域网上SQLSERVER服务var SQLServer:Variant;