2012-12-12 66 views
1

我有一個分配循環通過單個列表「合同」,併爲每個循環使用合同中的值調用程序「MyProgram」。最後將結果呈現在所有循環的表格中。FoxPro 9.0如何通過程序循環

Indata: 
================= 
Contracts.dbf 
================= 
P01 
C04 
CH45 
T31 

Result: 
=========================== 
ResultFile.dbf 
=========================== 
P01 C04 CH45  T31 
--------------------------- 
100 11 302  -872 
9.63 0  45.2  342 

每個合同中的值在MyProgram,在合同取作爲參數,併產生具有相同契約作爲標題的結果的一列被生成。因此,使用MyProgram合同P01給

====== 
P01 
------ 
100 
9.63 

到目前爲止,我的程序看起來像

SELECT distinct contract FROM bs_case 
COPY TO contracts.dbf 
    NbContracts =RECCOUNT() 
    CLOSE TABLES 

counter = 1 

DO WHILE counter < NbContracts 
    && calling MyProgram() 
    counter = counter + 1 
ENDDO 

我一直無法從「Contracts.dbf」提取合同名稱,真的不知道該怎麼以創建最終的結果文件「ResultFile.dbf」

回答

0

試試這個,這是假,但應該工作:

****** 
SELECT 0 
CREATE CURSOR MyResults (columnName C(10), value1 I, value2 N(8,2)) &&Result cursor 
SELECT contracts 
LOCATE &&Go to top of file. 
SCAN  &&start loop 
    =MyProgram(FIELD(1), contracts.ColumnName) &&Pass name of column and it's value 
ENDSCAN 

SELECT MyResults &&View results. 
BROWSE LAST NORMAL 

PROCEDURE MyProgram(fieldname, value1) 
    ***Do stuff to 
    ***generate calculatedvalue1 and calculatedvalue2 

    ***Insert name of column, value1 and value2 
    INSERT INTO MyResults (columnName, value1, value2) ; 
     VALUES(fieldname, calculatedvalue1, calculatedvalue2) 
END PROC 
+0

其工作很棒!有沒有辦法讓MyResults具有一般的行數? – Orongo

+0

在foxpro中,可以用?RECNO()檢索每一行的編號。所以你可以這樣做:SELECT RECNO()作爲rownum,* FROM MyResults INTO CURSOR MyResults。或者在定義光標時創建一個AUTOINC列。 CREATE CURSOR MyResults(myField i AUTOINC NEXTVALUE 1 STEP 1,myfield2 C(10)等)。如果這有幫助,一定要標記爲答案。 – Jerry

+0

嗨,我的回覆有些倉促。在第一次循環之後,我的程序不會拿起C04行的第二個值。 Field()給出了字段名稱,而我只有一個字段契約。如何通過迭代獲得每行的值?使用RECNO()給出行號,但我想要的行的內容,而不是行號 – Orongo