如何把一个表的某列的值给另外一列啊??

时间:2021-06-28 10:04:37
比如我要把

A表的

第一列的值给第二列

应该如何做啊??

想糊涂了,请各位指教~~

19 个解决方案

#1


update table a set a1=a2

#2


UPDATE a SET a1=a2
a是表名,a1第一列,a2,第二列,使用Query.execsql执行就可以了

#3


反了.
update table a set a2=a1

#4


同意

#5


update  a set a2=a1

#6


update table a set a1=a2

#7


如果两列的值完全相同,可能也没意义了,在此基础上可以计算
update a set a2=convert(str,a1) 把数值转换成字符串再给a2
update a set a2=a1+? 把a1经过运算后的值方到a2
update a set a2=a1 ...

#8


update  a set a2=a1

#9


我说的不太清楚是这个样子的啊

我要
with query1 do
begin
sql.add('select * from hlcsdict');
sql.add('where jx='''+trim(edit1.text)+'''');
open;
end;

with query2 do
begin
sql.add('select * from hlcsdict');
sql.add('where jx='''+trim(edit2.text)+'''');
open;
end;

while not query1.eof and query2.eof do
begin
edit;
query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
post;
query1.next;
query2.next;
end;

我是这么处理的啊

问题来了关键是执行到edit;
的地方的时候就说QUERY1是一个只读的数据集

但是我用ADOQUERY代替QUERY1就不会出现这中情况??

你们有没有遇到过或者有什么其它的办法来解决我的这个问题啊????

#10


设置Query1的RequestLive为True;

#11


while not query1.eof and query2.eof do
begin
query1.edit;  //
query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
query1.post;  //
query1.next;
query2.next;
end;

#12


那不是一样的道理!

#13


关注

#14


1、query1的sql语句 Select * from ... 是不是能更新?要不要逐个列出字段?requestLive属性要设为true。

2、query加sql语句之前要加:
query.close;
query.sql.clear;

3、
query1.first;
query2.first;
while not query1.eof and query2.eof do
begin
  query1.edit;  
  query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
  query1.post;  
  query1.next;
  query2.next;
end;

#15


query1.close;
query1.sql.clear;
query1.sql.add('update tablename set values2=values1');
query1.execsql;

#16


query1.close;
query1.sql.clear;
query1.edit;
query1.sql.add('update yourtablename set vales2:=values1);
query1.execsql;

#17


你们所说的SQL语句都只能解决一正列完成的复制还是可以的

但是如果我要实现下面这种情况怎么办??

A B  C
1 5
1 5
2 4
2 9
我要把A=1的B列赋给A¡2的C列,应该怎么做??


with queryBatchCopyHl do
begin
close;
sql.clear;
sql.add('select * from hlcsdict');
sql.add('where jx='''+Trim(Edtjx.text)+'''');
open;
query1.Close;
query1.sql.clear;
query1.SQL.add('select * from hlcsdict');
query1.sql.add('where jx='''+Trim(Edtjx1.text)+'''');
query1.open;
query1.Edit ;
query1.first;
querybatchcopyhl.First ;
try
try
while not querybatchcopyhl.eof do
begin
query1.edit;
query1.FieldByName(quduan1).asstring:=querybatchcopyhl.fieldbyname(quduan).asstring;
query1.FieldByName(xs1).asstring:=querybatchcopyhl.fieldbyname(xs).asstring;
query1.Post;
querybatchcopyhl.next;
query1.Next;
end;
query1.first;
querybatchcopyhl.First ;
except
 showmessage('异常数据产生');
end;
我的程序是这么写的,不过效率不太好,A相同的时候执行正确,不相同的时候

就有点问题,好象是把一些把应该更新的字段也修改了,晕~~

大家帮忙看看吧~~,谢谢,分不够再加~~

#18


如果是用SP的话应该怎么做??

我不太清楚,谁愿意指点一二~

#19


var
  vFieldNames: string;
  vFieldValues: Variant;
begin
  vFieldNames := StringReplace(Trim(Table1.FieldList.Text), #13#10, ';', [rfReplaceAll]);
  vFieldValues := Table1[vFieldNames];
  Table1.Next;
  Table1.Edit;
  Table1[vFieldNames] := vFieldValues;
end;

#1


update table a set a1=a2

#2


UPDATE a SET a1=a2
a是表名,a1第一列,a2,第二列,使用Query.execsql执行就可以了

#3


反了.
update table a set a2=a1

#4


同意

#5


update  a set a2=a1

#6


update table a set a1=a2

#7


如果两列的值完全相同,可能也没意义了,在此基础上可以计算
update a set a2=convert(str,a1) 把数值转换成字符串再给a2
update a set a2=a1+? 把a1经过运算后的值方到a2
update a set a2=a1 ...

#8


update  a set a2=a1

#9


我说的不太清楚是这个样子的啊

我要
with query1 do
begin
sql.add('select * from hlcsdict');
sql.add('where jx='''+trim(edit1.text)+'''');
open;
end;

with query2 do
begin
sql.add('select * from hlcsdict');
sql.add('where jx='''+trim(edit2.text)+'''');
open;
end;

while not query1.eof and query2.eof do
begin
edit;
query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
post;
query1.next;
query2.next;
end;

我是这么处理的啊

问题来了关键是执行到edit;
的地方的时候就说QUERY1是一个只读的数据集

但是我用ADOQUERY代替QUERY1就不会出现这中情况??

你们有没有遇到过或者有什么其它的办法来解决我的这个问题啊????

#10


设置Query1的RequestLive为True;

#11


while not query1.eof and query2.eof do
begin
query1.edit;  //
query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
query1.post;  //
query1.next;
query2.next;
end;

#12


那不是一样的道理!

#13


关注

#14


1、query1的sql语句 Select * from ... 是不是能更新?要不要逐个列出字段?requestLive属性要设为true。

2、query加sql语句之前要加:
query.close;
query.sql.clear;

3、
query1.first;
query2.first;
while not query1.eof and query2.eof do
begin
  query1.edit;  
  query1.fieldbyname('a').asstring:=query2.fieldbyname('b)'.asstring;
  query1.post;  
  query1.next;
  query2.next;
end;

#15


query1.close;
query1.sql.clear;
query1.sql.add('update tablename set values2=values1');
query1.execsql;

#16


query1.close;
query1.sql.clear;
query1.edit;
query1.sql.add('update yourtablename set vales2:=values1);
query1.execsql;

#17


你们所说的SQL语句都只能解决一正列完成的复制还是可以的

但是如果我要实现下面这种情况怎么办??

A B  C
1 5
1 5
2 4
2 9
我要把A=1的B列赋给A¡2的C列,应该怎么做??


with queryBatchCopyHl do
begin
close;
sql.clear;
sql.add('select * from hlcsdict');
sql.add('where jx='''+Trim(Edtjx.text)+'''');
open;
query1.Close;
query1.sql.clear;
query1.SQL.add('select * from hlcsdict');
query1.sql.add('where jx='''+Trim(Edtjx1.text)+'''');
query1.open;
query1.Edit ;
query1.first;
querybatchcopyhl.First ;
try
try
while not querybatchcopyhl.eof do
begin
query1.edit;
query1.FieldByName(quduan1).asstring:=querybatchcopyhl.fieldbyname(quduan).asstring;
query1.FieldByName(xs1).asstring:=querybatchcopyhl.fieldbyname(xs).asstring;
query1.Post;
querybatchcopyhl.next;
query1.Next;
end;
query1.first;
querybatchcopyhl.First ;
except
 showmessage('异常数据产生');
end;
我的程序是这么写的,不过效率不太好,A相同的时候执行正确,不相同的时候

就有点问题,好象是把一些把应该更新的字段也修改了,晕~~

大家帮忙看看吧~~,谢谢,分不够再加~~

#18


如果是用SP的话应该怎么做??

我不太清楚,谁愿意指点一二~

#19


var
  vFieldNames: string;
  vFieldValues: Variant;
begin
  vFieldNames := StringReplace(Trim(Table1.FieldList.Text), #13#10, ';', [rfReplaceAll]);
  vFieldValues := Table1[vFieldNames];
  Table1.Next;
  Table1.Edit;
  Table1[vFieldNames] := vFieldValues;
end;

#20