|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
shengyi
註冊時間: 2004-07-14 文章: 35
第 1 樓
|
發表於: 星期四 二月 05, 2009 1:54 pm 文章主題: 請問如何把同一天的資料都印在同一個欄位 |
|
|
假設 TABL1如下
date money
1 AAA
2 BBB
5 CCC
5 DDD
12 EEE
12 FFF
12 GGG
22 MMM
想得到TABL2
date money
1 AAA
2 BBB
5 CCC DDD
12 EEE FFF GGG
22 MMM
我的想法是用SCAN達成,先讀一筆把資料放至變數,
再判斷下一筆資料日期是否相同,相同則把MONEY資料APPEND至變數,不相同則寫至特定TABLE,有較簡單的方法?(TABLE2的MONEY欄位要放至報表中) |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期四 二月 05, 2009 6:28 pm 文章主題: |
|
|
你的問題只有一個.
和你其他的問題一樣.
你根本不了解你的武器. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
shengyi
註冊時間: 2004-07-14 文章: 35
第 3 樓
|
發表於: 星期五 二月 06, 2009 12:47 am 文章主題: |
|
|
請問一下,下面這段程式最後一個repl有誤嗎 ?
?tempid有顯示資料,但後面repl卻沒寫資料進去?
SELE table2
SCAN
tempdate=table2.date
SELE table1
SCAN for table1.date=tempdate
tempid = tempid + " " + table1.money
ENDSCAN
? tempid
REPL table2.money with tempid
tempid= ""
ENDSCAN |
|
回頂端 |
|
|
Terry1211
註冊時間: 2008-03-13 文章: 63
第 4 樓
|
發表於: 星期五 二月 06, 2009 7:12 am 文章主題: |
|
|
擷取 Help裡 replace的說明
REPLACE 命令用運算式的值替換欄位中的資料。
若欄位不在選定工作區,則必須在欄位前加上資料表格別名。
注意: 如果省略 IN 子句,如果記錄指標位於目前工作區中檔案的尾部,
且指定了另一個工作區中的欄位,則不發生替換。
replace前加上select table2試看看~~ |
|
回頂端 |
|
|
shengyi
註冊時間: 2004-07-14 文章: 35
第 5 樓
|
發表於: 星期五 二月 06, 2009 3:48 pm 文章主題: |
|
|
感謝Terry1211,加上sele真得可以了.
但有另外一個問題, 原本這一段是正常的
tempid = tempid + " " + table1.money
但今天執行的時候會出現"運算子/運算元....不符"訊息,後來是先改成
tempid = tempid + table1.money
發現可以執行,然後再改回tempid = tempid + " " + table1.money 又可以了,tempid是宣告為public charater(7),那裡有問題嗎? |
|
回頂端 |
|
|
區榮熾
註冊時間: 2005-11-14 文章: 191
第 6 樓
|
發表於: 星期五 二月 06, 2009 9:57 pm 文章主題: |
|
|
shengyi 寫到: | 請問一下,下面這段程式最後一個repl有誤嗎 ?
?tempid有顯示資料,但後面repl卻沒寫資料進去?
SELE table2
SCAN
tempdate=table2.date
SELE table1
SCAN for table1.date=tempdate
tempid = tempid + " " + table1.money
ENDSCAN
? tempid
REPL table2.money with tempid
tempid= ""
ENDSCAN |
在 ENDSCAN 之後 要切回到 Table2 ,才能將 tempid Repl 進 table2.money |
|
回頂端 |
|
|
shengyi
註冊時間: 2004-07-14 文章: 35
第 7 樓
|
發表於: 星期六 二月 07, 2009 12:38 am 文章主題: |
|
|
關於"運算子/運算元....不符"問題,我在前面加上tempid = " "就可以了! |
|
回頂端 |
|
|
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 8 樓
|
發表於: 星期六 二月 07, 2009 5:03 pm 文章主題: |
|
|
shengyi 寫到: | 感謝Terry1211,加上sele真得可以了.
但有另外一個問題, 原本這一段是正常的
tempid = tempid + " " + table1.money
但今天執行的時候會出現"運算子/運算元....不符"訊息,後來是先改成
tempid = tempid + table1.money
發現可以執行,然後再改回tempid = tempid + " " + table1.money 又可以了,tempid是宣告為public charater(7),那裡有問題嗎? |
建議不要亂用 PUBLIC,tempid 這個變數應該沒那麼偉大需要在各個程序中到處使用吧!
會出現"運算子/運算元....不符"訊息,是因為在執行 tempid = tempid + " " + table1.money 之前,tempid 已在它處被使用,但它的資料型態又不是字元型態,所以出現"運算子/運算元....不符"訊息是理所當然的事
SELE table2
SCAN
tempdate=table2.date
SELE table1
SCAN for table1.date=tempdate
tempid = tempid + " " + table1.money
ENDSCAN
? tempid
REPL table2.money with tempid
tempid= ""
ENDSCAN
改為
SELECT table2
SCAN
tempid= ""
SELECT table1
SCAN FOR table1.date = table2.date
tempid = tempid + " " + table1.money
ENDSCAN
REPLACE table2.money WITH LTRIM(tempid) && 去掉左邊空白
ENDSCAN _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
Terry1211
註冊時間: 2008-03-13 文章: 63
第 9 樓
|
發表於: 星期六 二月 07, 2009 6:29 pm 文章主題: |
|
|
引言回覆: | 感謝Terry1211,加上sele真得可以了. |
你該了解工作區在VFP裡的觀念
如同朱大所說,Public 不要亂用,
了解一下Public、Private,Local的差別吧 |
|
回頂端 |
|
|
區榮熾
註冊時間: 2005-11-14 文章: 191
第 10 樓
|
發表於: 星期一 二月 09, 2009 11:20 pm 文章主題: TO : 朱育興老師請教我.... |
|
|
(VFP6.0)在不同工作區的資料寫入動作,是一定要切回原工作區,才能寫入嗎?(除了使用INSERT INTO 就不需切回) 對?
如在 Table2 Scan DATA SELECT SCAN Table1 找到了 Table2要的資料 ENDSCAN SELECT Table2(如不切回,則工作區仍在 TABLE1) REPL TABLE2.DATA with TABLE1.DATA ENDSCAN (這樣可以成功的寫入資料?)
我的概念混淆? |
|
回頂端 |
|
|
fschern
註冊時間: 2003-10-12 文章: 34
第 11 樓
|
發表於: 星期二 二月 10, 2009 9:08 am 文章主題: |
|
|
以下摘錄VFP9.0的HELP=>
REPLACE Command (Visual FoxPro)
REPLACE FieldName1 WITH eExpression1 [ADDITIVE]
[, FieldName2 WITH eExpression2 [ADDITIVE]] ... [Scope]
[FOR lExpression1] [WHILE lExpression2] [IN nWorkArea | cTableAlias]
[NOOPTIMIZE]
.........
Note
If the IN clause is omitted, no replacement occurs if the record pointer is at the end of the file in the current work area and you specify a field in another work area. |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 12 樓
|
發表於: 星期二 二月 10, 2009 10:24 am 文章主題: |
|
|
也許這個問題在不同版本或是在其他 xbase 語法的工具上,做法有些差異,
但是最不會出問題的做法,
還是再做任何動作前 select alais ,直接設定工作區,
尤其是工作區傻傻分不清楚的時候
(只是我也還是會用 alias.field ,因為這樣還是比較清楚,我不在乎增加肌鍵炎的機會)
另外,由於foxpro屬於弱型態的工具,
變數的型態可以被自由改變,
所以宣告成public或是指定型態,並不能保證沒事.
還是要注意變數可視性,生命週期等變數管理動作
還是一句,要用心了解你的武器 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
區榮熾
註冊時間: 2005-11-14 文章: 191
第 13 樓
|
發表於: 星期二 二月 10, 2009 11:08 am 文章主題: |
|
|
syntech 寫到: | 也許這個問題在不同版本或是在其他 xbase 語法的工具上,做法有些差異,
但是最不會出問題的做法,
還是再做任何動作前 select alais ,直接設定工作區,
尤其是工作區傻傻分不清楚的時候
(只是我也還是會用 alias.field ,因為這樣還是比較清楚,我不在乎增加肌鍵炎的機會)
另外,由於foxpro屬於弱型態的工具,
變數的型態可以被自由改變,
所以宣告成public或是指定型態,並不能保證沒事.
還是要注意變數可視性,生命週期等變數管理動作
還是一句,要用心了解你的武器 |
根據Syntech兄所述,已瞭解我的概念正確,謝謝!
至於其他版本的優異,我不會去研究.............VFP6.0 已經很好用了 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4212 來自: Taipei,Taiwan
第 14 樓
|
發表於: 星期二 二月 10, 2009 11:22 am 文章主題: |
|
|
區兄,
====
SELECT table2
SCAN
tempid= ""
SELECT table1
SCAN FOR table1.date = table2.date
tempid = tempid + " " + table1.money
ENDSCAN
SELECT TABLE2
REPLACE table2.money WITH LTRIM(tempid) && 去掉左邊空白
ENDSCAN
====
應該問題是出在紅字上吧.
習慣上,我會這樣做沒錯,
可以避免很多問題.
尤其是loop太大的時候.
當然,關鍵還是在 scan....endscan 時,vfp知不知道是對哪個工作區作業,
如果vfp知道,當然就沒問題,
如果不是,當然就是完蛋.
如果使用 do while(!eof()) ...... skip enddo ,不注意工作區切換就一定出問題. XD _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
區榮熾
註冊時間: 2005-11-14 文章: 191
第 15 樓
|
發表於: 星期二 二月 10, 2009 4:58 pm 文章主題: |
|
|
TO Syntech兄:
我在 Shengyi兄說Repl 不進資料時,就請在 ENDSCAN後(也就是說您加上的紅字)
加 SELECT TABLE2後 VFP 才知道 REPL 的標的....
我都是如此更改資的,但看了秀出的程式碼(缺少紅字部份),就對自己的概念沒信心(因學得不深之故),才向朱育興老師請教,現經您的回答,我已清楚了,謝謝您啦! |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|