如上

解决方案 »

  1.   

    转:(*
     This example shows one way to load the ODBC
     Administrator's DLL (ODBCCP32.DLL) to create
     an Access MDB file and ODBC DSN pointing at
     it.  Note that it assumes current directory
     for both the DLL and the MDB, but the DLL
     will be found if in the WinSys directory which
     is where it normally is anyway. Similar operation applies to most driver types,
     with some modifications. eg: Access requires
     the MDB file to exist so you can hook the DSN
     to it. Note also that the "CREATE_DB" call is an Access
     special (MS Jet Engine) and has other variants
     like COMPACT_DB and REPAIR_DB. For a full list
     see either the Jet Engine Programmers Guide or
     the MSDN and search for "CREATE_DB". This was originally written in MSVC6 and was
     ported to Delphi 5. Full documentation can be found in the MSDN
     at http://msdn.microsoft.com/.
    *)const
     ODBC_ADD_DSN        = 1;    // Add data source
     ODBC_CONFIG_DSN     = 2;    // Configure (edit) data source
     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 DSNtype
     TSQLConfigDataSource = function( hwndParent: HWND;
                                      fRequest: WORD;
                                      lpszDriver: LPCSTR;
                                      lpszAttributes: LPCSTR ) : BOOL; stdcall;procedure Form1.FormCreate(Sender: TObject);
    var
     pFn: TSQLConfigDataSource;
     hLib: LongWord;
     strDriver: string;
     strHome: string;
     strAttr: string;
     strFile: string;
     fResult: BOOL;
     ModName: array[0..MAX_PATH] of Char;
     srInfo : TSearchRec;
     hRegLib: HMODULE;
    begin
     Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName) );
     strHome := ModName;
     while ( strHome[length(strHome)] <> '\' ) do
       Delete( strHome, length(strHome), 1 );
     strFile := strHome + 'TestData.MDB';   // Test Access Rights (Axes =
    Access)
     hLib := LoadLibrary( 'ODBCCP32' );    // load from default path
     if( hLib <> NULL ) then
     begin
       @pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
       if( @pFn <> nil ) then
       begin
         // force (re-)create DSN
         strDriver := 'Microsoft Access Driver (*.mdb)';
         strAttr := Format( 'DSN=TestDSN'+#0+
                            'DBQ=%s'+#0+
                            'Exclusive=1'+#0+
                            'Description=Test Data'+#0+#0,
                            [strFile] );
         fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
         if( fResult = false ) then ShowMessage( 'Create DSN (Datasource)
    failed!' );     // test/create MDB file associated with DSN
         if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
         begin
           strDriver := 'Microsoft Access Driver (*.mdb)';
           strAttr := Format( 'DSN=TestDSN'+#0+
                              'DBQ=%s'+#0+
                              'Exclusive=1'+#0+
                              'Description=Test Data'+#0+
                              'CREATE_DB="%s"'#0+#0,
                              [strFile,strFile] );
           fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
           if( fResult = false ) then ShowMessage( 'Create MDB (Database file)
    failed!' );
         end;
         FindClose( srInfo );     end;   (* MASSIVE SNIP *)   FreeLibrary( hLib );
     end
     else
     begin
       ShowMessage( 'Unable to load ODBCCP32.DLL' );
     end;
     StatusClockTimer.Enabled := true;
    end;
      

  2.   

    uses ComObjvar
      CreateAccess:OleVariant;
    begin
      CreateAccess:=CreateOleObject('ADOX.Catalog');
      CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Aceco.mdb');
      CreateAccess := Unassigned; 
    end;