2012-02-20 90 views
0

我們已經動態創建了一個臨時表。我們希望將完整的表格放入.csv文件中。怎麼做?將臨時表值寫入.csv文件

DEF VAR ttH AS HANDLE NO-UNDO. 
ttH:CREATE-LIKE(hBuffer). 
ttH:Temp-table-prepare("tmytable") 

回答

1

因爲你動態創建您的臨時表,則不能使用EXPORT語句(至少據我所知)。你可以做的是首先動態輸出字段名,然後是表的字段值。像這樣:

DEFINE VARIABLE hQuery AS HANDLE NO-UNDO. 
DEFINE VARIABLE ttH  AS HANDLE NO-UNDO. 

/* Define a new output stream */ 
DEFINE STREAM s1. 
OUTPUT stream s1 to "myCSV.csv". 

/* Create a query for the contents of your temp-table */ 
CREATE QUERY hQuery. 
/* Important: we need to use the temp-tables default buffer handle, 
/* not the hBuffer handle to the original table! */ 
hQuery:SET-BUFFERS (ttH:DEFAULT-BUFFER-HANDLE). 
/* Use the name you created before for the FOR EACH clause */ 
hQuery:QUERY-PREPARE("FOR EACH tmytable"). 
hQuery:QUERY-OPEN(). 
hQuery:GET-FIRST(). 

/* Write out the names of the fields as header in the first row */ 
DEFINE VARIABLE i AS INTEGER NO-UNDO. 
DO i = 1 TO ttH:DEFAULT-BUFFER-HANDLE:NUM-FIELDS: 
    PUT STREAM s1 UNFORMATTED ttH:DEFAULT-BUFFER-HANDLE:buffer-field(i):name + ",". 
END. 
PUT STREAM s1 UNFORMATTED SKIP. 

/* Walk through the query and output each field seperately. */ 
REPEAT: 
    hQuery:GET-NEXT(). 
    IF hQuery:QUERY-OFF-END THEN LEAVE. 

    DO i = 1 TO ttH:DEFAULT-BUFFER-HANDLE:NUM-FIELDS: 
     PUT STREAM s1 UNFORMATTED ttH:DEFAULT-BUFFER-HANDLE:buffer-field(i):buffer-value ",". 
    END. 
    PUT STREAM s1 UNFORMATTED SKIP. 
END. 

OUTPUT stream s1 close. 

請注意,這可能無法執行大量的表條目!

+0

這不適用於具有範圍的字段 - 因爲您需要執行一些將其考慮在內的操作。 – 2012-02-20 16:40:15

+0

但是,希望你一直沒有如此愚蠢的定義一個領域作爲一個陣列首先;) – 2012-02-20 21:10:46

+0

一個並不總是在這件事上得到選擇。 – 2012-02-20 22:02:36

1

有關範圍處理語法,請參閱Progress KB P4410。您可能還想在QUERY-PREPARE之前向查詢添加FORWARD-ONLY = TRUE以提高性能。

+0

感謝您的回覆。該鏈接也有助於其他一些疑慮... – 2012-02-21 12:30:53