我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
sname:string;
begin
query1.First;
while not query1.Eof do
begin
sname:=query1.fieldbyname('name').AsString;
query2.Close;
query2.SQL.Clear;
query2.SQL.Add
('update B set code = A.code where B.name='+#39+sname+#39);
query2.ExecSQL;
query2.Open;
query1.Next;
end;
end;
报如下错
Invalid field name code
A:
code name
0001 aa
0002 bb
B:
name hmh code
aa 123
aa 1234
bb 321
cc 4321
我是想把A,B两表中,若name字段值相同,则更新B表的code为A表的code值.
我的问题出在何处?请高手指点!
procedure TForm1.Button1Click(Sender: TObject);
var
sname:string;
begin
query1.First;
while not query1.Eof do
begin
sname:=query1.fieldbyname('name').AsString;
query2.Close;
query2.SQL.Clear;
query2.SQL.Add
('update B set code = A.code where B.name='+#39+sname+#39);
query2.ExecSQL;
query2.Open;
query1.Next;
end;
end;
报如下错
Invalid field name code
A:
code name
0001 aa
0002 bb
B:
name hmh code
aa 123
aa 1234
bb 321
cc 4321
我是想把A,B两表中,若name字段值相同,则更新B表的code为A表的code值.
我的问题出在何处?请高手指点!
解决方案 »
- 有项目需找人合作完成
- 开博了,欢迎大家伙来踩踩
- 关于数据循环更新为随机数的问题
- 进销存中的先进先出问题
- 用过web server的朋友请进!
- 急用:如何打印信封(按信封的格式打印在A4的纸上就行了,但是信封的格式是竖着写的那种),多谢!
- TCombBox控件的使用问题求解?
- ★★★★●●■■用delphi的朋友们, 留下QQ!?◇◎●☆★★
- 急问delphi中获取系统时间的方法或函数.年月日时分秒
- 一个表中有一个字段为图像字段,可以为空,如何向该字段添加纪录,即添加一个图像???
- 求售销系统源代码,delphi+sql,有的话还可以给更多的分,前十名一定有分
- delphi报表求救,急!好心人帮忙。
'update B set code = A.code from A where B.name='+#39+sname+#39
从语法上分析不正确。建议使用存储过程,并使用游标来处理
大概思路
select code,name from a
open
while not eof
begin
update B set code=:code where name=:name;
next;
end;
SET t.ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)若要使上例合法,请从列名中删除别名 t。即:UPDATE titles
SET ytd_sales = t.ytd_sales + s.qty
FROM titles t, sales s
WHERE t.title_id = s.title_id
AND s.ord_date = (SELECT MAX(sales.ord_date) FROM sales)
SET code =
(SELECT code
FROM a
WHERE a.name = b.name)
procedure TForm1.Button1Click(Sender: TObject);
begin
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('UPDATE B SET code =(SELECT code FROM A WHERE A.name=B.name)');
query2.ExecSQL;
query2.Open;
end;
得到如下结果:
A:
code name
0001 aa
0002 bb
B:
name hmh code
aa 123 0001
aa 1234 0001
bb 321 0002
cc 4321 0002
其中name为cc也更新了一次,请问怎么办?
SET code =(SELECT code FROM A WHERE A.name=B.name)'
用这种方法应该没问题的,如果不行,那你就要做个循环了。
v_code : string;
query1.close;
query1.sql.clear;
Query1.sql.add(SELECT code FROM A );
Query1.open;
Query1.First;
for i:=0 to Query1.RecordCount do
begin
v_code:='';
v_code:=Query1.FieldByName('code').AsString;
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('UPDATE B SET code v_code');
query2.ExecSQL;
query2.Open;
Query1.Next;
end;
你试一试上面的方法,看看可不可以
也许还要做修改;
'UPDATE B
SET code =(SELECT code FROM A WHERE A.name=B.name)'
是可以的,但是更新出的结果有错误
cc 4321 0002
此记录的name值并不存在于A表中,但是依然正常更新得到此错误的结果
程序中只要遇到不匹配的记录,它就会照上一条记录的结果更新,直到找到匹配的记录才正常
也就是(我把数据重新改过,得到这个结果)
name hmh code
aa 123 0001
aa 1234 0001
cc 4321 0001
bb 321 0002
begin
Close;
SQL.Clear;
SQL.Add('update B set code = A.code from B,A where B.name=A.name');
ExecSQL;
end;