我想在一个Dll里建立一个临时的Access数据库,并对数据库里的表进行动态的建立删除,请问在Dll里面怎么建立数据库呢?

解决方案 »

  1.   

    如果你会在一个普通的程序中建立access数据库的话,把这些建立数据库的代码写到一个函数中,把这个函数移到dll中,在把这个函数导出就可以了。
      

  2.   

    要在dll中建表,还是临时的,有这必要吗?不如用内存映像文件来做(这是比较正统的做法)
      

  3.   

    对啊,我同意 li_zhifu(东北人),但是这个我也不懂啊
      

  4.   

    var
      ADO: TADOConnection;
      ADOQuery1: TADOQuery;procedure TForm1.Button2Click(Sender: TObject);
    var Source,str_sql:string;
        CreateDB:Variant;
    begin
      //判断数据库是否已经存在
      if FileSearch('DB.MDB',ExtractFileDir(Application.ExeName)+'\')<>'' then
      begin
        Application.MessageBox('数据库已经存在!','提示',64);
        exit;
      end;  // 创建数据库
      Source:=' Provider=Microsoft.Jet.OLEDB.4.0; '
             +' Data Source= '
             +ExtractFileDir(Application.ExeName)
             +'\DB.MDB';
      try
        CreateDB:=CreateOleObject('ADOX.Catalog');
        CreateDB.Create(Source);
        Application.MessageBox('数据库创建成功','提示',64);
      except
        Application.MessageBox('数据库创建失败','提示',64);
      end;  //创建数据库中的表
      ADO.ConnectionString:=Source;
      ADO.Connected:=true;  ADOQuery1.Connection:=ADO;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      str_sql:=' create table T ( ID char(10) ) ';
      ADOQuery1.SQL.Add(str_sql);
      try
        ADOQuery1.ExecSQL;
        Application.MessageBox('数据表创建成功','提示',64);
      except
        Application.MessageBox('数据表创建失败','提示',64);
      end;end;procedure TForm1.Button3Click(Sender: TObject);
    var DBName,s_sql:string;
    begin
    //删除数据表
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      s_sql:=' drop table T ';
      ADOQuery1.SQL.Add(s_sql);
      try
        ADOQuery1.ExecSQL;
        Application.MessageBox('数据表删除成功','提示',64);
      except
        Application.MessageBox('数据表删除失败','提示',64);
      end;// 删除数据库
      DBName:=ExtractFileDir(Application.ExeName)+'\DB.MDB';
      try
        DeleteFile(DBName);
        Application.MessageBox('数据库删除成功!','提示',64);
      except
        Application.MessageBox('数据库删除失败!','提示',64);
      end;
    end;
      

  5.   

    我把这段代码移植到Dll里的时候却有错误,编译Dll的时候通过了,调用的时候说这个Dll模块的Ole调用没有初始化,为什么?
      

  6.   

    你要在uese中加上comobj
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Db, ADODB, comobj;