Tips

SQLクエリを受け取ったリストボックスの列

日付2009/01/01
ID09-005
バージョン11
プラットフォームWin & Mac

SQLクエリの結果をリストボックスに取り込む場合、そのリストボックスオブジェクトのプロパティリストであらかじめじゅうぶんな数の列が設定してあれば、そのリストボックスからデータを取り出すこともできます。

注記:じゅうぶんな数の列が設定されていない場合、4Dは動的に新しい列をリストボックスに追加します。4Dが自動的に追加するそのような列に対してこの手法は使用できません。そのようなリストボックスのデータは閲覧専用であり、アクセスはできません。

以下は、リストボックスの内容をタブ区切りファイルに書き出す例題です。

C_LONGINT($Ndx;$Cdx;$SOA;$Cols;$Type_L)
C_POINTER($Col_P)
C_TIME($Ref_H)

ARRAY TEXT($ColNames_aT;0)
ARRAY TEXT($HeaderNames_aT;0)
ARRAY POINTER($ColVars_aP;0)
ARRAY POINTER($HeaderVars_aP;0)
ARRAY BOOLEAN($Visible_aB;0)
ARRAY POINTER($Styles_aP;0)

GET LISTBOX ARRAYS(SQLResult_LB;$ColNames_aT;$HeaderNames_aT;$ColVars_aP; $HeaderVars_aP;$Visible_aB;$Styles_aP)
$SOA:=Get number of listbox rows(SQLResult_LB)
$Cols:=Count in array($Visible_aB;True)
If (($Cols>0) & ($SOA>0))
 $Ref_H:=Create document("")
 If (OK=1)

  For ($Ndx;1;$SOA)
   For ($Cdx;1;$Cols)
    $Col_P:=Get pointer($ColNames_aT{$Cdx})
    $Type_L:=Type($Col_P->)

    Case of
     : (($Type_L=Text array ) | ($Type_L=String array ))
       SEND PACKET($Ref_H;$Col_P->{$Ndx})
     : ($Type_L=Real array )
       SEND PACKET($Ref_H;String($$Col_P->{$$Ndx};"###,###,##0.000"))
     : (($Type_L=LongInt array ) | ($$Type_L=Integer array ))
       SEND PACKET($Ref_H;String($$Col_P->{$$Ndx};"###,###,##0"))
     : ($Type_L=Date array )
       SEND PACKET($Ref_H;String($$Col_P->{$$Ndx};Internal date short special ))
     : ($Type_L=Boolean array )
       SEND PACKET($Ref_H;String($$Col_P->{$$Ndx};"True;False"))
     : ($Type_L=Pointer array )

     : ($Type_L=Picture array )

     Else 

    End case 

    If ($Cdx<$Cols)
     SEND PACKET($Ref_H;"\t")
    Else 
     Case of 
       : (MyOS=Mac OS )
         SEND PACKET($Ref_H;"\r")
       Else 
         SEND PACKET($Ref_H;"\r\n")
     End case 
    End if 
   End for 
  End for 

  CLOSE DOCUMENT($Ref_H)
 End if 
End if