我發現這個話題追溯到2004年:如何使用功能SQLGetPrivateProfileString從ODBCCP32.DLL,採用Delphi
它顯示瞭如何檢索DSN條目列表而不直接戳進入註冊表。
到目前爲止,Delphi沒有問題。順便說一下,我在Windows 7上使用Delphi 2007.
現在,我只想選擇引用MS Access數據庫的條目,所以我試着只添加幾行到示例。
首先我聲明這一點:
function SQLGetPrivateProfileString(
lpszSection, lpszEntry, lpszDefault, lpszRetBuffer: PChar;
cbRetBuffer: Integer;
lpszFilename: PChar): integer; stdcall;
而且正在實施:
Result := SQLGetPrivateProfileString('ODBC Data Sources', Buffer1, 'Driver', RetBuf, 100, 'odbc.ini');
與RetBuf
:
function SQLGetPrivateProfileString; external 'odbccp32.dll' name 'SQLGetPrivateProfileString';
然後我在這個例子中的中間位置添加以下行宣佈爲PChar
。
我能夠檢索驅動程序字符串,如ODBC註冊表中所示。調用GetMem
和FreeMem
來初始化和清理RetBuf
似乎對於保持我的程序穩定至關重要。
我的問題是:如何檢索涉及的*.MDB
文件的路徑(或*.ACCDB
文件)。我想這無濟於事:
SQLGetPrivateProfileString(nil, Buffer1, 'DBQ', RetBuf, 128, 'odbc.ini')
當然,我會很感興趣的SQLGetPrivateProfileString()
功能一個很好的選擇。
任何幫助,將不勝感激。
P.S.我在「comp.lang.pascal.delphi.databases」新聞組中發表了一個類似的問題,很抱歉。
究竟是什麼問題。您的代碼中存在一個錯誤,但您沒有顯示任何代碼,甚至沒有進行任何調試。 –
指定Delphi版本。我想知道你是否被Unicode和ansi字符串和字符誤導... –
對於Delphi 2007和更早版本,顯示的聲明是可以的,其中'PChar'是'PAnsiChar',但對於Delphi 2009+不適用,其中'PChar'是'PWideChar'。 'SQLGetPrivateProfileString()'不接受Unicode字符串,只接受Ansi字符串,所以你應該明確地使用'PAnsiChar'而不是'PChar'。 –