ADOQueryzy_xy_hj是ADOQuery控件,字符串:select * from zy_xy_hj
1、初始化代码:
procedure Tfrm_zybryp_hj.FormActivate(Sender: TObject);
begin
 //按最大处方号打开划价表
   ADOQueryzy_xy_hj.close;
   ADOQueryzy_xy_hj.sql.Clear;
   ADOQueryzy_xy_hj.sql.add('select * from zy_xy_hj');
   ADOQueryzy_xy_hj.sql.add('where  xzflag not like '''+g_ypstyle+'%''');
   ADOQueryzy_xy_hj.sql.add('  and  depa='''+depa_flag+'''');
   ADOQueryzy_xy_hj.sql.add('  and  fycode=:a1');
   ADOQueryzy_xy_hj.sql.add('order by fydate');
   ADOQueryzy_xy_hj.Parameters.ParamValues['a1']:=editfycode.Text;
   ADOQueryzy_xy_hj.open;
end;2、保存数据代码如下:
if application.MessageBox('真的要将费用帐进行确认存储吗?','系统操作提示:', mb_okcancel+mb_iconquestion)=1 then
   begin
         //数据插入到住院病人药品划价表zy_xy_hj
      ADOQueryzy_xy_hj.open;
      ADOQueryzy_xy_hj.append;
      ADOQueryzy_xy_hj.edit;
      ADOQueryzy_xy_hj.fieldbyname('code').asstring:=zycode;   //住院号
      ADOQueryzy_xy_hj.FieldByName('fycode').asstring:=editfycode.text;    //处方号
      ADOQueryzy_xy_hj.fieldbyname('fydoctor').asstring:=edt_doctor.text;//开单医生
     ............................
      ADOQueryzy_xy_hj.post;
      ADOQueryzy_xy_hj.UpdateBatch;
          
      label17.caption:='药品种数:'+inttostr(ADOQueryzy_xy_hj.RecordCount);
   end;
运行保存时出错:
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
跟踪了一下:
发现问题出在 ADOQueryzy_xy_hj.append;这句,怎么回事?谢谢!!

解决方案 »

  1.   

    procedure Tfrm_zybryp_hj.FormActivate(Sender: TObject);
    begin
     //按最大处方号打开划价表
       ADOQueryzy_xy_hj.close;
       ADOQueryzy_xy_hj.sql.Clear;
       ADOQueryzy_xy_hj.sql.add('select * from zy_xy_hj');
       ADOQueryzy_xy_hj.sql.add('where  xzflag not like '''+g_ypstyle+'%''');
       ADOQueryzy_xy_hj.sql.add('  and  depa='''+depa_flag+'''');
       ADOQueryzy_xy_hj.sql.add('  and  fycode=:a1');
       ADOQueryzy_xy_hj.sql.add('order by fydate');
       ADOQueryzy_xy_hj.Parameters.ParamValues['a1']:=editfycode.Text;
       ADOQueryzy_xy_hj.open;
    end;
    ADOQueryzy_xy_hj.sql.add('where  xzflag not like '''+g_ypstyle+'%''');
    在这句的where前面加个空格
    不然的你的sql语句是错误的
    就是这样
    ADOQueryzy_xy_hj.sql.add(' where  xzflag not like '''+g_ypstyle+'%''');开来你delphi还不是很习惯,光标高亮显示在append那行上并不表示是那一行出错
    一般都是表示上一句出错
    高亮显示的行是正准备执行的语句,但是还未执行
      

  2.   

    还有  ADOQueryzy_xy_hj.sql.add('order by fydate');
    前面也要加空格
      

  3.   

    我试了一下,还是一样的问题啊?是这样的:虽然有错误,但数据还是添加进去了,而且我去掉append这行就没有提示,到底是什么原因导至的?
      

  4.   

    if application.MessageBox('真的要将费用帐进行确认存储吗?','系统操作提示:', mb_okcancel+mb_iconquestion)=1 then
       begin
             //数据插入到住院病人药品划价表zy_xy_hj
          ADOQueryzy_xy_hj.open; //如果数据集已经打开了,这句又open就会出错。
          ADOQueryzy_xy_hj.append;
          ADOQueryzy_xy_hj.edit;  //有append就不需要edit。
          ADOQueryzy_xy_hj.fieldbyname('code').asstring:=zycode;   //住院号
          ADOQueryzy_xy_hj.FieldByName('fycode').asstring:=editfycode.text;    //处方号
          ADOQueryzy_xy_hj.fieldbyname('fydoctor').asstring:=edt_doctor.text;//开单医生
         ............................
          ADOQueryzy_xy_hj.post;
          ADOQueryzy_xy_hj.UpdateBatch;  //有post就不需要UpdateBatch。        
          label17.caption:='药品种数:'+inttostr(ADOQueryzy_xy_hj.RecordCount);
       end;