怎样在ADOQUERY中追加记录(100分)

  • 主题发起人 主题发起人 左右手
  • 开始时间 开始时间

左右手

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个ADOQUERY1,里面有一些记录,现在我想把ADOQUERY2中的记录追加到ADOQUERY1中
也就是说ADOQUERY1中的记录变为ADOQUERY1和ADOQUERY2的记录的和,各位大虾,该怎么做
 
可以用临时表将adoquery2数据击保存,然后
insert into 表1 select * from 表2
 
我现在并不想把这些数据写回数据库中,其实我只是想做这么个工作:
把数据库中的数据提取出来,但是有几种不同的条件,我想把这几种
不同条件下查询出来的数据集合并在一起,同时显示出来,不知道有
没有办法。
 
将adoquery1数据集方入临时表#table1中,adoquery2数据集方入临时表#table2中
将#table1的内容方到#table2中;动态改变datasource的dataset属性
 
给个例子好吗
 
试试union
 
jianping0兄:
我想过用UNION了,但是因为到底有多少条件不确定,所以可能有很多个UNION语句,
这样的话SQL语句就太长了,一个是不好维护,再一个就有可能出错,所以没用这个方法
 
zhengzhijia兄:
你去了哪里,为什么近日踪迹不见,能否把你的方法给个例子。
 
你这样的记录应该是两个表中的栏位都一样吧。你是想这个query中有5笔纪录,另外一个中
有10笔记录,你要将15笔合起来是不是。三层中能办到,两层中还不清楚,还试过。也不知
你的意思是不是这样。
 
用Tbatchmove的AppendUpdate模式吧
 
zhangkan兄:对,我的目的就是这样,但是和起来的记录我只想看,不想写到数据库中。
htw兄:我用过BATCHMOVE了,但是它好象不支持ADO的。还有没有更好的办法。
 
这用一个ADOQuery即可,头先把你Select 出来的值存入暂存盘中,在依条件比对。你可用以下语法加以修改
CREATE PROCEDURE RP040402 @X varchar(3) AS
create table #temp(area varchar(3),item varchar(9),x3 int,x4 int)
declare @item varchar(9),@item1 varchar,@tran_area varchar(3),@QTY int,@CODE varchar(3),
@x3 int,@x4 int,@area varchar(3)
declare data_cursor cursor for
SELECT PSM10.AREA,PSM10.ITEM,PSWORK2.TRAN_AREA,PSWORK2.CODE,PSWORK2.QTY FROM ITEM,PSM10
LEFT OUTER JOIN PSWORK2 ON PSWORK2.ITEM=PSM10.ITEM AND PSWORK2.AREA=PSM10.AREA
WHERE ITEM.ITEM=PSM10.ITEM
AND (PSM10.I_JOB+PSM10.I_CASTED+PSM10.I_RTN+PSM10.I_CMP+PSM10.I_CUST+PSM10.I_ADJ)+
(PSM10.O_SCR+PSM10.O_CMP+PSM10.O_RTN+PSM10.O_SALES+PSM10.O_EXCHGE+PSM10.O_SAMPLE)+
PSM10.I_ADJ+PSM10.BEGINSTOCK<>0
AND PSM10.AREA=@X
open data_cursor
fetch next from data_cursor into @area,@item,@tran_area,@code,@qty
while @@fetch_status=0
begin
if @tran_area='RTN' and @code='0'
set @x3=@qty
else
set @x3=0
if (@tran_area='RTN' or @tran_area='SCR') and @code='1'
set @x4=@qty
else
set @x4=0
insert #temp(area,item,x3,x4) values (@area,@item,@x3,@x4)
fetch next from data_cursor into @area,@item,@tran_area,@code,@qty
end

select area,item,sum(x3) as sum3,sum(x4) as sum4 into #temp1 from #temp
group by area,item


SELECT PSM20.NAME,PSM30.PRICE,PSM30.ACCCODE,ITEM.WEIGHT,PSM10.ITEM,
PSM10.AREA,PSM10.BeginStock,PSM10.I_JOB,PSM10.I_CASTED,PSM10.I_RTN,PSM10.I_CMP,
PSM10.I_CUST,PSM10.I_ADJ,PSM10.O_SCR,PSM10.O_CMP,PSM10.O_RTN,PSM10.O_SALES,
PSM10.O_EXCHGE,PSM10.O_SAMPLE,PSM10.O_SHIP,PSM10.LASTDATE,PSM10.LASTSHIP,
PSM10.PBEGIN,PSM10.STK,PSM10.I_OTHERS,PSM10.O_OTHERS,PSWORK2.TRAN_AREA,
PSWORK2.VOUCHER,PSWORK2.SEQ,PSWORK2.DATE,PSWORK2.FROM_AREA,PSWORK2.CODE,
PSWORK2.QTY,PSWORK2.ADJCODE,PSWORK2.TO_AREA,PSWORK2.PD_NO,#temp1.sum3,#temp1.sum4
FROM ITEM,PSM10
LEFT OUTER JOIN PSWORK2 ON PSWORK2.ITEM=PSM10.ITEM AND PSWORK2.AREA=PSM10.AREA
LEFT OUTER JOIN PSM20 ON PSM20.AREA=PSM10.AREA
LEFT OUTER JOIN PSM30 ON PSM30.ITEM=PSM10.ITEM AND PSM30.AREA=PSM10.AREA
LEFT OUTER JOIN #TEMP1 ON #TEMP1.ITEM=PSM10.ITEM AND #TEMP1.AREA=PSM10.AREA
WHERE ITEM.ITEM=PSM10.ITEM
AND (PSM10.I_JOB+PSM10.I_CASTED+PSM10.I_RTN+PSM10.I_CMP+PSM10.I_CUST+PSM10.I_ADJ)+
(PSM10.O_SCR+PSM10.O_CMP+PSM10.O_RTN+PSM10.O_SALES+PSM10.O_EXCHGE+PSM10.O_SAMPLE)+
PSM10.I_ADJ+PSM10.BEGINSTOCK<>0
AND PSM10.AREA=@X
ORDER BY PSM10.AREA,PSM10.ITEM

drop table #temp
drop table #temp1
DEALLOCATE DATA_CURSOR
 
Motar Liu兄:
辛苦辛苦,好长的代码呀,我看着都头大。原来你是用的存储过程,而且还用了游标,
但是我的程序里不能用存储过程。我最后还是用的UNION解决的,虽然SQL语句长了点,不过
效果还算不错,而且我自己写的代码不是很多,都在循环里做了。不管怎么样,多谢各位兄
弟,小弟要分分了。
 
多人接受答案了。
 
后退
顶部