小妹我在写一个图书管理系统,但是在借还模块中遇到了问题~请大侠帮忙解决~~~~~~
现在想要实现的就是通过输入书号,点击确定,书名,价格,数量,类别的DBEdit中自动出现相应的字段值,但是现在运行的时候总是出现"标准表达式中数据类型不匹配",代码如下:
procedure TLend.Button1Click(Sender: TObject);
begin
  if trim(Edit1.Text) <> '' then
    begin
      try
        ADOQuery1.Active:=True;
        ADOQuery1.Close;
        ADOQuery1.SQL.Clear;
        ADOQuery1.SQL.Add('select * from 图书信息表 where 书号='''+Edit1.text+'''');
        ADOQuery1.Open;
        ADOquery1.fieldbyname('书名').AsString:=DBEdit1.Text;
        ADOquery1.FieldByName('价格').AsVariant:=DBEdit2.Text;
        ADOquery1.FieldByName('数量').AsVariant:=strtoint(DBEdit3.Text);
        ADOquery1.fieldbyname('类别').AsString:=DBEdit4.Text;
      except
        MessageDlg('数据操作出错',mtError,[mbok],0);
        end;
      end;
end;
小妹使用的是ACCESS数据库,不知道出了什么问题,大家能不能帮忙解决一下~~~~~~~~~~~~~~~
小妹不想要更改数据库的类型,因为改了其他模块就会出问题,所以请大家尽量在代码上修改~谢谢~~~~~~~~~~

解决方案 »

  1.   

            ADOquery1.fieldbyname('书名').AsString:=DBEdit1.Text; 
            ADOquery1.FieldByName('价格').AsVariant:=DBEdit2.Text; 
            ADOquery1.FieldByName('数量').AsVariant:=strtoint(DBEdit3.Text); 
            ADOquery1.fieldbyname('类别').AsString:=DBEdit4.Text; 
           
            写反了吧,显示应该这样 DBEdit.Text:='...';
      

  2.   

    procedure TLend.Button1Click(Sender: TObject);
    begin
      if trim(Edit1.Text)  <> '' then
        begin
          try
            ADOQuery1.Active:=True; //这句话多余
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear;
            ADOQuery1.SQL.Add('select * from 图书信息表 where 书号=:BookNo');
            ADOQuery1.Parameters.ParamByName('BookNo').Value := Edit1.Text;
            ADOQuery1.Open;
            ADOquery1.fieldbyname('书名').AsString:=DBEdit1.Text;
            ADOquery1.FieldByName('价格').AsFloat:= StrToFloat(DBEdit2.Text);
            ADOquery1.FieldByName('数量').AsIntiger:= strtoint(DBEdit3.Text);
            ADOquery1.fieldbyname('类别').AsString:=DBEdit4.Text;
          except
            MessageDlg('数据操作出错',mtError,[mbok],0);
            end;
          end;
    end; 
      

  3.   

    procedure TLend.Button1Click(Sender: TObject); 
    begin 
      if trim(Edit1.Text)  <> '' then 
        begin 
          try 
            ADOQuery1.Active:=True; 
            ADOQuery1.Close; 
            ADOQuery1.SQL.Clear; 
            ADOQuery1.SQL.Add('select * from 图书信息表 where 书号='''+Edit1.text+''''); 
            ADOQuery1.Open; 
            ADOquery1.fieldbyname('书名').AsString:=DBEdit1.Text; 
            ADOquery1.FieldByName('价格').AsVariant:=DBEdit2.Text; 
            ADOquery1.FieldByName('数量').AsVariant:=strtoint(DBEdit3.Text); 
            ADOquery1.fieldbyname('类别').AsString:=DBEdit4.Text;

    你的意思是点击确定后书名,价格,数量,类别的DBEdit中自动出现相应的字段值,你上面所写是错误的,具体做法是分别设置DBEdit1,DBEdit2,DBEdit3,DBEdit4的DataSource属性为ADOQuery1所对应的DATASource1,如果没有添加DataSource控件的话,添加一个,然后再分别设置DBEdit1,DBEdit2,DBEdit3,DBEdit4控件的DataField属性为书名,价格,数量,类别即可 
          except 
            MessageDlg('数据操作出错',mtError,[mbok],0); 
            end; 
          end; 
    end; 
      

  4.   

    补充,把上面红色部分删除,几个DBEdit控件按照上面蓝色部分所说方法设置即可
      

  5.   

    回复pengxuan :我想知道是哪个数据类型不对呢?
      

  6.   

    procedure TLend.Button1Click(Sender: TObject);
    begin
      if trim(Edit1.Text)  <> '' then
        begin
          try
            ADOQuery1.Active:=True;
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear;
            ADOQuery1.SQL.Add('select * from 图书信息表 where 书号='''+Edit1.text+'''');
            ADOQuery1.Open;
            ADOquery1.fieldbyname('书名').AsString:=DBEdit1.Text;
            ADOquery1.FieldByName('价格').AsVariant:=DBEdit2.Text;
            ADOquery1.FieldByName('数量').AsVariant:=strtoint(DBEdit3.Text);
            ADOquery1.fieldbyname('类别').AsString:=DBEdit4.Text;
          except
            MessageDlg('数据操作出错',mtError,[mbok],0);
            end;
          end;
    end; 强,用了Data-Ware控件,又手动赋值。
      

  7.   

    F7 看看,到那一句出错?
    别让我们瞎猜不过,我也要猜一下,应该99.999% 被猜对了!!错误在这里: ...书号='''+Edit1.text+'''';  "书号"为数字类型,Edit1输入为字符
    那么ADOQuery1.Open时就会这样出错: "标准表达式中数据类型不匹配"!