動的に1つのtemp-tableを作成しました。完全なテーブルを.csvファイルに書き出します。実行する方法?.csvファイルにTempテーブルの値を書き込む
DEF VAR ttH AS HANDLE NO-UNDO.
ttH:CREATE-LIKE(hBuffer).
ttH:Temp-table-prepare("tmytable")
動的に1つのtemp-tableを作成しました。完全なテーブルを.csvファイルに書き出します。実行する方法?.csvファイルにTempテーブルの値を書き込む
DEF VAR ttH AS HANDLE NO-UNDO.
ttH:CREATE-LIKE(hBuffer).
ttH:Temp-table-prepare("tmytable")
動的にテンポラリテーブルを作成したため、少なくとも私の知る限り、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.
大量のテーブルエントリでは機能しないことに注意してください。
エクステント処理構文については、Progress KB P4410を参照してください。 QUERY-PREPAREの前にクエリにFORWARD-ONLY = TRUEを追加して、パフォーマンスを向上させることもできます。
返信ありがとうございます。そのリンクは他の疑問にも役立ちます... –
エクステントを持つフィールドでは、これを考慮する必要があるため、この機能は動作しません。 –
しかし、うまくいけば、フィールドを最初に配列として定義するほど馬鹿だとは思わない;) –
この問題では必ずしも選択肢を得ることはできない。 –