- PR -

1つの DataSet を3つのテーブルで使えますか

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 13:04
テッテさん、本当に丁寧なご指導ありがとうございました。
(1)及び(2)は経験があるのでよく理解できました。ただ(3)の部分で


引用:

(3) サーバ エクスプローラからドラッグしたのなら、
  画面の Form_Load に、自動生成された以下のようなコードがあるはずです。
  Me.〜TableAdapter.Fill(Me.〜DataSet.販売テーブル)
  これを、以下のように書き換えます。2007 の部分には年度を指定してください。
  Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, 2007)


この部分の引数(2007)は変数に置換え次のようにしても動作するのでしょうか
Dim yy As String = "2007"
Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, yy)
もし変数が使えない場合は年度が更新するたびにソースを書き換える必要が出てしまうと
考えて本年分をゼロ、前年分を1、と固定で設定しておけばと考えました。


引用:

このようにして、TableAdapter のクエリに引数を指定することができますので、
これを使ったらどうかというお話でした。


Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, 2007)のように引数(2007)を
使えることが知りませんでしたので下のようにIf文を使おうと思っていました
If 選択年度=本年 Then
Me.〜TableAdapter.FillBy本年(Me.〜DataSet.販売テーブル)
ElseIf 選択年度=前年 Then
Me.〜TableAdapter.FillBy前年(Me.〜DataSet.販売テーブル)
End If


これで早速変更にかかれます。本当に皆様からの御仁切な指導をいただき感謝しています。ありがとうございました。







_________________


[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 13:07 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-04-11 13:18
読み間違えました。

削除致します。

[ メッセージ編集済み 編集者: さかもと 編集日時 2008-04-11 13:20 ]
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-11 13:35
引用:

One.netさんの書き込み (2008-04-11 13:04) より:
この部分の引数(2007)は変数に置換え次のようにしても動作するのでしょうか
Dim yy As String = "2007"
Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, yy)
もし変数が使えない場合は年度が更新するたびにソースを書き換える必要が出てしまうと
考えて本年分をゼロ、前年分を1、と固定で設定しておけばと考えました。


これは TableAdapter 以前の問題だと思いますが、
変数に入れてもリテラルで指定しても意味は同じです。
これは特殊な構文でもなんでもなく、
デザイナが自動生成したメソッドを呼び出しているだけです。

ただ、Access 側で年度列が文字列型になっている場合は、
これでOKだと思いますが、年度は普通は整数型で定義すべきだと思います。

先に説明した手順で FillBy年度 を追加したとき、
WHERE 句内で指定した ? は、年度と「=」で結んでいますから、
データセットの定義で年度列が Integer 型になっていれば、

FillBy年度(販売テーブル, Integer)

のような定義のメソッドを、デザイナが自動生成します。
これは、以下のように変数で呼び出すことも、もちろん可能です。

コード:
Dim yy As Integer = 2007
Me.〜TableAdapter.FillBy年度(Me.〜DataSet.販売テーブル, yy)

One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 21:06
テッテさん、低レベルの質問までお答えいただいてありがとうございました。
確かAccessのクエリでは引数にに変数が使えなかったと記憶していたものですからお尋ねいたしました。
年度列が Integer 型であれば引数もInteger 型で、変数でもOKとの事、了解いたしました。
これで、年度切替に対するシステム変更の仕様も固まり、明日から変更作業にかかろうと考えています。
テッテさん、さかもとさん、ぴんふさん、よこけんさん、indigo-xさん、本当に皆様からのご指導で
年度変更に対する仕様変更も乗り越えられそうです。ありがとうございました。



[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 21:10 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-11 21:06
ダブルって投稿しましたので削除します。

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 21:07 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-11 21:08 ]
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-12 12:26
スレ主のOne.netです。
テッテさん、さかもとさん、ぴんふさん、よこけんさん、indigo-xさん、皆様からのご指導をいただき、何とか
年度切替を行いました。以下その結果の報告と警告発生に対する対応について伺いたく投稿しました。

本システムにはPublic変数として決算期の期数をマスターメニュー立上げ時に設定されていて、この数を
そのまま使用し列(フィールド)名を期数といたしました。ご指導いただいたとおり、まずSQLステートメントに
”WHERE 期数 = ?”を追加し、メソッド名を”FillBy期”としました。続いて販売テーブルのRoad時にFillして
いるフォームのFill文を次のように変更しました。
Me.販売TableAdapter.FillBy期(Me.adbDataSet.n00販売伝票, 期数)

販売TableをFillしているフォームは13枚もあり、変更が大変であったことと、販売TableAdapter.Update
の部分で期数列へ期数の設定を漏れなく行うことが意外と手間取りました。
デバックしても問題なく動作しました。パフォーマンスの劣化についてもまだ測定していませんが、全く
変化なく動作いたします。

ただ13枚のうち1枚のフォームだけが (Me.adbDataSet.n00販売伝票, 期数)の期数部分に下線が引かれ
下記のようなエラーを発生します。実行に差し支えないようで、正常に動作していますが、どのような意味で
どのように対処すればいいのか教えていただければ幸いです。
引用:

型 'System.Windows.Forms.DataGridViewTextBoxColumn' の値を 'System.Nullable(Of Short)' に変換できません。




自己回答:上記質問を投稿してからエラー文を何回も読み直しその原因を考えていました。
「DataGridViewTextBoxColumn' の値を」の内容からこのフォームに表示しているDataGridViewの
列名(期数)の値を変換できないとの事から、列名とPublic変数名が同じ事から発生している
エラーではないかと考え、テーブルの列名を”期”と変更しました。これによりエラーは解決しました。



[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-12 13:35 ]

スキルアップ/キャリアアップ(JOB@IT)