Tilføj / fjern ODBC (DSN) til SQL Server
Hej.Jeg har brug for at kunne tilføje/fjerne ODBC data kilder via et lille program. Jeg har fundet nedenstående eksempel som næsten gør det jeg ønsker.
<--Kode start-->
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
ODBC_ADD_DSN = 1; // Add data source
ODBC_CONFIG_DSN = 2; // Configure (edit) data
ODBC_REMOVE_DSN = 3; // Remove data source
ODBC_ADD_SYS_DSN = 4; // add a system DSN
ODBC_CONFIG_SYS_DSN = 5; // Configure a system DSN
ODBC_REMOVE_SYS_DSN = 6; // remove a system DSN
ODBC_REMOVE_DEFAULT_DSN = 7; // remove the default DSN
SQL_MAX_MESSAGE_LENGTH = 512;
function SQLConfigDataSource(hwndParent: HWND; fRequest: WORD;
const lpszDriver, lpszAttributes: PChar): BOOL; stdcall;
function SQLInstallerError(iError: WORD; pfErrorCode: PDWORD;
lpszErrorMsg: PChar; cbErrorMsgMax: WORD;
pcbErrorMsg: PWORD): Smallint; stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function SQLConfigDataSource; external 'ODBCCP32.DLL';
function SQLInstallerError; external 'ODBCCP32.DLL';
procedure TForm1.Button1Click(Sender: TObject);
var
attr: string;
pfErrorCode: DWORD;
errMsg: PChar;
begin
//Tilføj DSN
attr := 'DSN=TEST'#0 + 'Description=Test database'#0 + 'SERVER=DBSERVER'#0 +
'DATABASE=Test'#0;
If not SQLConfigDataSource(0, ODBC_ADD_DSN, 'SQL Server', PChar(attr)) Then begin
errMsg := AllocMem(SQL_MAX_MESSAGE_LENGTH);
SQLInstallerError(1, @pfErrorCode, errMsg, SQL_MAX_MESSAGE_LENGTH, nil);
MessageBox(0, errMsg, PChar('Create System DSN Error #' + IntToStr(pfErrorCode)), 0);
FreeMem(errMsg);
end
Else
Showmessage('Done');
end;
procedure TForm1.Button2Click(Sender: TObject);
var
attr: string;
pfErrorCode: DWORD;
errMsg: PChar;
begin
//Slet DSN
attr := 'DSN=TEST'#0;
If not SQLConfigDataSource(0, ODBC_REMOVE_DSN, 'SQL Server', PChar(attr)) Then begin
errMsg := AllocMem(SQL_MAX_MESSAGE_LENGTH);
SQLInstallerError(1, @pfErrorCode, errMsg, SQL_MAX_MESSAGE_LENGTH, nil);
MessageBox(0, errMsg, PChar('Delete System DSN Error #' + IntToStr(pfErrorCode)), 0);
FreeMem(errMsg);
end
Else
Showmessage('Done');
end;
end.
<--Kode slut-->
Mit eneste problem er at jeg ikke kan få angivet et brugernavn og password som jeg vil bruge til min ODBC forbindelse. Man skulle tro det bare var at tilføje en UID og PWD parameter, men ud fra Microsoft'es specifikation (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbcsql/od_odbc_c_99yd.asp) så understøttes de parametre netop ikke, og det virker da heller ikke hvis man prøver ;) Bemærk at det er en SQL Server jeg skal lave en ODBC forbindelse til - ved brug af Access kan man nemlig vist godt bruge UID og PWD parametrene.
Jeg har fundet masser af eksempler, men ikke nogen som virker med ovenstående. Det må da kunne lade sig gøre på én eller anden måde (evt. via andre funktioner/metoder) at angive et brugernavn og password!?
På forhånd tak.
