小M我的程序又出问题了,我在窗体中添加了TADOQuery1、TADOTable1、TDataSource1、TDataSource2,TADOQuery1连接DataSource1,TADOTable1连接DataSource2,其他TDB控件为了根据书号改变值连接的是DataSource2,可是我在运行修改按钮的时候却出现了以下的错误信息: 
Project main.exe raised exception class EVariantInvalidOpError with message 'Invalid variant operation'. 
Process stopped. Use Step or Run to continue. 
不知道怎么回事,各位大侠能帮帮忙吗?? 
以下是我的按钮事件代码: 
procedure TBookAdd.Button3Click(Sender: TObject); 
begin 
ADOTable1.Edit ; 
ADOTable1['书号'].AsString :=ComboBox1.Text; 
ADOTable1['书名'].AsString :=DBName.Text; 
ADOTable1['作者'].AsVariant:=DBAuthor.Text; 
ADOTable1['出版社'].AsVariant:=DBPress.Text; 
ADOTable1['书版日期'].AsString :=DBOutDate.Text; 
ADOTable1['价格'].AsVariant:=DBCost.Text; 
ADOTable1['备注'].AsVariant:=DBMemo.Text; 
ADOTable1['数量'].AsVariant:=DBEdit1.Text; 
ADOTable1['类别'].AsVariant:=DBEdit2.Text; 
ADOTable1['位置'].AsVariant:=DBEdit3.Text; 
ADOTable1.Post; 
showmessage('保存成功!') 
end; 请帮忙改错,谢谢~~

解决方案 »

  1.   

    ADOTable1['作者'].AsString:=DBAuthor.Text; //文本类型的
     
    ADOTable1['数量'].AsFloat:=StrToFloat(DBEdit1.Text);  //数字类型的其他的都照改
      

  2.   

    有2个问题
    第一:
    如:
    ADOTable1['价格'].AsVariant:=DBEdit3.Text;  如果你的价格是数值型或者货币型,建议你调整一下后面参数的类型 不应该是字符型第二:ADOTable1['位置'].AsVariant:=DBEdit3.Text;   一般情况下你按照这个写法模式来
    (1)ADOTable1[index].value  index是字段位置序号
    (2)ADOTable1("价格").asstring:=DBEdit3.Text;       
      

  3.   

    回复stherix:我按照你说的改了强制转换类型,可是按钮事件任然没有用,虽然错误提示没有出现了,但是还是实现不了修改的功能,请问是怎么回事呢????????????
    回复winxkm :我不明白你所说的对我的程序来说很重要吗?还是您觉得我只是写程序的时候不够规范呢???可是我真的很希望各位能够帮我解决致命性的问题,拜托了~~~~~~~~
    其实我觉得会不会是我的数据库连接的问题呢?因为我同时用了ADQuery和ADOTable,两个DataSource,我是第一次同时使用这两个ADO控件,其中的属性设置可能有问题,请各位大侠可以指教一下吗?????????小妹我不胜感激~~~~~~~~~
      

  4.   

    adoquery adotable连的都是哪个表?同一个表?还是?
      

  5.   

    一个表的话
    一个dataset 一个datasource就可以了
    给个邮箱我给你个例子程序
      

  6.   

    procedure   TBookAdd.Button3Click(Sender:   TObject);   
    begin   
    ADOTable1.Edit   ;   
    ADOTable1.FieldByName('书号').AsString   :=ComboBox1.Text;   
    ADOTable1.FieldByName('书名').AsString   :=DBName.Text;   
    ADOTable1.FieldByName('作者')AsVariant:=DBAuthor.Text;   
    ADOTable1.FieldByName('出版社').AsVariant:=DBPress.Text;   
    ADOTable1.FieldByName('书版日期').AsString:=DBOutDate.Text;   
    ADOTable1.FieldByName('价格').AsVariant:=strtoint(DBCost.Text);   
    ADOTable1.FieldByName('备注').AsVariant:=DBMemo.Text;   
    ADOTable1.FieldByName('数量').AsVariant:=strtoint(DBEdit1.Text);   
    ADOTable1.FieldByName('类别').AsVariant:=DBEdit2.Text;   
    ADOTable1.FieldByName('位置').AsVariant:=DBEdit3.Text;   
    ADOTable1.Post;   
    showmessage('保存成功!')   
    end;  看看行不?