Office中国论坛/Access中国论坛

标题: 请高手指教,多条件的记录复制问题? [打印本页]

作者: qpzm    时间: 2003-10-7 22:55
标题: 请高手指教,多条件的记录复制问题?
我想在此按钮中添加代码,把Total_Data表中的满足条件的单据编号(Bill字段)记录拷到Regie_Data表中,条件是Regie_Bill表中Bill字段的所有单据编号,请问有没有办法实现?[attach]1903[/attach]
作者: marco2    时间: 2003-10-7 22:57
看不明白你講的條件!
作者: qpzm    时间: 2003-10-7 23:07
也就是Regie_Bill表中Bill字段包含哪些单据编号,就从Total_Data表中拷贝包含这些单据编号的记录到Regie_Data表中。
作者: andymark    时间: 2003-10-8 05:56
试试追加查询
作者: qpzm    时间: 2003-10-8 16:46
追加查询的条件实现不了,哪位老大帮忙想想办法,小弟感激万分!
作者: ADAM    时间: 2003-10-8 17:25
我試過新增查詢可以啊
下面是代碼:
INSERT INTO Regie_Total
SELECT Total_Data.*
FROM Regie_Bill INNER JOIN Total_Data ON Regie_Bill.Bill = Total_Data.Bill;
你試試看.

作者: qpzm    时间: 2003-10-8 18:32
果然实现了,只是每按一次都会复一份到Regie_Total,会产生许多重复数据,能否做到,如果Rgeie_Total表中存在的数据就略过,只拷贝没有的数据?

有一条语句可实现单条件拷贝,且只拷贝没有的数据:
Insert into <Table0> select * from <Table1> where <条件>
但其Where条件实现不了这个例子的问题,请问还有什么办法可实现?
作者: qpzm    时间: 2003-10-8 18:48
找到另一个方法是在执行:
INSERT INTO Regie_Total
SELECT Total_Data.*
FROM Regie_Bill INNER JOIN Total_Data ON Regie_Bill.Bill = Total_Data.Bill;
前把 Regie_Total 表中的数据全删掉:
delete * from Regie_Total
这样可保持数据的唯一性,多谢 “ADAM” 的指点。
作者: ADAM    时间: 2003-10-8 18:55
那再試試這個
查詢語句:
INSERT INTO Regie_Total
SELECT Total_Data.*
FROM (Regie_Bill LEFT JOIN Regie_Total ON Regie_Bill.Bill = Regie_Total.Bill) INNER JOIN Total_Data ON Regie_Bill.Bill = Total_Data.Bill
WHERE (((Regie_Bill.Bill) Not In ([REGIE_TOTAL].[BILL])));
我試過可經喲

作者: ADAM    时间: 2003-10-8 19:30
你說的刪除在有時很好用
我制作的一個程序有用到
但只適合REGIE_TOTAL數據合部來自于TOTAL_BILL的情況.
作者: qpzm    时间: 2003-10-8 23:00
说得不错,我也想到这个问题,多谢你的帮助!
还有一个问题,拷贝过Regie_Total表的数据全为负数,我想在拷贝过去时变为正数,请问该怎么样做?
作者: ADAM    时间: 2003-10-9 17:31
這個很簡單
在相應字段上加上一個函數ABS()
即可把所有負數都變為正數
作者: qpzm    时间: 2003-10-9 17:37
我只想把拷贝的负数据变为正数,另外我有可能在Regie_Total表中手工输入负数,这些负数不能变为正数,如果在拷贝时的代码中实现,请教“ADAM”该怎么样做?谢谢!
作者: ADAM    时间: 2003-10-9 17:52
在相應字段加入一條函數:
如:
IIF([XX字段]<0,-[XX字段],[XX字段])
作者: qpzm    时间: 2003-10-9 18:15
不好意思,不太明白,是把 IIF([XX字段]<0,-[XX字段],[XX字段]) 加到下面的代码还是别的地方?如果加到下面代码,该怎么样加?

INSERT INTO Regie_Total
SELECT Total_Data.*
FROM (Regie_Bill LEFT JOIN Regie_Total ON Regie_Bill.Bill = Regie_Total.Bill) INNER JOIN Total_Data ON Regie_Bill.Bill = Total_Data.Bill
WHERE (((Regie_Bill.Bill) Not In ([REGIE_TOTAL].[BILL])));

