一个程序出错,请高手帮帮忙!

一个程序出错,请高手帮帮忙! Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiDB/html/delphi_20061218082820248.html
我想根据用户所选数据类型从数据项目表中提取对应的数据编号插入到数据记录表中的数据编号段,可提示不能插入数据集的错误,若改用循环怎么做呢?  
  procedure   Tsjxmzlr.cb_lxChange(Sender:   TObject);  
  begin  
          with   ADOQ_sjz   do  
            begin  
            ADOQ_sjz.Close;  
            ADOQ_sjz.SQL.Clear;  
            ADOQ_sjz.SQL.Add('insert   into   ysjlrb(phid)   select   phid   from   hymcb   where   lxmc='''+cb_lx.Text+'''');  
            ADOQ_sjz.Open;  
            end;  
  end;  
  下面的一个循环又出现这样的错误?是不是我的机子的问题呢?  
  procedure   Tsjxmzlr.CBB_bdChange(Sender:   TObject);  
  begin  
            ADOQ_sjd.Close;  
            ADOQ_sjd.SQL.Clear;  
            ADOQ_sjd.SQL.Add('select   sjd   from   sjb   where   bd='''+CBB_bd.Text+'''');  
            ADOQ_sjd.Open;  
            CB_sjd.Clear;  
            while   not   ADOQ_sjd.Eof   do  
                  begin  
                        CB_sjd.Items.Add(ADOQ_sjd.此处不出现FieldByname,为什么?我想用FieldByname来获取字段值,还有其它办法吗?  
                        ADOQ_sjd.Next;  
                  end;  
  end;

如果循环的话,我还是建议你使用存储过程来写,此外数据库中是不是有完整性约束呢??比如哪些字段必须不为空,哪些不能重复等等

procedure   Tsjxmzlr.cb_lxChange(Sender:   TObject);  
  begin  
          with   ADOQ_sjz   do  
            begin  
            ADOQ_sjz.Close;  
            ADOQ_sjz.SQL.Clear;  
            ADOQ_sjz.SQL.Add('insert   into   ysjlrb(phid)   select   phid   from   hymcb   where   lxmc='''+cb_lx.Text+'''');  
            ADOQ_sjz.ExecSQL;  
            end;  
  end;  
 

procedure   Tsjxmzlr.cb_lxChange(Sender:   TObject);  
  begin  
          with   ADOQ_sjz   do  
            begin  
            ADOQ_sjz.Close;  
            ADOQ_sjz.SQL.text   :=   'insert   into   ysjlrb(phid)   select   phid   from   hymcb   where   lxmc=:lxmc';  
            ADOQ_sjz.Parameters.ParamByName('lxmc').Value   :=   trim(cb_lx.Text);    
            //最好按上面的这样绑定变量的形式效率高一些   
            //ADOQ_sjz.Open;   此处错误  
            ADOQ_sjz.ExecSql;  
            end;  
  end;  
 

你的循环那段代码也有点问题,你试一下这样看行不行:  
            //取数据信息  
            ADOQ_sjd.Close;  
            ADOQ_sjd.SQL.text   :=   'select   sjd   from   sjb   where   bd=:bd';  
            ADOQ_sjz.Parameters.ParamByName('bd').Value   :=   trim(CBB_bd.Text);  
            ADOQ_sjd.Open;  
            //开始循环  
            while   not   ADOQ_sjd.Eof   do  
            begin  
                CB_sjd.Close;  
                CB_sjd.text   :=   '   insert   into     ysjlrb(phid)   values   (:phid)';  
                CB_sjd.Parameters.ParamByName('phid').Value   :=   ADOQ_sjd.FieldByName('sjd').AsString;  
                CB_sjd.ExecSql;  
                ADOQ_sjd.Next;  
            end;  
 

不好意思上面有点错误:   CB_sjd.text       改成   CB_sjd.sql.text

谢谢大家!我都给分!!

转载于:https://www.cnblogs.com/delphi2007/archive/2009/02/19/1394150.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值