를 사용하여, odbccp32.dll에서 기능 SQLGetPrivateProfileString를 사용 :어떻게 델파이
Calling SQLDataSources이 직접 레지스트리에 파고없이 DSN 항목의 목록을 검색하는 방법을 보여줍니다
.
지금까지 Delphi에는 문제가 없었습니다. 안녕하세요, 저는 Windows 7에서 Delphi 2007을 사용하고 있습니다.
이제 MS Access 데이터베이스를 참조하는 항목 만 선택하고 싶습니다. 예제에 몇 줄을 추가하려고했습니다.
우선 나는이 선언 :
Result := SQLGetPrivateProfileString('ODBC Data Sources', Buffer1, 'Driver', RetBuf, 100, 'odbc.ini');
RetBuf
을 가진 :
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. "comp.lang.pascal.delphi.databases"뉴스 그룹에 비슷한 질문을 교차 게시했습니다.
정확히 무엇이 문제입니까? 코드에 버그가 있지만 코드를 표시하지 않았거나 디버깅을하는 것처럼 보였습니다. –
은 Delphi 버전을 지정합니다. 나는 유니 코드 대 ansi 문자열과 chars에 대해 오도하고 있는지 궁금합니다. –
델파이 2007 이전 버전에서는'PChar'가'PAnsiChar '인데도 선언문은 OK이지만 델파이 2009+에서는'PChar' PWideChar입니다. 'SQLGetPrivateProfileString()'은 유니 코드 문자열을 허용하지 않고 Ansi 문자열 만 허용하므로 일반적으로'PChar' 대신에'PAnsiChar'를 명시 적으로 사용해야합니다. –