- PR -

同じテーブルを2つ使う方法

投稿者投稿内容
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2004-09-10 10:41
ということは、SQLが直接の原因ではないのですね。

DataSetなど用いているのでしたら、
それを作り直してみては如何でしょうか?
_________________
まゆりん @ わんくま同盟
Blog る。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-09-10 10:57
デバッグ手順

1.障害発生の手順及び状況を記録。
2.障害発生の手順を再実行し同一状況になるかエラーの再現性を確認。
3.エラーの発生箇所を特定する。
4.エラーの発生理由と特定する。
5.エラーの発生理由を排除する。
6.障害発生の手順でエラーが発生しないか検証

これが基本概略手順です。今回は、運良く再現性がある様なので、
引き続き発生箇所を特定し、次に発生理由を特定する必要があるのですが、
何故、発生箇所と発生理由を別けて調査するのかと申しますと、

例えばもし、noriさんの作成されたプログラムにて

1.提示のSQL文を発行
2.上記1の結果を別テーブルにInsert

と言う処理構成になっている場合、2番にてエラーになっている可能性があります。

では2番が間違っているのか?と言えばそうでは無く、
1番の処理にて2番の書込先テーブルの制約に違反するデータが取得出来てしまう
仕様の漏れまたは、考慮不足が存在するかもしれないのです。

実際そうならば、発生箇所が2番、発生理由が1番となります。

はたまた、存在する筈が無いデータ構成のレコードが誰かのテストデータにより
取得してエラーになる事も開発環境ではある事です。

その場合の第1発生理由が、誰かが作成した不整合なテストデータとなります。

技術知識も大切ですが、一つ一つの仕事手順を覚える事方がはるかに大切です。
頑張って下さい。

# 日本語修正

[ メッセージ編集済み 編集者: はにまる 編集日時 2004-09-10 11:04 ]
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-10 11:26
皆さん、ありがとうございます!

皆さんのアドバイスを元に、頑張ってみます☆
また連絡します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-09-10 22:13
 過去の投稿を見ても、アダプタウイザードで生成するとエラーがでる確率が高いようですね。ところが、私は一度も見たことがないのは何でだろう?DELETE文やUPDATE文を作らないようにオプションを変更しているからかな?
nori
ベテラン
会議室デビュー日: 2004/09/02
投稿数: 56
投稿日時: 2004-09-13 15:36
Jitta様、ありがとうございます。
自分も同じように!と思ってやってみたのですが、
オプションを選択することができず、結果は同じでした;;

もしやVS.NETのインストールに問題があるのでしょうか、、、。

皆さんのご指摘のように、原因はSQL文ではないようです。

'クラスA
Public Class TABLE_A

Private conn As OleDb.OleDbConnection
Private adp As OleDb.OleDbDataAdapter
Private cmd As OleDb.OleDbCommand
Private ds As DataSet

'Aテーブルから条件を指定してレコードを抽出し、
'対象レコードがあるかをチェック
Public Function A_Get_Record(ByVal shain_no As String) As String

ds= New DataSet()
・・・・・・・・・・・・・・・・・・・・・・・・・

sql = "SELECT TABLE_A.SINSEI_YMD, " & _
・・・・・・・・・・・・・・・・・・・・・・・・・
"WHERE TABLE_A.SHAIN_NO = '" & shain_no & "'"
adp.Fill(out_ds, "TABLE_A")

End Function

'Aテーブルから抽出したレコードを返す
Public Function Ds_Fill(ByVal out_ds) As DataSet
ds.Clear()
adp.Fill(ds, "TABLE_A")
End Function

'A_Get_Recordを実行した後、Ds_Fillを実行して
'DataGridに表示する。
Private Sub Page_Load( )
Dim Table_a As New TABLE_A()
rc = Table_a.A_Get_Record(shain_no)

If rc = True Then
Table_a.Ds_Fill(DataSet1)
With DataGrid1
.DataSource = DataSet1.Tables()
.DataBind()
End With
End If

End Sub

ロジックは以下のようになっております。

どんなことでも結構です。
アドバイス、お願いいたします。

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