作者: ADAM    时间: 2003-10-9 19:06
在查詢設計時用較簡單
如,在查詢設計中,你把上面代碼復制到查詢中,然后使用查詢設計,
在相應字段加上這個即可;
如:A字段,則為:A字段:IIF([A字段]<0,-[A字段],[A字段])
作者: qpzm    时间: 2003-10-9 19:38
还是实现不了,单独拷贝或取正可实现,同时进行实现不了,可否做一个传给我,toplegend@tom.com 多谢!
作者: ADAM    时间: 2003-10-9 21:11
如以下查詢:
INSERT INTO Regie_Total ( Bill, Barcode_Datas, OutBox, Style, Color_no, 0, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, S, M, L, Rebate )
SELECT Total_Data.Bill, Total_Data.Barcode_Datas, Total_Data.OutBox, Total_Data.Style, Total_Data.Color_no, Total_Data.[00], F([TOTAL_DATA].[50]) AS 50, F([TOTAL_DATA].[60]) AS 60, Total_Data.[70], Total_Data.[80], Total_Data.[90], Total_Data.[100], Total_Data.[110], Total_Data.[120], Total_Data.[130], Total_Data.[140], Total_Data.[150], Total_Data.S, Total_Data.M, Total_Data.L, Total_Data.Rebate
FROM (Total_Data INNER JOIN Regie_Bill ON Total_Data.Bill = Regie_Bill.Bill) LEFT JOIN Regie_Total ON Total_Data.Bill = Regie_Total.Bill
WHERE (((Regie_Bill.Bill) Not In ([REGIE_TOTAL].[BILL])));


Function F(DATA1 As Variant)
If IsNumeric(DATA1) = False Then
F = DATA1
Else
F = IIf(DATA1 < 0, -DATA1, DATA1)
End If
End Function

作者: qpzm    时间: 2003-10-9 23:17
上面的代码拷到查询或VBA中都出错,我做了小小修改,在按钮单击事件中加入以下代码实现了:
INSERT INTO Regie_Total SELECT Total_Data.Bill, Total_Data.Barcode_Datas, Total_Data.OutBox, Total_Data.Style, Total_Data.Color_no, ABS(Total_Data.[0]) AS 0, ABS(TOTAL_DATA.[50]) AS 50, ABS(TOTAL_DATA.[60]) AS 60, ABS(Total_Data.[70]) AS 70, ABS(Total_Data.[80]) AS 80, ABS(Total_Data.[90]) AS 90, ABS(Total_Data.[100]) AS 100, ABS(Total_Data.[110]) AS 110, ABS(Total_Data.[120]) AS 120, ABS(Total_Data.[130]) AS 130, ABS(Total_Data.[140]) AS 140, ABS(Total_Data.[150]) AS 150, ABS(Total_Data.[S]) AS S, ABS(Total_Data.[M]) AS M, ABS(Total_Data.[L]) AS L, Total_Data.Rebate FROM (Regie_Bill LEFT JOIN Regie_Total ON Regie_Bill.Bill = Regie_Total.Bill) INNER JOIN Total_Data ON Regie_Bill.Bill = Total_Data.Bill WHERE (((Regie_Bill.Bill) Not In ([REGIE_TOTAL].[BILL])))

还是依循你的方法,解决了这个问题,真的使我受益良多,感觉还未尽兴,还要再研究你说的方法。
非常感谢ADAM!非常感谢!
作者: ADAM    时间: 2003-10-9 23:34
我發了郵件給你,你看看吧...
作者: qpzm    时间: 2003-10-10 00:32
我的邮箱把附件删除了,说附件不安全,真是岂有此理,可否贴到论坛上,我再下载,谢谢!
作者: ADAM    时间: 2003-10-10 00:46
我傳上來了,你看看
不過我只做了50,60兩個字段
作者: ADAM    时间: 2003-10-10 00:47
剛剛忘了按上傳了,不好意思
作者: qpzm    时间: 2003-10-10 00:49
还是没有,在这里好象要压缩后才可上传。
作者: ADAM    时间: 2003-10-10 00:50
标题: 回貼
[attach]1936[/attach]
傳了幾次都沒上來,真是笨,原來要壓縮了才行
作者: qpzm    时间: 2003-10-10 00:56
我刚开始也没弄懂,这几开才搞懂,真搞笑!
先看看你的杰作!
作者: qpzm    时间: 2003-10-10 01:01
成功!原来在模组里申明 F(),耽误了你不少时间,真是过意不去,郑重道歉及道谢!


[此贴子已经被作者于2003-10-9 17:07:07编辑过]


作者: ADAM    时间: 2003-10-10 01:08
[attach]1938[/attach]
字段名搞錯了,本來是"00",誤成"0"了
再看看吧.
作者: qpzm    时间: 2003-10-10 01:30
我发现了她,已经改正了,难得你服务这么周到!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3