如何在程序中获取本机的全部已有的数据驱动程序信息(100分)

  • 主题发起人 主题发起人 first
  • 开始时间 开始时间
F

first

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在程序中获取本机的全部已有的数据驱动程序信息
 
是bde的还是odbc
bde可用session.getdriversname
 
to Zm30:
是odbc的。
 
ODBC的话看看MSDN;
 
等于没说 to Tense
 
得用ODBCAPI,去http://xuhao23.myetang.com/api/里有一个msodbCxx.zip 里面的ODBCINST.pas 应该对你有用
关于HELP,好象98就有,在硬盘上找找ODBCINST。hlp

first:
你最好还是准备一个MSDN.


;)
 
还不如直接把注册表
HKEY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI/ODBC Drivers
都列举出来就行了.
 
to menxin:
function SQLGetInstalledDrivers(lpszBuf: LPSTR; cbBufMax: WORD;
pcbBufOut: PWORD): BOOL; cdecl;
lpszBuf是个Output类型的参数,相对印delphi用什么类型。
 
呵呵,老兄,这个文件是.PAS能是什么类型呢?本来就是DELPHI的类型.实际是PCHAR,
 
to menxin:
var
Form1: TForm1;
function SQLGetInstalledDrivers(lpszBuf: LPSTR; cbBufMax: WORD;
pcbBufOut: PWORD): BOOL; external 'ODBCCP32.dll'
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Buff:PCHAR;
BuffOut:PWORD;
begin
SQLGetInstalledDrivers(Buff,255,BuffOut);
end;
为什么出现读地址错误
 
Buff没有分配内存.试试看
GetMem(Buff,255);
SQLGetInstalledDrivers(Buff,255,BuffOut);
FreeMem(Buff)
 
to bluerain:
还是不行
 
你的函数定义少了一个stdcall,应该如下:

function SQLGetInstalledDrivers(lpszBuf: LPSTR; cbBufMax: WORD;
pcbBufOut: PWORD): BOOL; stdcall; external 'ODBCCP32.dll'

然后用就行了,试验通过了.
procedure TForm1.Button1Click(Sender: TObject);
var
Buff: array[0..2048] of char;
BuffOut: Word;
i: integer;
s: string;
begin
if SQLGetInstalledDrivers(Buff, 2048, @BuffOut) then
begin
s := '';
for i := 0 to Buffout do
begin
if Buff <> #0 then
s := s + Buff
else
begin
listbox1.Items.Add(s);
s := '';
end;
end;
end;
end;
 
接受答案了.
 
后退
顶部