自动配置ODBC
代码如下:
program Project1;uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};{$R *.res}
function sqlconfigDatasource(
hwndparent:integer; frequest:longint;
lpszdriverstring:string; lpszattributes:string):
longbool;stdcall;external'odbccp32.dll';
const
odbc_add_dsn=1;
odbc_config_dsn=2;
odbc_remove_dsn=3;
odbc_add_sys_dsn=4;
odbc_config_sys_dsn=5;
odbc_revove_sys_dsn=6;
begin
  Application.Initialize;
  sqlconfigdatasource (0,ODBC_add_sys_DSN,
  'Microsoft Access Driver(*.MDB)',
  'Dsn=passw;DBQ='+extractfilepath(application.exeName)+'password.mdb;'
  +'fil=Ms Access;MaxBufferSize=512;Pagetimeout=5;'
  +'Description=MDdate');
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
----------------------------------------------------------------------------------
为什么会提示undeclared identfire:'extractfilepath';请问这个函数也要自定议吗,在线急等,高手急救,谢谢

解决方案 »

  1.   

    uses SysUtils
    这个单元没引用
      

  2.   

    谢谢高手,太感动了,不过我改过之后,程序调试过了,但提示“无法定位程序输入点sqlconfigdatasource于动态链接库ODBCCP32。dll上。再帮我一次,谢谢
      

  3.   

    我没见到你的函数是怎么写的,看看你的函数有没有什么地方写错的。下面是我的odbc配置的函数:
    function TAdodm.SetRegeditODBC(srvname, dbname, uname, passwd: string): boolean;
    var
    reg:TRegistry;
    begin
            reg:=TRegistry.Create ;
            reg.RootKey:=HKEY_LOCAL_MACHINE;        if reg.OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
            begin //注册一个DSN名称
                reg.WriteString(dbname,'SQL Server');
            end ;
            reg.CloseKey;
            if reg.OpenKey('Software\ODBC\ODBC.INI\ODBC File DSN',True) then
            Begin
                reg.WriteString('DefaultDSNDir','C:\Program Files\Common Files\ODBC\Data Sources\');
            end;
            reg.CloseKey;
            if reg.OpenKey('Software\ODBC\ODBC.INI\'+dbname,True) then
            begin //注册一个DSN名称
                reg.WriteString('Driver','SQLSRV32.dll');
                reg.WriteString('Description','SQL SERVER');
                reg.WriteString('Server',srvname);
                reg.WriteString('Database',dbname);
                reg.WriteString('LastUser',uname);
                reg.WriteString('PassWord',passwd);
            end ;
            reg.CloseKey;
            reg.Free;
    end;
      

  4.   

    还是不懂,永远不懂还是请高手帮帮忙看一下我写的那段吧,只是想让password.mdb能够不需要在ODBC里面配置,直接打开程序文件就可以连接到这个数据库
      

  5.   

    自动注册ODBC的,用的是ACCESS数据库,写在工程文件中,每次一运行就注册,不用担心用户误操作ODBC了  
      AppPath:=ExtractFilePath(Application.ExeName);  //取得应用程序的当前路径
      GetMem(SysDir,255);
      GetSystemDirectory(SysDir,255); //取得WINDOWS系统目录
      Path:=String(SysDir);
      registry1:=tregistry.Create;
      registry1.RootKey:=HKEY_CURRENT_USER;
      if registry1.OpenKey('software\odbc\odbc.ini\odbc data sources',true) then
      begin
        registry1.WriteString('MWKQ1','Microsoft Access Driver (*.mdb)');
        registry1.CloseKey;
      end;
      if registry1.OpenKey('software\odbc\odbc.ini\MWKQ1',true) then
      begin
        registry1.WriteString('DBQ',apppath+'MWKQ1.mdb');
        registry1.WriteString('Driver',path+'\odbcjt32.dll');
        registry1.Writeinteger('DriverId',25);
        registry1.writestring('FIL','MS Access;');
        registry1.WriteInteger('SafeTransactions',0);
        registry1.WriteString('UID','');
        registry1.CloseKey;
      end;
      if registry1.OpenKey('software\odbc\odbc.ini\MWKQ1\Engines\Jet',true) then
      begin
        registry1.writestring('ImplicitCommitSync','Yes');
        registry1.writeinteger('MaxBufferSize',512);
        registry1.WriteInteger('PageTimeout',10);
        registry1.writeinteger('Threads',3);
        registry1.WriteString('UserCommitSync','Yes');
      end;
      registry1.CloseKey ;
      registry1.Free;
      

  6.   

    能不能麻烦把USES后面的也加上去,谢谢
      

  7.   

    要不要这么麻烦呀,在adoconnection的connectionstring里直接连上不就行了吗