请问如何将adoquery查询出来的结果写到数据库中?我有一个基本信息表(员工编号,部门名。。),一个部门表(部门号,部门名),一个工资表(日期,员工工号。),我想根据选择不同的部门生产新的数据,所以就要利用部门表的部门来查询出基本信息表中的一组员工编号,再将这些员工编号以及当前日期写进工资表中去,也就是先查询出编号再插入到数据库中,且在另外一个窗体中的dbgrid中显示出来,请问如何实现?我写的代码总是说insert语法出错????

解决方案 »

  1.   

    用INSERT INTO TABLE SELECT 
    把你的语句贴出来看看
      

  2.   

    数据库是甚末?不同的数据库格式有所不同
    一下代码可以参考一下,应该足够了var
      cur_str :string;
      i,j:integer;
    begin
      try
        cur_str := 'SELECT * from '+''''+edtLTableName.Text +'''';
        Query1.close;
        query1.DatabaseName:='MyAlias';
        Query1.SQL.clear;
        Query1.SQL.Add(cur_str);
        Query1.ExecSQL ;
        if not Query1.Active then Query1.Active :=true;
        Query1.First ;
        if query1.RecordCount>0 then
        begin
          if edtltablename.Text =edtpretable.Text then j:=strtoint(edtPreNo.text)
          else j:=0;      for i:=j to Query1.RecordCount do
            begin
              strtype:=Query1.FieldValues['type'];
              strcaption:=Query1.FieldValues['protype'];
              intfurms:=Query1.FieldValues['furms'];
              intfirms:=Query1.FieldValues['firms'];
              intfpf:=Query1.FieldValues['fpf'];
              intfp:=Query1.FieldValues['fp'];
              intfre:=Query1.FieldValues['powfreq'];
              intfulrms:=Query1.FieldValues['fulrms'];
              intfilrms:=Query1.FieldValues['filrms'];
              intffout:=Query1.FieldValues['ffout'];
              intfthdi:=Query1.FieldValues['fthdi'];          cur_str := 'INSERT INTO '+edtTableName.text +'(type,caption,[fUrms],[fIrms],[fPF],[fP],[fre],[fUlrms],[filrms],[ffout],[fthdi]) VALUES(';
              cur_str := cur_str + '''' + strType + ''''+',' + '''' + strcaption + ''''+','+inttostr(intfurms)+','+inttostr(intfirms)+','+inttostr(intfpf)+','+inttostr(intfp)+',';
              cur_str := cur_str +inttostr(intfre)+','+inttostr(intfulrms)+','+inttostr(intfilrms)+','+inttostr(intffout)+','+inttostr(intfthdi)+')';
              ADOQuery1.close;
              ADOQuery1.SQL.clear;
              ADOQuery1.SQL.Add(cur_str);
              ADOQuery1.ExecSQL ;          Query1.Next;          adotable1.Active := False;
              adotable1.Active := True;
            end;
          edtpreno.Text:=inttostr(i);
        end;
      except
        showmessage('program error!');
      end;
      

  3.   


    insert into 工资表(日期,员工工号) select getdate(),员工编号 from 基本信息表 where 部门 = '你的部门名称';利用部门表的部门来查询出基本信息表中的一组员工编号...----------说清楚点!
      

  4.   

    adoquery;
    adoprocstore;存储过程
      

  5.   

    http://expert.csdn.net/Expert/topic/3008/3008997.xml?temp=.0585596
      

  6.   

    我的数据库是access的,是这样的,我想在在窗体上面的dblookupcombobox中选择部门,然后再选择工资月份,这样点击新建按钮之后转到另外一个窗体上面的dbgrid上面显示出创建的一批和属于这个部门下面的所有员工的此月份的工资数据,也就是说利用部门将查询出来的员工工号(对应于工资表中的员工编号)以及日期写入数据库中。
      

  7.   

    用insert into table(columns...) select columns... from orgtable,grid就用来显示吧。
      

  8.   

    我的代码是这样的
      deptstr:=dblookupcombobox1.text; //获得部门信息)
      datestr:=(FormatDateTime('yyyy',pickyear.Date));
      riqi:=trim(datestr+'-'+comboboxmonth.Text); //日期
        label5.Caption:=riqi;
        
        wagefrm.adoquery1.Close;
        wagefrm.adoquery1.SQL.Clear;
        wagefrm.ADOQuery1.SQL.Add('select 基本信息表.工号 from (基本信息表  right join 工资项目表  on 基本信息表.工号=工资项目表.员工编号)  where 部门名称="'+deptstr+'" ');
        wagefrm.adoquery1.SQL.Add('insert into 工资项目表(发放日期,员工编号)  value("'+riqi+'",基本信息表.工号) ');
        wagefrm.adoquery1.ExecSQL;  addwagefrm.Close;
    反正问题老是出错,不知道问题究竟出在哪里,是不是insert中的工号不能为查询出来一批数据?
      

  9.   

    你的SQL语句这样写肯定不行啦
    改成这样:
    wagefrm.ADOQuery1.SQL.Add('select 基本信息表.工号 from (基本信息表  right join 工资项目表  on 基本信息表.工号=工资项目表.员工编号)  where 部门名称="'+deptstr+'" ');
    wagefrm.ADOQuery1.Open;
    with wagefrm.adoquery2 do //换另一个ADOQUERY
    begin
      close;  
      SQL.text:='insert into 工资项目表(发放日期,员工编号)  value('+quotedstr(riqi)+','+ quotedstr(AdoQuery1.fields[0].asstring)+') ';
      ExecSQL;
    end;
      

  10.   

    数据库是ACCESS的日期前后要加#
    如:#2003-10-10#
      

  11.   

    lzy6204(学无止境) ,按照你的思路试过了,运行提示insert into 语法错误
      

  12.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
        deptstr:=dblookupcombobox1.text; //获得部门信息)
        datestr:=(FormatDateTime('yyyy',pickyear.Date));
        riqi:=trim(datestr+'-'+comboboxmonth.Text); //日期
        label5.Caption:=riqi;
        with wagefrm.adoquery1 do
        begin
            Close;
            SQL.Clear;
            SQL.Add('select 基本信息表.工号 from (基本信息表  right join 工资项目表  on 基本信息表.工号=工资项目表.员工编号)  where 部门名称="'+deptstr+'" ');
            ExecSQL;
            open;
            first;
            while not eof do
            begin
                wagefrm.adoquery2.close;
                wagefrm.adoquery2.SQL.Clear;
                wagefrm.adoquery2.SQL.Add('insert into 工资项目表(发放日期,员工编号)  value('+riqi+','+ quotedstr(agefrm.adoquery1.fields[0].asstring))+')';
                wagefrm.adoquery2.ExecSQL;
                next;
            end;
        end;
      with wagefrm.adoquery2 do
      begin
          Close;//inv_check是adoquery
          SQL.Clear;
          Add('select * from 工资项目表');      //在这里可以加上你的显示条件 然后dbgrid中显示
          Open;
      end;
    end;
      

  13.   

    insert into 工资表(日期,员工工号) select getdate(),员工编号 from 基本信息表 where 部门 = '你的部门名称';