- ベストアンサー
テーブルの結合の仕方 MSAccess97→MSSQLServer2000Dev
- MSAccess97のDBをMSSQLServer2000に移行し、結合方法について質問
- 現在MSAccess97のDBをVB6sp4で操作しており、MSSQLServer2000に移行しようと考えている
- 結合方法を変更すると商品マスタの内容が削除されてしまう問題が発生している
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あっやっぱりADOを使ってレコードセットの行を削除している。 No1の回答したあと気づいたのだけど確認と思って補足していなかったのだけど、レコードセットをそのままグリッドで表示して選択行を削除だと DELETE 売上明細.*,商品マスタ.* FROM 売上明細 LEFT OUTER JOIN 商品マスタ ON 売上明細.商品コード = 商品マスタ.商品コード WHERE 条件 と同じような動きをするので「DELETE 売上明細.*,品目マスタ.* ・・・」という事は売上明細の全カラムを削除しなさいまた、品目マスタの全カラムを削除しなさい。 条件はレコードセットの削除行に依存 となるはずですので両方のテーブルからデータが消えたのでしょう。 レコードセットで削除させず、素直にSQL文で削除した方が良いのではと思うのです。 ADOを使ったプログラムは現状使っていないので詳しくはパス(その手詳しい人に任せます。) >ということはいままでのような動作をすることがおかしかったということみたいですね。プログラムの書き換えを考えたほうがいいみたいですね。 私の過去投稿この回答の二つ下の回答でも普通なら出来るはずの機能が出来なかったのでちょっと工夫しています。(条件にInを使った) 癖が強いようで動作確認をしないと思っていない現象になることがあります。
その他の回答 (1)
- yanmaa
- ベストアンサー率45% (207/457)
DELETE文の記述がないので分かりません。 DELETE 売上明細.*,商品マスタ.* FROM 売上明細 LEFT OUTER JOIN 商品マスタ ON 売上明細.商品コード = 商品マスタ.商品コード WHERE 条件 で削除しているなら両方削除される可能性が大だと思いますが... ところでわざわざ結合(JOIN)して削除しないといけませんか? なお結合して削除なら DELETE 売上明細.* FROM 売上明細 LEFT OUTER JOIN 商品マスタ ON 売上明細.商品コード = 商品マスタ.商品コード WHERE 条件 なら問題ないかも知れません。 簡単に削除するなら DELETE * FROM 売上明細 WHERE 条件 でいいはずですが はっきり言ってAccessのSQLの動作て普通のSQL文となんか違うて言いたくなるような動きをするので困るのです。
補足
早速の回答ありがとうございます。 せっかく回答いただきましたのに説明がたりませんで申し訳ありませんでした。 VB上のデータグリッドに表示して、データグリッドをクリックしてレコードを選択、削除ボタンで削除というふうに使っております。 Private Sub Form_Load() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim strSQL as String strSQL="SELECT 売上明細.*,商品マスタ.* " _ & "FROM 売上明細 LEFT OUTER JOIN 商品マスタ " _ & "ON 売上明細.商品コード = 商品マスタ.商品コード" Set rs = New ADODB.Recordset rs.Open strSQL , cn , adOpenStatic , adLockOptimistic DataGrid1.DataSource=rs End Sub Private Sub 削除ボタン_Click()'削除ボタンを押したときの処理 rs.Delete rs.MoveNext End Sub >はっきり言ってAccessのSQLの動作て普通のSQL文となんか違うて言いたくなるような動きをするので困るのです。 ということはいままでのような動作をすることがおかしかったということみたいですね。プログラムの書き換えを考えたほうがいいみたいですね。
お礼
結合の仕方で解決できるような問題ではないようなので、素直にプログラムの書き換えしていこうと思います。 回答ありがとうございました。