我想根据用户所选数据类型从数据项目表中提取对应的数据编号插入到数据记录表中的数据编号段,可提示不能插入数据集的错误,若改用循环怎么做呢?
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;

解决方案 »

  1.   

    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;
      

  2.   

    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;
      

  3.   

    你的循环那段代码也有点问题,你试一下这样看行不行:
         //取数据信息
         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;
      

  4.   

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