{"id":5013,"date":"2024-01-13T19:29:05","date_gmt":"2024-01-13T11:29:05","guid":{"rendered":"https:\/\/www.kenpai.com\/cms\/5013\/"},"modified":"2024-01-13T19:29:05","modified_gmt":"2024-01-13T11:29:05","slug":"delphi%e4%b8%8b%e6%a3%80%e6%9f%a5sql-server%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%bd%93%e5%89%8d%e8%bf%90%e8%a1%8c%e7%8a%b6%e6%80%81%ef%bc%81","status":"publish","type":"post","link":"https:\/\/www.kenpai.com\/cms\/5013\/","title":{"rendered":"Delphi\u4e0b\u68c0\u67e5SQL Server\u670d\u52a1\u5668\u5f53\u524d\u8fd0\u884c\u72b6\u6001\uff01"},"content":{"rendered":"<\/p>\n<p>Delphi\u4e0b\u68c0\u67e5SQL Server\u670d\u52a1\u5668\u5f53\u524d\u8fd0\u884c\u72b6\u6001\uff01<br \/>\u8981\u6c42\uff1a\uff24\uff45\uff4c\uff50\uff48\uff49\u4e0b\u968f\u65f6\u76d1\u63a7\uff33\uff31\uff2c\u3000\uff33\uff45\uff52\uff56\uff45\uff52\u72b6\u6001\u3002<br \/>\uff11\u3001\u547d\u4ee4\u63d0\u793a\u7b26\u4e0b\u53ef\u7528\uff1aTELNET &lt;SQL Server IP&gt; 1433\u3000\u3000\u68c0\u67e5\u3002<br \/>\uff12\u3001\uff24\uff45\uff4c\uff50\uff48\uff49\u4e0b\u5982\u4f55\u6a21\u62df\u5b9e\u73b0\u4e0a\u8ff0\u529f\u80fd\u3002<\/p>\n<p style=\"text-align:\">&#8212;&#8212;&#8212;-<br \/>\u539f\u6765\u505a\u8fc7\uff1a<br \/>function GetSqlServerStatus(lpszComputerName: LPCTSTR): Integer;<br \/>var<br \/>ssStatus: SERVICE_STATUS;<br \/>dwOldCheckPoint: DWORD;<br \/>dwStartTickCount: DWORD;<br \/>dwWaitTime: DWORD;<br \/>dwStatus: DWORD;<br \/>lpszServiceName: LPCTSTR;<br \/>schSCManager: SC_HANDLE;<br \/>schService: SC_HANDLE;<br \/>begin<br \/>if (lpszComputerName &lt;&gt; nil) and<br \/>((StrComp(lpszComputerName, \\\\\\&#8217;127.0.0.1\\\\\\&#8217;) = 0) or (StrComp(lpszComputerName, \\\\\\&#8217;.\\\\\\&#8217;) = 0)) then<br \/>lpszComputerName := nil;<br \/>lpszServiceName := \\\\\\&#8217;MSSQLServer\\\\\\&#8217;;<br \/>schSCManager := OpenSCManager(<br \/>lpszComputerName, \/\/Computer name<br \/>nil, \/\/ ServicesActive database<br \/>SC_MANAGER_ALL_ACCESS); \/\/ full access rights<\/p>\n<p>if schSCManager = 0 then<br \/>GetSqlServerStatus := -1; \/\/Machine not exists<br \/>schService := OpenService(<br \/>schSCManager, \/\/ SCM database<br \/>lpszServiceName, \/\/ service name<br \/>SERVICE_ALL_ACCESS);<br \/>if schService = 0 then begin<br \/>CloseServiceHandle(schService);<br \/>GetSqlServerStatus := -2; \/\/SqlServer Service not Exists<br \/>end;<br \/>if not QueryServiceStatus(<br \/>schService, \/\/ handle to service<br \/>ssStatus) then begin \/\/ address of status information structure<br \/>GetSqlServerStatus := -3; \/\/MyErrorExit(\\\\\\&#8217;QueryServiceStatus\\\\\\&#8217;);<br \/>Result := ssStatus.dwCurrentState;<br \/>end;<br \/>\/\/&#8212;&#8212;&#8212;-<br \/>\u7f51\u4e0a\u627e\u7684,\u770b\u770b\u6709\u7528\u4e0d<br \/>uses Registry, ShellAPI, FileCtrl, Unit2;<br \/>{$R *.DFM}<\/p>\n<p>function IsNT: Boolean;<br \/>begin<br \/>Result := (Win32MajorVersion &gt;= 4) and (Win32Platform = VER_PLATFORM_WIN32_NT);<br \/>end;<br \/>var<br \/>IsExists: Boolean = False;<br \/>function IsExistsMSSQL: Boolean;<br \/>const<br \/>MSSQLSERVER = \\\\\\&#8217;SOFTWARE\/Microsoft\/MSSQLServer\\\\\\&#8217;;<br \/>Reg: TRegistry;<br \/>Result := IsExists;<br \/>if Result then Exit;<br \/>if not IsNT then<br \/>Reg := TRegistry.Create else<br \/>Reg := TRegistry.Create(KEY_READ);<br \/>with Reg do<br \/>try<br \/>Reg.RootKey := HKEY_LOCAL_MACHINE;<br \/>Result := KeyExists(MSSQLSERVER);<br \/>IsExists := Result;<br \/>finally<br \/>Free;<br \/>end;<br \/>MSSQL_98StartCommand = \\\\\\&#8217;scm -action 1 -pwd &quot;%s&quot;\\\\\\&#8217;;<br \/>MSSQL_NTStartCommand = \\\\\\&#8217;net start mssqlserver\\\\\\&#8217;;<br \/>MSSQL_98StopCommand = \\\\\\&#8217;scm -action 6\\\\\\&#8217;;<br \/>MSSQL_NTStopCommand = \\\\\\&#8217;net stop mssqlserver\\\\\\&#8217;;<br \/>function StartMSSQL(Pass: string): Boolean;<br \/>S: string;<br \/>Screen.Cursor := crHourGlass;<br \/>if not IsNT then<br \/>S := Format(MSSQL_98StartCommand, [Pass]) else<br \/>S := MSSQL_NTStartCommand;<br \/>try<br \/>WinExec(PChar(S), SW_HIDE);<br \/>Result := True;<br \/>except<br \/>Result := False;<br \/>end;<br \/>Screen.Cursor := crDefault;<br \/>function StopMSSQL: Boolean;<br \/>WinExec(MSSQL_98StopCommand, SW_HIDE) else<br \/>WinExec(MSSQL_NTStopCommand, SW_HIDE);<br \/>procedure TForm1.Button2Click(Sender: TObject);<br \/>if StartMSSQL(edPass.Text) then<br \/>MessageBox(Handle, \\\\\\&#8217;\u542f\u52a8\u5b8c\u6210\\\\\\&#8217;, \\\\\\&#8217;\u5b8c\u6210\\\\\\&#8217;, MB_OK   MB_ICONINFORMATION);<br \/>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br \/>program Project1;<br \/>uses<br \/>Windows,<br \/>WinSvc;<br \/>procedure RunMSSQLSERVICE;<br \/>SrvHandle: SC_HANDLE;<br \/>Service_Status: _SERVICE_STATUS;<br \/>SrvStatus : Integer;<br \/>try<br \/>SrvHandle := OpenSCManager(\\\\\\&#8217;\\\\\\&#8217;, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);<br \/>SrvHandle := OpenService(SrvHandle, PChar(\\\\\\&#8217;MSSQLServer\\\\\\&#8217;), SERVICE_QUERY_STATUS or SERVICE_START);<br \/>if QueryServiceStatus(SrvHandle, Service_Status)<br \/>then<br \/>SrvStatus := Service_Status.dwCurrentState;<br \/>if SrvStatus = SERVICE_STOPPED<br \/>Winexec(\\\\\\&#8217;scm -action 1 -slient 1 -service mssqlserver \\\\\\&#8217;,sw_Normal);<br \/>except<br \/>RunMSSQLSERVICE;<br \/>end.<br \/>\u83b7\u53d6SQL Server\u670d\u52a1\u5668\u5217\u8868\u7684\u51e0\u79cd\u65b9\u6cd5<\/p>\n<p>\u4e00\u3001 SQL DMO<br \/>\u63cf\u8ff0\uff1aSQL Distributed Management Objects\uff08SQL\u5206\u5e03\u5f0f\u7ba1\u7406\u5bf9\u8c61\uff09\uff0c\u5b58\u5728\u4e8eSQLDMO.dll\u6587\u4ef6\u4e2d\uff0c\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2aCOM \u5bf9\u8c61\uff0c\u901a\u8fc7\u8c03\u7528SQL DMO\u7684ListAvailableSQLServers\u65b9\u6cd5\u53d6\u5f97\u3002<br \/>\u5217\u8868\u7c7b\u578b\uff1a\u5217\u4e3e\u88c5\u6709&ldquo;\u5ba2\u6237\u7aef&rdquo;\u548c&ldquo;\u670d\u52a1\u7aef&rdquo;\u7684<strong>\u8ba1\u7b97\u673a<\/strong>\u3002<br \/>\u9002\u7528\u6761\u4ef6\uff1a\u88c5\u6709 SQL Server\uff0c\u4e14\u6709SQLDMO.dll\u6587\u4ef6\u3002<br \/>\u901f\u5ea6\uff1a\u4e2d<br \/>\u8c03\u7528\u793a\u4f8b\uff1aGetSQLServerList(ListBox1.items);<br \/>\u4ee3\u7801\uff1a<br \/>ComObj;<br \/>function GetSQLServerList(var AList: TStrings): Boolean;<br \/>SQLServerApp: Variant;<br \/>ServerList: Variant;<br \/>i: Integer;<br \/>Result := True;<br \/>try<br \/>SQLServerApp := CreateOleObject(\\\\\\&#8217;SQLDMO.Application\\\\\\&#8217;);<br \/>ServerList := SQLServerApp.ListAvailableSQLServers;<br \/>for i := 1 to ServerList.Count do<br \/>AList.Add(ServerList.Item(i));<br \/>SQLServerApp := Unassigned;<br \/>ServerList := Unassigned;<br \/>except<br \/>Result := False;<br \/>\u4e8c\u3001 NetServerEnum<br \/>\u63cf\u8ff0\uff1a<strong>\u7f51\u7edc<\/strong>\u670d\u52a1\u51fd\u6570\uff0c\u5b58\u5728\u4e8eNetApi32.dll\u6587\u4ef6\u4e2d\uff1b\u901a\u8fc7NetServerEnum\u51fd\u6570\u53ef\u53d6\u5f97\u88c5\u6709SQL Server\u670d\u52a1\u7aef\u7684\u8ba1\u7b97\u673a\u5217\u8868\uff0c\u53ea\u88c5\u6709SQL Server\u5ba2\u6237\u7aef\u7684\u8ba1\u7b97\u673a\u5c06\u4e0d\u4f1a\u88ab\u5217\u4e3e\u5176\u4e2d\uff1b\u5982\u679c\u4e00\u53f0\u8ba1\u7b97\u673a\u7684SQL Server\u670d\u52a1\u521a\u521a\u542f\u52a8\uff0c\u90a3\u4e48\u6b64\u51fd\u6570\u5c06\u4f1a\u8fc7\u5f88\u4e45\u624d\u80fd\u53d6\u5230\u8be5\u8ba1\u7b97\u673a\u3002<br \/>\u5217\u8868\u7c7b\u578b\uff1a\u4ec5\u5217\u4e3e\u88c5\u6709&ldquo;\u670d\u52a1\u7aef&rdquo;\u7684\u8ba1\u7b97\u673a\u3002<br \/>\u9002\u7528\u6761\u4ef6\uff1a\u6709NetApi32.dll\u6587\u4ef6\u3002<br \/>\u901f\u5ea6\uff1a\u5feb<br \/>type<br \/>NET_API_STATUS = DWORD;<br \/>PServerInfo100 = ^TServerInfo100;<br \/>_SERVER_INFO_100 = record<br \/>sv100_platform_id: DWORD;<br \/>sv100_name: LPWSTR;<br \/>{$EXTERNALSYM _SERVER_INFO_100}<br \/>TServerInfo100 = _SERVER_INFO_100;<br \/>SERVER_INFO_100 = _SERVER_INFO_100;<br \/>{$EXTERNALSYM SERVER_INFO_100}<br \/>const<br \/>NERR_Success = 0;<br \/>MAX_PREFERRED_LENGTH = DWORD(-1);<br \/>SV_TYPE_SQLSERVER = $00000004;<br \/>function NetApiBufferAllocate(ByteCount: DWORD; var Buffer: Pointer):<br \/>NET_API_STATUS; stdcall; external \\\\\\&#8217;netapi32.dll\\\\\\&#8217; name \\\\\\&#8217;NetApiBufferAllocate\\\\\\&#8217;;<br \/>function NetServerEnum(ServerName: LPCWSTR; Level: DWORD; var BufPtr: Pointer;<br \/>PrefMaxLen: DWORD; var EntriesRead: DWORD; var TotalEntries: DWORD;<br \/>ServerType: DWORD; Domain: LPCWSTR; ResumeHandle: PDWORD): NET_API_STATUS;<br \/>stdcall; external \\\\\\&#8217;netapi32.dll\\\\\\&#8217; name \\\\\\&#8217;NetServerEnum\\\\\\&#8217;;<br \/>function NetApiBufferFree(Buffer: Pointer): NET_API_STATUS; stdcall; external<br \/>\\\\\\&#8217;netapi32.dll\\\\\\&#8217; name \\\\\\&#8217;NetApiBufferFree\\\\\\&#8217;;<br \/>function GetSQLServerList(var AList: TStrings; pwcServerName: PWChar = nil;<br \/>pwcDomain: PWChar = nil): Boolean;<br \/>NetAPIStatus: DWORD;<br \/>dwLevel: DWORD;<br \/>pReturnSvrInfo: Pointer;<br \/>dwPrefMaxLen: DWORD;<br \/>dwEntriesRead: DWORD;<br \/>dwTotalEntries: DWORD;<br \/>dwServerType: DWORD;<br \/>dwResumeHandle: PDWORD;<br \/>pCurSvrInfo: PServerInfo100;<br \/>i, j: Integer;<br \/>dwLevel := 100;<br \/>pReturnSvrInfo := nil;<br \/>dwPrefMaxLen := MAX_PREFERRED_LENGTH;<br \/>dwEntriesRead := 0;<br \/>dwTotalEntries := 0;<br \/>dwServerType := SV_TYPE_SQLSERVER; \/\/\u670d\u52a1\u5668\u7c7b\u578b<br \/>dwResumeHandle := nil;<br \/>NetApiBufferAllocate(SizeOf(pReturnSvrInfo), pReturnSvrInfo);<br \/>try<br \/>NetAPIStatus := NetServerEnum(pwcServerName, dwLevel, pReturnSvrInfo,<br \/>dwPrefMaxLen, dwEntriesRead, dwTotalEntries, dwServerType, pwcDomain,<br \/>dwResumeHandle);<br \/>if ((NetAPIStatus = NERR_Success) or (NetAPIStatus = ERROR_MORE_DATA)) and<br \/>(pReturnSvrInfo &lt;&gt; nil) then<br \/>begin<br \/>pCurSvrInfo := pReturnSvrInfo;<br \/>\/\/ \u5faa\u73af\u53d6\u5f97\u6240\u6709SQL Server\u670d\u52a1\u5668<br \/>i := 0;<br \/>j := dwEntriesRead;<br \/>while i &lt; j do<br \/>begin<br \/>if pCurSvrInfo = nil then<br \/>Break;<br \/>with AList do<br \/>Add(pCurSvrInfo^.sv100_name);<br \/>Inc(i);<br \/>Inc(pCurSvrInfo);<br \/>end;<br \/>end;<br \/>finally<br \/>if Assigned(pReturnSvrInfo) then<br \/>NetApiBufferFree(pReturnSvrInfo);<br \/>end;<br \/>\u4e09\u3001 SQLBrowseConnect<br \/>\u63cf\u8ff0\uff1aODBC\u51fd\u6570\uff08Microsoft Open Database Connectivity\uff0c\u5f00\u653e\u5f0f\u6570\u636e\u5e93\u8fde\u63a5\uff09\uff0c\u5b58\u5728\u4e8eodbc32.dll\u6587\u4ef6\u4e2d\uff1b\u901a\u8fc7SQLBrowseConnect\u51fd\u6570\u53ef\u8fd4\u56de\u8fde\u63a5\u5b57\u7b26\u4e32\u4fe1\u606f\uff0c\u5305\u62ecDSN\u3001DRIVER\u3001SERVER\u3001UID\u3001PWD\u3001APP\u3001WSID\u3001DATABASE\u3001LANGUAGE\u7b49\u4fe1\u606f\u3002\u5728\u51fd\u6570GetODBCInfo \u4e2d\u4f20\u5165itServer\u3001itDatabase\u3001itLanguage\u53ef\u5206\u522b\u53d6\u5f97&ldquo;\u670d\u52a1\u5668&rdquo;\u3001&ldquo;\u6570\u636e\u5e93&rdquo;\u53ca&ldquo;\u8bed\u8a00&rdquo;\u7b49\u4fe1\u606f\u5217\u8868\uff0c\u5176\u4e2d itDatabase\u3001itLanguage\u9ed8\u8ba4\u53d6\u672c\u5730\u4fe1\u606f\uff0c\u53d6\u8fdc\u7a0b\u4fe1\u606f\u8bf7\u81ea\u884c\u4fee\u6539&ldquo;\\\\\\&#8217;Driver={SQL Server};SERVER=(local);UID=sa;PWD=\\\\\\&#8217;&rdquo;\u8fde\u63a5\u5b57\u7b26\u4e32\u3002<br \/>\u9002\u7528\u6761\u4ef6\uff1a\u7531\u4e8eMDAC 2.6 \u30012.6 SP1\u30012.7\u548cMicrosoft ODBC Driver for SQL Server 2000 2000.80.194\u6709Bug\uff0c\u56e0\u6b64\u5728\u8fd9\u4e9b\u7248\u672c\u4e2d\u6b64\u51fd\u6570\u65e0\u6cd5\u53d6\u5f97Microsoft SQL Server 7.0\u7684\u670d\u52a1\u5668\u3002<br \/>\u8c03\u7528\u793a\u4f8b\uff1aGetODBCInfo(ListBox1.items, itServer);<br \/>TInfoType = (itServer, itDatabase, itLanguage);<br \/>SQLHANDLE = Pointer;<br \/>SQLSMALLINT = SHORT;<br \/>SQLINTEGER = LongInt;<br \/>PSQLHANDLE = ^SQLHANDLE;<br \/>SQLHENV = SQLHANDLE;<br \/>SQLHDBC = SQLHANDLE;<br \/>SQLRETURN = SQLSMALLINT;<br \/>SQLCHAR = UCHAR;<br \/>PSQLCHAR = ^SQLCHAR;<br \/>SQLPOINTER = Pointer;<br \/>PSQLSMALLINT = ^SQLSMALLINT;<br \/>function SQLAllocHandle(HandleType: SQLSMALLINT; InputHandle: SQLHANDLE;<br \/>OutputHandle: PSQLHANDLE): SQLRETURN; stdcall; external \\\\\\&#8217;odbc32.dll\\\\\\&#8217; name<br \/>\\\\\\&#8217;SQLAllocHandle\\\\\\&#8217;;<br \/>function SQLSetEnvAttr(EnvironmentHandle: SQLHENV; Attribute: SQLINTEGER;<br \/>Value: SQLPOINTER; StringLength: SQLINTEGER): SQLRETURN; stdcall; external<br \/>\\\\\\&#8217;odbc32.dll\\\\\\&#8217; name \\\\\\&#8217;SQLSetEnvAttr\\\\\\&#8217;;<br \/>function SQLBrowseConnect(hdbc: SQLHDBC; szConnStrIn: PSQLCHAR;<br \/>cbConnStrIn: SQLSMALLINT; szConnStrOut: PSQLCHAR;<br \/>cbConnStrOutMax: SQLSMALLINT; pcbConnStrOut: PSQLSMALLINT): SQLRETURN;<br \/>stdcall; external \\\\\\&#8217;odbc32.dll\\\\\\&#8217; name \\\\\\&#8217;SQLBrowseConnect\\\\\\&#8217;;<br \/>function SQLDisconnect(ConnectionHandle: SQLHDBC): SQLRETURN; stdcall; external<br \/>\\\\\\&#8217;odbc32.dll\\\\\\&#8217; name \\\\\\&#8217;SQLDisconnect\\\\\\&#8217;;<br \/>function SQLFreeHandle(HandleType: SQLSMALLINT; Handle: SQLHANDLE): SQLRETURN;<br \/>stdcall; external \\\\\\&#8217;odbc32.dll\\\\\\&#8217; name \\\\\\&#8217;SQLFreeHandle\\\\\\&#8217;;<br \/>SQL_HANDLE_ENV = 1;<br \/>SQL_HANDLE_DBC = 2;<br \/>SQL_NULL_HANDLE = LongInt(0);<br \/>SQL_SUCCESS = 0;<br \/>SQL_ERROR = -1;<br \/>SQL_ATTR_ODBC_VERSION = 200;<br \/>SQL_OV_ODBC3 = ULONG(3);<br \/>SQL_NTS = -3;<br \/>function GetODBCInfo(var AList: TStrings; InfoType: TInfoType): Boolean;<br \/>ConnStrOutMax = 4824;<br \/>SplitterStr = \\\\\\&#8217;={\\\\\\&#8217;;<br \/>HENV: SQLHENV;<br \/>HDBC: SQLHDBC;<br \/>RetCode: SQLRETURN;<br \/>ConnStrOut: PSQLCHAR;<br \/>cbConnStrOut: SQLSMALLINT;<br \/>ConnStrIn, TmpStr: string;<br \/>TmpPos: Integer;<br \/>case InfoType of<br \/>itServer: ConnStrIn := \\\\\\&#8217;Driver={SQL Server}\\\\\\&#8217;;<br \/>itDatabase, itLanguage: ConnStrIn := \\\\\\&#8217;Driver={SQL Server};SERVER=(local);UID=sa;PWD=\\\\\\&#8217;;<br \/>Result := False;<br \/>\/\/ \u5206\u914d ODBC \u73af\u5883\u53e5\u67c4<br \/>RetCode := SQLAllocHandle(SQL_HANDLE_ENV, SQLPOINTER(SQL_NULL_HANDLE), @HENV);<br \/>if RetCode = SQL_ERROR then<br \/>Exit;<br \/>\/\/ \u8bbe\u7f6e ODBC \u7248\u672c<br \/>RetCode := SQLSetEnvAttr(HENV, SQL_ATTR_ODBC_VERSION, SQLPointer(SQL_OV_ODBC3), 0);<br \/>if RetCode &lt;&gt; SQL_SUCCESS then<br \/>\/\/ \u5206\u914d\u6570\u636e\u5e93\u8fde\u63a5\u53e5\u67c4<br \/>RetCode := SQLAllocHandle(SQL_HANDLE_DBC, HENV, @HDBC);<br \/>GetMem(ConnStrOut, ConnStrOutMax);<br \/>RetCode := SQLBrowseConnect(HDBC, PSQLCHAR(ConnStrIn), SQL_NTS, ConnStrOut,<br \/>ConnStrOutMax, @cbConnStrOut);<br \/>if RetCode &lt;&gt; SQL_ERROR then<br \/>begin<br \/>TmpStr := PChar(ConnStrOut);<br \/>if InfoType = itLanguage then<br \/>Delete(TmpStr, 1, AnsiPos(\\\\\\&#8217;};\\\\\\&#8217;, TmpStr)   1);<br \/>Delete(TmpStr, 1, AnsiPos(SplitterStr, TmpStr)   1);<br \/>Delete(TmpStr, AnsiPos(\\\\\\&#8217;}\\\\\\&#8217;, TmpStr), Length(TmpStr));<br \/>while TmpStr &lt;&gt; \\\\\\&#8217;\\\\\\&#8217; do<br \/>TmpPos := AnsiPos(\\\\\\&#8217;,\\\\\\&#8217;, TmpStr);<br \/>if TmpPos &gt; 0 then<br \/>AList.Add(Copy(TmpStr, 1, TmpPos &#8211; 1))<br \/>else<br \/>AList.Add(TmpStr);<br \/>TmpStr := \\\\\\&#8217;\\\\\\&#8217;;<br \/>Delete(TmpStr, 1, TmpPos)<br \/>Result := True;<br \/>FreeMem(ConnStrOut, ConnStrOutMax);<br \/>finally<br \/>if Assigned(HDBC) then<br \/>SQLDisconnect(HDBC);<br \/>SQLFreeHandle(SQL_HANDLE_DBC, HDBC);<br \/>HDBC := nil;<br \/>if Assigned(HENV) then<br \/>SQLFreeHandle(SQL_HANDLE_ENV, HENV);<br \/>HENV := nil;<br \/>\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d\uff0d<br \/>\u6784\u9020\u4e00\u4e2a\u8fde\u63a5\u5b57\u4e32\uff0c\u4ece\u4e00\u4e2aini\u6587\u4ef6\u8bfb\u53d6\u53c2\u6570\u3002<br \/>var AppIni: TIniFile;<br \/>IniFile, TFStr,: string;<br \/>Source, User, Passwd, DBase: string;<br \/>IniFile := ChangeFileExt(Application.ExeName, \\\\\\&#8217;.INI\\\\\\&#8217;);<br \/>if FileExists(IniFile) then<br \/>begin<br \/>AppIni := TIniFile.Create(IniFile);<br \/>Source := AppIni.ReadString(\\\\\\&#8217;DataBaseSet\\\\\\&#8217;, \\\\\\&#8217;Source\\\\\\&#8217;, \\\\\\&#8217;\\\\\\&#8217;);<br \/>User := AppIni.ReadString(\\\\\\&#8217;DataBaseSet\\\\\\&#8217;, \\\\\\&#8217;User\\\\\\&#8217;, \\\\\\&#8217;\\\\\\&#8217;);<br \/>Passwd := AppIni.ReadString(\\\\\\&#8217;DataBaseSet\\\\\\&#8217;, \\\\\\&#8217;Passwd\\\\\\&#8217;, \\\\\\&#8217;\\\\\\&#8217;);<br \/>DBase := AppIni.ReadString(\\\\\\&#8217;DataBaseSet\\\\\\&#8217;, \\\\\\&#8217;DBase\\\\\\&#8217;, \\\\\\&#8217;\\\\\\&#8217;);<br \/>Provider := AppIni.ReadString(\\\\\\&#8217;DataBaseSet\\\\\\&#8217;, \\\\\\&#8217;Provider\\\\\\&#8217;, \\\\\\&#8217;\\\\\\&#8217;);<br \/>\/\/Provider := \\\\\\&#8217;SQLOLEDB.1\\\\\\&#8217;<br \/>if Ado.Passwd = \\\\\\&#8217;\\\\\\&#8217; then TFStr := \\\\\\&#8217;False\\\\\\&#8217; else TFStr := \\\\\\&#8217;True\\\\\\&#8217;;<br \/>ADOCon.Close();<br \/>ADOCon.ConnectionString :=<br \/>\\\\\\&#8217;Locale Identifier=2052\\\\\\&#8217;  <br \/>\\\\\\&#8217;;Use Procedure for Prepare=1\\\\\\&#8217;  <br \/>\\\\\\&#8217;;Auto Translate=True\\\\\\&#8217;  <br \/>\\\\\\&#8217;;Packet Size=4096\\\\\\&#8217;  <br \/>\\\\\\&#8217;;Persist Security Info=\\\\\\&#8217;   TFStr  <br \/>\\\\\\&#8217;;Provider=\\\\\\&#8217;   Ado.Provider  <br \/>\\\\\\&#8217;;Password=\\\\\\&#8217;   Ado.Passwd  <br \/>\\\\\\&#8217;;Workstation ID=\\\\\\&#8217;   Ado.Source  <br \/>\\\\\\&#8217;;Connect Timeout=\\\\\\&#8217;   IntToStr(Ado.Time)  <br \/>\\\\\\&#8217;;User ID=\\\\\\&#8217;   Ado.User  <br \/>\\\\\\&#8217;;Data Source=\\\\\\&#8217;   Ado.Source  <br \/>\\\\\\&#8217;;Initial Catalog=\\\\\\&#8217;   ADO.DBase;<br \/>ADOCon.Open();<br \/>Application.MessageBox(\\\\\\&#8217;\u6570\u636e\u5e93\u8fde\u63a5\u5931\u8d25\uff0c\u8bf7\u901a\u77e5<strong>\u7cfb\u7edf<\/strong>\u7ba1\u7406\u5458\\\\\\&#8217;, \\\\\\&#8217;\u63d0\u793a\\\\\\&#8217;, MB_ICONWARNING);<\/p>\n<p>\u66f4\u591a\u5173\u4e8e\u4e91\u670d\u52a1\u5668\uff0c<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/domain.html\" title=\"\u57df\u540d\u6ce8\u518c\" target=\"_blank\">\u57df\u540d<\/a><\/span>\u6ce8\u518c\uff0c\u865a\u62df\u4e3b\u673a\u7684\u95ee\u9898\uff0c\u8bf7\u8bbf\u95ee<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/\" title=\"\u57a6\u6d3e\u79d1\u6280\u5b98\u7f51\" target=\"_blank\">\u57a6\u6d3e\u79d1\u6280<\/a><\/span>\u5b98\u7f51\uff1a<span class='wp_keywordlink'><a href=\"https:\/\/www.kenpai.com\/\" title=\"\u57a6\u6d3e\u79d1\u6280\u5b98\u7f51\" target=\"_blank\">www.kenpai.com<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Delphi\u4e0b\u68c0\u67e5SQL Server\u670d\u52a1\u5668\u5f53\u524d\u8fd0\u884c\u72b6\u6001\uff01\u8981\u6c42\uff1a\uff24\uff45\uff4c\uff50\uff48\uff49\u4e0b\u968f\u65f6\u76d1\u63a7\uff33\uff31\uff2c \uff33\uff45\uff52\uff56\uff45\uff52\u72b6\u6001\u3002\uff11\u3001\u547d\u4ee4\u63d0\u793a\u7b26\u4e0b\u53ef\u7528\uff1aTELNET &amp;l<\/p>\n","protected":false},"author":2,"featured_media":4351,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3322],"tags":[3883],"class_list":["post-5013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ktougao","tag-delphisql-server"],"_links":{"self":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts\/5013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/comments?post=5013"}],"version-history":[{"count":0,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/posts\/5013\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/media\/4351"}],"wp:attachment":[{"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/media?parent=5013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/categories?post=5013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kenpai.com\/cms\/wp-json\/wp\/v2\/tags?post=5013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}