初めまして、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に指定するといった方法をとるの
ですが、[ステータス]の算出はとても複雑なので、やはりコントロールに変数
の値を設定したいのです(算出用関数も既に作成済ということもありますが)。
もし、方法があるのであれば、どのように設定するのか教えて頂けますでしょうか。
ご存知の方がおりましたら、ぜひ宜しくお願い致します。
SQL側で
SELECT (在庫数 * 2 + 4) FROM〜
のように計算させておく事になるかと。
(複雑な計算なら、ストアドファンクションを利用する)
また、MSDataShapeをお使いであれば、CALC関数を使うことで、
VBAの関数(FormatやDateAdd等)を問い合わせ中に含める事ができます。
DB側ではなく、VB側で求めなければいけないなら、MSDataShapeの
SHAPE APPEND で空の列を作成しておき、そこに、自分で計算した値を
入れていく事になるかと。
魔界の仮面弁士さん、ありがとうございます。
しかし私はVB初心者のため、魔界の仮面弁士さんが教えてくれた方法を
今ひとつ理解できずに苦しんでいます。
とりあえず、魔界の仮面弁士さんの回答の内容を理解して(勉強して)、
試してみます。
解決できましたら、また追加書き込みしますね。
結局、ステータスのフィールドをテーブルAに追加して、データの投入段階で
算出したステータスを格納することになりました。
なので、DataReportに「Text_ステータス」を追加して、ステータスのフィールド
をDataFieldに割り当てて表示することになりました。
魔界の仮面弁士さん、大変貴重なアドバイスをありがとうございました。
教えて頂いた方法で試してみようと思って、試行錯誤してみたのですが、別の
機会で試してみます。
ホントにありがとうございました。
ツイート | ![]() |