- - PR -
FormViewを使った同時に2つのテーブル更新
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-17 11:44
IDE:VS2008 ASP2.0 VB
DB:SQL Server2000 長いですが、よろしくお願いします。 マスタメンテナンスを行うWebページを作成しています。 このマスタは2つのテーブル(メインとサブ)に分かれています。 ページ表示時にDatalist(SQLDataSourceA)を使って一覧的なデータを表示させ、 修正するレコードを選択してメインテーブルはFormView1(SQLDatasource1)、 サブテーブルはFormView2(SQLDatasource2)に表示させメインテーブルの FormView1の更新ボタンで同時にサブテーブルも更新させたいと思っています。 またメイン、サブの両テーブルにはtimestamp型のフィールドを使い同時実行制御 を行いたいと考えています。 参考ページ:http://www.atmarkit.co.jp/fdotnet/vs2005db/vs2005db_12/vs2005db_12_01.html DataList・・・あるマスタのメインとサブを外部結合させ、表示。 FromView1・・・メインテーブル DataKeyNames=機種NO(主key)、updated(timestamp型のフィールド)。 FromView2・・・サブテーブル DataKeyNames=サブID(主key)、機種NO(外部key)、updated(timestamp型のフィールド)。 実現方法として、FromView1の更新処理が正常終了すれば、FormView2の SQLDataSource2のUpdate()を実行させてみたのですが、FormView2のtimestamp型の フィールド値のoldVlueとの比較(SQLDataSource2のUpdate文)で 「varchar型からtimestamp型へ暗黙変換できません。CONVERT関数を使用して〜〜」 とエラーが発生したので CNVERT関数で[UPDATE XXX SET XXX=@XXX,YYY=@YYY WHERE 機種NO=@original_機種NO AND updated=@original_updated] としたのですが、エラーは発生しなくなったのですが、SQLDataSource2_Updatedの更新行数(e.AffectedRows)が0で更新できていません。 そこでFormView1の更新ボタンをFormView2に移動して同じことをしても今度はSQLDataSource1_Updatedで同じエラーが発生し、同じ対応をしてもSQLDataSource1_Updatedの更新行数(e.AffectedRows)が0で更新できていません。 つまりFormViewの更新ボタンからでないとtimestamp型のフィールド値oldVlueとの比較がうまくできないようです。 対策としてFormView1の更新ボタン処理完了時に、SQLDataSource2_Updateではなく、FormView2に見えない更新ボタン を用意してそのボタンのクリックイベントをコードで実行させるにはどのようにすれば良いでしょうか。 もしくは他に良い方法、案があればご教授お願いします。 | ||||||||
|
投稿日時: 2008-10-01 23:31
おかしくないですか?エラーメッセージには、「varchar型からtimestamp型へ暗黙変換できません。」と、書かれていたのですよね?でも、timestamp 型を指定しているはずなのですよね?だったら、CONVERT するのではなく、設定(パラメータへの追加の時の型指定が怪しい)を見直すべきではないですか? それと、「CNVERT関数で...とした」と書かれていますが、「UPDATE XXX SET XXX=@XXX,YYY=@YYY WHERE 機種NO=@original_機種NO AND updated=@original_updated」には 「CNVERT関数」は出てきません。どこで、どのように指定したのでしょう?
現象が、正しく把握できていないように思います。 ここに書かれているものではわからないことを列挙します。 1.それぞれのデータを引っ張ってきた SELECT 文 2.それぞれのデータを更新するための UPDATE 文 3.それぞれの UPDATE 文に指定したパラメータの詳細 FormView1 の TIMESTAMP を、FormView2 の TIMESTAMP とマッチさせようとしているのではないかと思います。あるいは、同じテーブルの同じ列から、2つの FormView に持ってきているのではないかと思います。そうすると、SELECT したときの値とは変わっているはずなので、後から更新しようとした方が更新できないのは、「コードに書かれているとおり」となります。 |
1