请问如何将adoquery查询出来的结果写到数据库中?我有一个基本信息表(员工编号,部门名。。),一个部门表(部门号,部门名),一个工资表(日期,员工工号。),我想根据选择不同的部门生产新的数据,所以就要利用部门表的部门来查询出基本信息表中的一组员工编号,再将这些员工编号以及当前日期写进工资表中去,也就是先查询出编号再插入到数据库中,且在另外一个窗体中的dbgrid中显示出来,请问如何实现?我写的代码总是说insert语法出错????
解决方案 »
- 动态创建的控件的OnClick过程
- 网上找不到答案,只能问了。关于DLL的问题?
- DELPHI透明控件代码,求VB的实现方法
- 数据库查询速度的问题?给意见者有分!
- 急!!要以access作为delphi的后台如何做
- 急啊在线等(怎么把子EDIT控件文字靠右对齐)?
- 头大了,为什么换了密码就连不上了!
- 谁能帮帮我啊?关于ActiveX Form 发布使用的问题!!!
- 寻找WindowXP的图标(替换,剪切,复制,粘贴)16/32都要,50分一个!!!
- <<Delphi 5开发人员指南>>是否配有光盘,那里可以下载。
- 100分相送,高手请进,在线等待
- ---=== RxRichEdit如何保存文本内容? ===---
把你的语句贴出来看看
一下代码可以参考一下,应该足够了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;
insert into 工资表(日期,员工工号) select getdate(),员工编号 from 基本信息表 where 部门 = '你的部门名称';利用部门表的部门来查询出基本信息表中的一组员工编号...----------说清楚点!
adoprocstore;存储过程
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中的工号不能为查询出来一批数据?
改成这样:
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;
如:#2003-10-10#
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;