SQL远程数据写入问题(100分)

  • 主题发起人 主题发起人 bj_2005
  • 开始时间 开始时间
B

bj_2005

Unregistered / Unconfirmed
GUEST, unregistred user!
StringGrid中有10多行,(其实就是一张发货单),第一行值是A(假设只有一个值),第二行是B,第三行是D,第四行是...等.<br>怎样用最快的(最小的)办法一次写入远程SQL中的一张表的某列中?<br>如果用循环的方法读一条出来然后向远程数据表写一条入去,<br>例如:<br>&nbsp; &nbsp; &nbsp; &nbsp;for i:=1 to 18 do<br>&nbsp; &nbsp; &nbsp; &nbsp;if StringGrid1.Cells[1,i]&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1.Append;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1['1']:=StringGrid1.Cells[1,i];<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1.Post;<br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>这绝对不是实用的方法.<br>求教了,谢!
 
直接生成SQL插入(直接用insert)
 
同意楼上的,也可以用存取过程。
 
insert 正解
 
请楼上各位给出能用代码.
 
根据你的需求,是要插入多条记录,所以你的做法就是正确的做法了。一条SQL语句不可以插入多条记录的,除非是从另外一个表中读取记录来插入,例如 insert into TableB (TableB.Field1, TableB.Field2) select TableA.Field1, TableA.Field2 from TableA where ...<br>把这个过程写在存储过程里也可以,但你同样需要多次调用这个存储过程,原因和前面所述的一样。
 
for i:=1 to 18 do<br>&nbsp; &nbsp; &nbsp; &nbsp;if StringGrid1.Cells[1,i]&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1.Append;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1['1']:=StringGrid1.Cells[1,i];<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i:=i+1;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>ADOQuery1.Post;
 
如果你用的是三层,可以一次传一个二维数组过去(封装成Variant类型),由中间层分解后保存,如果只是C/S结构,我觉得可能就只有一条条地INSERT了。
 
把ADOQuery的LockType改为ltBatchOptimistic<br>你的代码:<br>&nbsp; &nbsp; &nbsp; &nbsp;for i:=1 to 18 do<br>&nbsp; &nbsp; &nbsp; &nbsp;if StringGrid1.Cells[1,i]&lt;&gt;'' then<br>&nbsp; &nbsp; &nbsp; &nbsp;begin<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1.Append;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1['1']:=StringGrid1.Cells[1,i];<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ADOQuery1.Post;<br>&nbsp; &nbsp; &nbsp; &nbsp;end;<br>最后加一句<br>ADOQuery1.UpdateBatch();<br>写入表中的操作,都在最后一句,最后一句没有执行的时候,所有数据都没有保存进去。
 
建议写存储过程<br>insert into tabelA(filed1,filed2,filed3,....)<br>select filed1,filed2,filed3,.... from tabelb
 
fulifeng说的有道理
 
多人接受答案了。
 
后退
顶部