///////@创建数据库文件,这是文件备份的代码
cfile:=edit1.text+'.gh';
SFile := ExtractFileDir(Application.ExeName)+'\database\客户管理.mdb' ;
CreateAccess:=CreateOleObject('ADOX.Catalog');
CreateAccess.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+cfile);
adoquery2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+cfile;
adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+sfile;
……
////////@恢复record,这是从备份的文件中恢复记录的前部分代码
sfile:=edit1.text;
cFile := ExtractFileDir(Application.ExeName)+'\database\客户管理.mdb' ;
adoquery6.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+cfile;
adoquery5.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source='+sfile;
with adoquery5 do
begin
SQL.Clear;
SQL.Add('select * from record');//在这里出现验证失败
Open;
end;
验证失败是怎么回事啊?将paramCheck设为false时错误出现在open处。

解决方案 »

  1.   

    adoquery4.SQL.Clear;
    adoquery4.SQL.Add('insert into record value(:需求编号,:记录编号,:登记日期,:购买品牌,:材料名称,:材料类别,:制造代号,:材料数量,:材料价格,:材料存在)');
    with adoquery4.Parameters do
    begin
    ParamByName('需求编号').Value:=adoquery3.fieldbyname('需求编号').AsInteger;
    ParamByName('记录编号').Value:=adoquery3.fieldbyname('记录编号').AsString;
    ParamByName('登记日期').Value:=adoquery3.fieldbyname('登记日期').AsString;
    ParamByName('购买品牌').Value:=adoquery3.fieldbyname('购买品牌').AsString;
    ParamByName('材料名称').Value:=adoquery3.fieldbyname('材料名称').AsString;
    ParamByName('材料类别').Value:=adoquery3.fieldbyname('材料类别').AsString;
    ParamByName('制造代号').Value:=adoquery3.fieldbyname('制造代号').AsString;
    ParamByName('材料数量').Value:=adoquery3.fieldbyname('材料数量').AsString;
    ParamByName('材料价格').Value:=adoquery3.fieldbyname('材料价格').AsString;
    ParamByName('材料存在').Value:=adoquery3.fieldbyname('材料存在').AsString;
    end;
    adoquery4.ExecSQL;
    这个sql错在什么地方啊?
      

  2.   

    1.参数可以用中文吗?
    2.既然你是ADO那么这样写有错误
      ParamByName('需求编号').Value:=adoquery3.fieldbyname('需求编号').AsInteger;
      应该是
      adoquery3.fieldbyname('需求编号').value;
    3.你数据库的结构中
        登记日期----应该是日期型号的吧
        材料数量----应该是数值型号的吧
        材料价格----应该是数值型号的吧
      

  3.   

    出现验证失败,一般都是密碼或用戶不對吧
    如:用ole 連接access
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=J:\Kandychen\ExcelBom\bomforrd\db1.mdb;Persist Security Info=False
    在設定時用設定'blank password' ,在test 一下
    最好用query連接adoconnnection, 在用adoconnnection連結db比較好
      

  4.   

    问题很怪,我将原来的页面从写一次,用的是相同的代码,然后就没有问题了——
    to 于伟刚大哥:
    参数可以用中文。
    ParamByName('材料存在').Value这个地方是笔误——是我写错了,犯这种错误不好意思!!!
    to 多少爱可以重来
    你是对的,但是我的问题不是密码的原因,我的数据库没有设密码,因为只是用来做备份。
    用adoconnection和直接用adoquery的区别只是在于当有多个query/table连接一个数据库时,直接用多个query要建立多个连接,用adoconnection却只建立一个连接从而提高性能。我里只有一个连接所以直接用query反而好一点。