を使用して、ODBCCP32.DLLから関数SQLGetPrivateProfileStringを使用しますはどのようにデルファイ
Calling SQLDataSourcesそれは、直接レジストリに突っついなしDSNエントリのリストを取得する方法を示してい
。
これまでのところ、Delphiでは問題ありません。ところで、Windows 7でDelphi 2007を使用しています。
MS Accessデータベースを参照するエントリだけを選択したいので、例に数行追加するようにしました。
まず私は、この宣言:RetBuf
で
Result := SQLGetPrivateProfileString('ODBC Data Sources', Buffer1, 'Driver', RetBuf, 100, 'odbc.ini');
:その後、私はどこかの例の途中で次の行を追加
function SQLGetPrivateProfileString; external 'odbccp32.dll' name 'SQLGetPrivateProfileString';
:
function SQLGetPrivateProfileString(
lpszSection, lpszEntry, lpszDefault, lpszRetBuffer: PChar;
cbRetBuffer: Integer;
lpszFilename: PChar): integer; stdcall;
と実装の下にPChar
と宣言されています。
ODBCのレジストリに示すようにドライバ文字列を取得できました。初期化とクリーンアップのためにGetMem
とFreeMem
を呼び出すと、私のプログラムを安定に保つためには、RetBuf
が不可欠でした。
私の質問は:*.MDB
ファイル(または*.ACCDB
ファイル)へのパスを取得するにはどうすればよいですか。私は無駄にこれを試してみました:もちろん
SQLGetPrivateProfileString(nil, Buffer1, 'DBQ', RetBuf, 128, 'odbc.ini')
、私はSQLGetPrivateProfileString()
機能のために良い代替に興味があると思います。
ご協力いただければ幸いです。
P.S.同様の質問を "comp.lang.pascal.delphi.databases"ニュースグループにクロスポストしました。
正確に何が問題なのでしょうか。コードにバグがありますが、コードを表示していないか、デバッグを行っているように見えることさえあります。 –
はDelphiのバージョンを指定します。 –
「PChar」が「PAnsiChar」のDelphi 2007以前では、表示された宣言はOKですが、Delphi 2009+ではOKではありません。ここで 'PChar' PWideCharです。 'SQLGetPrivateProfileString()'はUnicode文字列を受け付けません。Ansi文字列だけを受け入れるので、 'PChar'の代わりに' PAnsiChar'を明示的に使うべきです。 –