access数据库在运行时会生成一个 .ldb 日志文件 你把数据库刻到光盘上运行当然不行了
建议你在运行时在硬盘上 建一个 temp 将数据库拷进去 再重新指定一下数据库位置就可以了

解决方案 »

  1.   

    procedure conn;
    var
      s,Apath:string;
    begin
      with form2 do
      begin
        s:=ParamStr(0);
        Apath:=ExtractFilePath(s);
        ADOConnection1.Connected:=false;
        ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
              'Password="";'+
              'User ID=Admin;'+
              'Data Source='+Apath+'\content\db1.mdb;Mode=Share Deny None;Extended Properties="";'+
              'Locale Identifier=2052;Jet OLEDB:System database="";'+
              'Jet OLEDB:Registry Path="";'+
              'Jet OLEDB:Database Password="";'+
              'Jet OLEDB:Engine Type=4;'+
              'Jet OLEDB:Database Locking Mode=0;'+
              'Jet OLEDB:Global Partial Bulk Ops=2;'+
              'Jet OLEDB:Global Bulk Transactions=1;'+
              'Jet OLEDB:New Database Password="";'+
              'Jet OLEDB:Create System Database=False;'+
              'Jet OLEDB:Encrypt Database=False;'+
              'Jet OLEDB:Don''t Copy Locale on Compact=False;'+
              'Jet OLEDB:Compact Without Replica Repair=False;'+
              'Jet OLEDB:SFP=False';
                      //以上为数据库的动态连接的连接串
        ADOConnection1.Connected:=true;
        ADODataset1.Active:=false;
        ADODataset1.CommandText:='select * from data';
        ADODataset1.Active:=true;
      end;
    end;
    是否在这个时候建立??
      

  2.   

    光盘不能写,建议你将程序考在硬盘上,保证不会出错!
    access数据库在运行时会生成一个 .ldb 日志文件 
      

  3.   

    如果你的dsn 没有问题 
    只要把 ADOCONNECTION.DEFaultDatabase
     的值指定为你数据库拷贝到的地方就可以了
    例如 c:\temp\content\db1.mdb
      ADOCONNECTION.DEFaultDatabase:='c:\temp\content\db1.mdb'
    其实 Connectionstring中如果没有特殊要求 并不需要写的那么麻烦 至少你要把包含文件路径的内容去掉 不会有什么影响
    我通常都是这么做的
      

  4.   

    在formcreate时创建拷贝吗?
    给点代码,老板叫我快快快,我没办法思考了.
      

  5.   


    Connection.Connected:=False;
    Connection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=RGate';//RGate  是ODBC DSN名称 也可以用你的方法
    Connecction.DefaultDatabase:=GetCurrentDir+'\Data\db1.mdb';
    Connection.Connected:=True;
      

  6.   

    只要在你的connection没打开前就可以
    我使用的是  ODBC下的 DSN 一来通过注册表就可以灵活改动 二来也很简单
      

  7.   

    .ldb是系统自动写的临时文件.用后就没了
      

  8.   

    还是没有拷贝到硬盘啊.
    可以用copyfile()吗?
      

  9.   

    if createdirectry(c:\temp) then copyfile('光盘的路径+\db1.mdb','c:\temp\db1.mdb');
    Connection.Connected:=False;
    Connection.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=RGate';//RGate  是ODBC DSN名称 也可以用你的方法
    Connecction.DefaultDatabase:='c:\temp\db1.mdb';
    Connection.Connected:=True; 
      

  10.   

    用API函数:COPYFILE就可以解决文件复制的问题。
    BOOL CopyFile(
        LPCTSTR lpExistingFileName, // pointer to name of an existing file 
        LPCTSTR lpNewFileName, // pointer to filename to copy to 
        BOOL bFailIfExists  // flag for operation if file exists 
       );
      

  11.   

    对了 我的copyfile 少了一个参数 copyfile('光盘的路径+\db1.mdb','c:\temp\db1.mdb',true);
      

  12.   

        s:=ParamStr(0);
        Apath:=ExtractFilePath(s);
        if createdirectry(c:\temp) then copyfile('apath+\content\pubdb.mdb','c:\temp\pubdb.mdb');
        ADOConnection1.Connected:=false;
        ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
              'Password="";'+
              'User ID=Admin;'+
              'Data Source='c:\temp\pubdb.mdb;Mode=Share Deny None;Extended Properties="";'+
              'Locale Identifier=2052;Jet OLEDB:System database="";'
    ADOConnection1.Connected:=true;
        ADODataset1.Active:=false;
        ADODataset1.CommandText:='select * from pubdata';
        ADODataset1.Active:=true;
      end;
    这样可以吗?
      

  13.   

    createdirectry('c:\temp') 
    应该没问题
      

  14.   

    想一想改变一下,用paradox driver .是否会更好!找到了告诉我!
      

  15.   

    createdirectry()
    没有这个函数啊.怎么啦.
      

  16.   

    在uses 中加入 filectrl函数名称是 createdir 抱歉抱歉
      

  17.   

    不行,提示错误:找不到C:\TEMP\DB1.MDB
      

  18.   

    可能目录已经建立了 加个判断吧
     if directryexist('c:\temp') then copyfile...
      else begin
            createdir('c:\temp') 
            copyfile....
       
           end;
        
      

  19.   

    不是的.我已经改了.
    copyfile('apath+\content\db1.mdb','c:\temp\pubdb.mdb',true)
    我建立了一个.测试用的.然后拷贝,估计是另外一个form建立时也要用到mdb.
    我首先在form1建立时,执行拷贝命令.
    在form2建立时,执行调用命令
    会不会是这个原因?
      

  20.   

    肯定的
    .mdb文件在光盘中是只读的
    去掉它的属性就可以
    光盘是只读的,不能写入临时文件
    所以有可能错误
      

  21.   

    倒了.
    copy('extractfilepath(paramstr(0))+content\db1.mdb','c:\temp',true)
    为什么不能执行??