Hola:
Aquí encontré un ejemplo que llama a una función específica del API del ODBC.
Código Delphi
[-]
function SQLGetInfo(hDb: Longint; InfoType: Word; Info: pointer; Len: Integer;
var RetLen: Integer): Integer; far; external 'ODBC' index 45;
Aquí está accediendo a una DLL, especifícamente a una del ODBC..
Aquí está todo el código completo..
Código Delphi
[-]
{$A+,B-,D+,F-,G+,I+,K+,L+,N+,P+,Q-,R-,S+,T-,V+,W-,X+,Y+}
{$M 20480,4096}
unit main;
interface
uses
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DB, DBTables, Grids, DBGrids, DbiTypes, DbiErrs, DbiProcs;
type
TMainForm = class(TForm)
ODBCDb: TDatabase;
GetODBCInfo: TButton;
OutMemo: TMemo;
procedure FormCreate(Sender: TObject);
procedure GetODBCInfoClick(Sender: TObject);
private
public
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
const
MaxLen = 100;
SQL_DATABASE_NAME = 16;
SQL_DRIVER_NAME = 6;
SQL_DATA_SOURCE_NAME = 2;
SQL_DRIVER_VER = 7;
SQL_USER_NAME = 47;
SQL_MAX_TABLE_NAME_LEN = 35;
SQL_SERVER_NAME = 13;
function SQLGetInfo(hDb: Longint; InfoType: Word; Info: pointer; Len: Integer;
var RetLen: Integer): Integer; far; external 'ODBC' index 45;
procedure TMainForm.FormCreate(Sender: TObject);
begin
OutMemo.Lines.Clear;
ODBCDb.Open;
end;
procedure TMainForm.GetODBCInfoClick(Sender: TObject);
var
DBInfo: array[0..MaxLen] of char;
NumRead: Integer;
Len: Word;
VersionInfo: Integer;
hNatDb: longint;
begin
OutMemo.Lines.Clear;
Check(DbiGetProp(hDbiObj(ODBCDb.Handle), dbNATIVEHNDL, @hNatDb,
sizeof(hNatDb), Len));
OutMemo.Lines.Add('Native Database Handle: ' + IntToStr(hNatDb));
SQLGetInfo(hNatDb, SQL_DATABASE_NAME, @DBInfo, MaxLen, NumRead);
OutMemo.Lines.Add('Database Name: ' + StrPas(DBInfo));
SQLGetInfo(hNatDb, SQL_DRIVER_NAME, @DBInfo, MaxLen, NumRead);
OutMemo.Lines.Add('Driver Name: ' + StrPas(DBInfo));
SQLGetInfo(hNatDb, SQL_DATA_SOURCE_NAME, @DBInfo, MaxLen, NumRead);
OutMemo.Lines.Add('Data Source Name: ' + StrPas(DBInfo));
SQLGetInfo(hNatDb, SQL_DRIVER_VER, @VersionInfo, sizeof(VersionInfo), NumRead);
OutMemo.Lines.Add('Driver Version: ' + IntToStr(VersionInfo));
SQLGetInfo(hNatDb, SQL_USER_NAME, @DBInfo, MaxLen, NumRead);
OutMemo.Lines.Add('User Name: ' + StrPas(DBInfo));
SQLGetInfo(hNatDb, SQL_MAX_TABLE_NAME_LEN, @VersionInfo, sizeof(VersionInfo), NumRead);
OutMemo.Lines.Add('Maximum Table Name Length: ' + IntToStr(VersionInfo));
SQLGetInfo(hNatDb, SQL_SERVER_NAME, @DBInfo, MaxLen, NumRead);
OutMemo.Lines.Add('Server Name: ' + StrPas(DBInfo));
end;
end.
Espero que te sirva o sino a seguir averiguando...
Roman tiene razón, es una regla del foro no repetir hilos con el mismo tema, despues se hace más difícil buscar en el foro, si algún día alguien tiene un problema similar..
Saludos.