上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
sthuang66
註冊時間: 2014-04-27 文章: 171
第 1 樓
|
發表於: 星期二 四月 07, 2015 12:59 am 文章主題: 懇求各位高手賜教! |
|
|
這半年認真的自修學習了VFP一點皮毛!公司是使用VFP去開發的軟體!目前想要把輸出部分自己稍加修改符合自己的需求!以下是擷取幾筆資料庫內容來繼續討論
------------------------------------------------------------------------------
(ID) ( name) (Se_no) (Date) (type) (item) (lo) (no)
02481 Mary 0001 1040403 3 O2 aa 1 ->第1筆
02481 Mary 0001 1040403 3 O2 bb 1 ->第2筆
02481 Mary 0001 1040403 3 O2 aa 1 ->第3筆
02481 Mary 0001 1040403 3 O3 bb 1 ->第4筆
02481 Mary 0001 1040403 C O2 aa -1 ->第5筆
02481 Mary 0001 1040403 C O2 bb -1 ->第6筆
02168 Helen 0001 1040403 3 O3 cc 1
02168 Helen 0001 1040403 3 O1 dd 1
03048 Tracy 0011 1040403 3 SS FM 1
04307 John 0038 1040403 3 EE aa 1
---------------------------------------------------------------------------------
當使用公司軟體介面輸入第一筆與第二筆資料後發現錯誤再更改成第三筆與第四筆資料此時會自動產生負值的第五筆和第六筆!我能理解這是當初軟體開發者想要把所有操作紀錄都留下來的設計!
只是目前我想要的資料是第三筆與第四筆資料!可能我不是科班出身功力太差!想破頭搞不定
1.若是 sele * where type ='3' into table a ->會多第一筆與第二筆
2.我目前SQL部分學習較多!所以沒有能力去想用純粹VFP語法部分,若是各位高手有使用傳統VFP語法!我會試著去學習!感恩不盡 |
|
回頂端 |
|
|
asd89839032
註冊時間: 2012-10-15 文章: 49
第 2 樓
|
發表於: 星期二 四月 07, 2015 9:33 am 文章主題: |
|
|
弱弱的問,12和34完全一樣......
是正常的嗎?
完全一樣依我這懶鬼的性格會加上一個新欄位來註解讓他們不太一樣........ _________________ 菜鳥路過... |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 3 樓
|
發表於: 星期二 四月 07, 2015 11:03 am 文章主題: |
|
|
第二筆和第四筆是不同的!第一筆和第三筆的確是相同!!因為是用廠商寫好的程式把兩筆訂單輸入,發現第二筆弄錯再更正,此時並不是update
而是多寫入第五筆卻抵銷第一筆,第六筆抵銷第二筆=>這是我目前的觀察 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 4 樓
|
發表於: 星期二 四月 07, 2015 11:12 am 文章主題: |
|
|
看來這個程式是以no那一欗的値當作紀錄以負値去抵消正值的,相當於添加後不修改而是自動加一筆負値的來修正
那個no是否代表數量?
找到相對應的意義才能決定怎麼辦 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 5 樓
|
發表於: 星期二 四月 07, 2015 11:49 am 文章主題: |
|
|
如果您只開始了半年,
實在想勸您不要再花時間在vfp上頭
把資料留著,用您熟悉的工具重新開發
會比目前狀況為佳 |
|
回頂端 |
|
|
yctsai
註冊時間: 2003-04-11 文章: 179
第 6 樓
|
發表於: 星期二 四月 07, 2015 1:11 pm 文章主題: |
|
|
1.用VFP也很好啊
2.也許要順當初軟體開發者的思維
a:
先找有修改的
select * from x where type='C' into cursor y
再找對應的1,2筆
select * from x where id+... IN (select id+... from cursor y) into cursor z
過慮1,2筆
select * from x where id+... NOT IN (select id+... from cursor z) into cursor 結果
b.
不管type,直接sum起來正負相抵
select id,name,..,sum(no) from x group by id,name,... into cursor 結果 |
|
回頂端 |
|
|
ckp6250
註冊時間: 2004-07-30 文章: 1644
第 7 樓
|
發表於: 星期二 四月 07, 2015 3:47 pm 文章主題: |
|
|
對於VFP用了十幾廿年的老手來說,基於一動不如一靜,當然繼續用。
但樓主才剛起步半年,實在不忍心看他把精力耗在這個沒有未來的東西上,
不免多嘴幾句。 |
|
回頂端 |
|
|
elleryq
註冊時間: 2007-06-21 文章: 768
第 8 樓
|
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 9 樓
|
發表於: 星期三 四月 08, 2015 11:36 am 文章主題: |
|
|
謝謝各位的幫助!感激不盡!
NO 是數量沒錯 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 10 樓
|
發表於: 星期三 四月 08, 2015 12:20 pm 文章主題: |
|
|
用庫存的概念就像是某人領了一件物品沒用又交回存庫
你要的是排除掉那些又進又出的紀錄嗎? |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 11 樓
|
發表於: 星期三 四月 08, 2015 5:47 pm 文章主題: |
|
|
是的!我猜原始設計者是想了解訂單資料備存取的紀錄!才用此方式來紀錄 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 12 樓
|
發表於: 星期三 四月 08, 2015 6:16 pm 文章主題: |
|
|
程式概念大概是這樣子
把這個檔案複製到另外一個檔案
開啓這個新複製的檔案
把type='c'的又複製到第三個檔案,同時刪除這個檔案裡面所有type c的資料
再以第三個檔案為基礎
將此檔案裡面同個日期,,item,no 的找出來,一一刪除,剩下的就是你要的
概念轉換成程式就比較簡單了 |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 13 樓
|
發表於: 星期三 四月 08, 2015 6:20 pm 文章主題: |
|
|
我個人比較喜歡偷偷的紀錄這樣一類的進出,放在另外一個單獨的檔案裡,
當另外稽查用,這樣一來庫存會比較清晣 |
|
回頂端 |
|
|
sthuang66
註冊時間: 2014-04-27 文章: 171
第 14 樓
|
發表於: 星期三 四月 08, 2015 10:33 pm 文章主題: |
|
|
我按照各位意見,寫的如下
select * from x where type='C' into table y
select * from x where id+name+se_no+date+item+lo IN (select id+name+se_no+date+item+lo from y) into table z
select * from x where id+name+se_no+date+item+lo NOT IN (select id+name+se_no+date+item+lo from z) into table zz
--------------------------------------------------------------------------------
這樣執行後會少掉第三筆資料!
公司程式是在介面keyin完會建入第一和第二筆!若是發現第二筆在lo欄位有錯時更正
會建入第三和第四筆!基本上第一筆都沒有更改!但是他系統在資料庫會自動產生第五筆去抵銷第一筆,第六筆去抵銷第二筆!第五和第一兩者差別在TYPE與no!要去抵銷的兩筆是type="c",no是負值!!
DBF去看是有六筆資料,但是若是用公司廠商寫的程式就只會呈現第三和第四筆
我大概知道我的方法有錯!因為這樣SQL程序會把沒有更改的訂單去掉!但是我想不出有什麼辦法可以正負去抵銷! |
|
回頂端 |
|
|
bx1166
註冊時間: 2011-12-06 文章: 273
第 15 樓
|
發表於: 星期三 四月 08, 2015 11:03 pm 文章主題: |
|
|
Sele 1
original.dbf
Copy to tempfile
Sele 1
Use tempfile
Copy to mtemp for type='C'
Dele for type='C'
Pack
Sele 2
Use mtemp
Go top &&for scan
Do while .not. Eof()
Sele 1
Locate for date=b.date .and. Item=b.item .and. No=(0-b.no) .and. (.not. Deleted())
If .not. Eof()
Dele
End if
Sele 2
Skip
End do
Sele 1
Pack
Brow
存成org
Run 這個prg
這樣看看結果對不對跑跑看
bx1166 在 星期五 四月 10, 2015 5:32 pm 作了第 4 次修改 |
|
回頂端 |
|
|
|