DataReportの詳細(Section1)に計算結果を表示するには?


Kanon  2004-07-02 03:16:41  No: 84342

初めまして、VB初心者のKanonと申します。

DataReportで、質問させて下さい。
環境はVB6.0で、テーブルはAccess2000です。

出力するテーブルの内容は以下のとおりです。

<テーブルA>
商品ID  商品名        担当者    在庫数  
-------------------------------------
 1      テレビ        山田          5
 2      ビデオ        山田          8
 3      ステレオ      斉藤          2
 4      パソコン      佐藤          3
 5      冷蔵庫        田中          3
 6      洗濯機        田中          5

あるフォームのコマンドボタンのクリックイベントで、以下のような処理を
して、DataReportを出力しています。
  → DataReport名:DataReport_商品

Dim db As ADODB.Connection
Dim rs As ADODB.Recortset
Dim strSQL As String

    Set db = New ADODB.Connection
    db.Open StrDBConnection            '「StrDBConnection」は接続文字列

    strSQL = "SELECT 商品ID,商品名,担当者,在庫数 FROM テーブルA"
    Set rs = New ADODB.Connection
    rs.Open strSQL, db, adOpenStatic

    Set DataReport_商品.DataSource = rs
    With DataReport_商品.Sections("Section1")
        .Controls("Text_商品ID").DataField = "商品ID"
        .Controls("Text_商品名").DataField = "商品名"
        .Controls("Text_担当者").DataField = "担当者"
        .Controls("Text_在庫数").DataField = "在庫数"
    End With

    DataReport_商品.Show 1

    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing

ここからが質問なのですが、
現在のレポートに[ステータス]という項目を追加することになりました。
[ステータス]は、その商品に対して、複雑な計算式で求める値です。
(別関数に、商品ID・在庫数を渡して、求めるのですが・・・)

そこで、コントロールにフィールド名ではなく、計算で求めた値(変数等)を
設定することは可能でしょうか?

例えば、在庫数に「個」を付与するような簡単な計算であれば、レコードセットを

    SELECT 商品ID,商品名,担当者,[在庫数] & "個" AS 在庫 FROM テーブルA

として、在庫を対象のコントロールのDataFieldに指定するといった方法をとるの
ですが、[ステータス]の算出はとても複雑なので、やはりコントロールに変数
の値を設定したいのです(算出用関数も既に作成済ということもありますが)。

もし、方法があるのであれば、どのように設定するのか教えて頂けますでしょうか。
ご存知の方がおりましたら、ぜひ宜しくお願い致します。


魔界の仮面弁士  2004-07-02 06:43:33  No: 84343

SQL側で
  SELECT (在庫数 * 2 + 4) FROM〜
のように計算させておく事になるかと。
(複雑な計算なら、ストアドファンクションを利用する)

また、MSDataShapeをお使いであれば、CALC関数を使うことで、
VBAの関数(FormatやDateAdd等)を問い合わせ中に含める事ができます。

DB側ではなく、VB側で求めなければいけないなら、MSDataShapeの
SHAPE APPEND で空の列を作成しておき、そこに、自分で計算した値を
入れていく事になるかと。


Kanon  2004-07-02 20:03:00  No: 84344

魔界の仮面弁士さん、ありがとうございます。

しかし私はVB初心者のため、魔界の仮面弁士さんが教えてくれた方法を
今ひとつ理解できずに苦しんでいます。

とりあえず、魔界の仮面弁士さんの回答の内容を理解して(勉強して)、
試してみます。

解決できましたら、また追加書き込みしますね。


Kanon  2004-07-03 00:52:19  No: 84345

結局、ステータスのフィールドをテーブルAに追加して、データの投入段階で
算出したステータスを格納することになりました。

なので、DataReportに「Text_ステータス」を追加して、ステータスのフィールド
をDataFieldに割り当てて表示することになりました。

魔界の仮面弁士さん、大変貴重なアドバイスをありがとうございました。
教えて頂いた方法で試してみようと思って、試行錯誤してみたのですが、別の
機会で試してみます。

ホントにありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加