過去ログ

                                Page      89
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼ADOをコードしてUpdateとDelete  とも 02/11/2(土) 10:30
   ┗Re:ADOをコードしてUpdateとDelete  孫悟空 02/11/3(日) 17:18
      ┗Re:ADOをコードしてUpdateとDelete  とも 02/11/4(月) 5:53

 ───────────────────────────────────────
 ■題名 : ADOをコードしてUpdateとDelete
 ■名前 : とも
 ■日付 : 02/11/2(土) 10:30
 -------------------------------------------------------------------------
   今、ADOをコードで設定してプログラムを作成しているのですが、どうしても、UpdateとDeleteをしようとすると、「キーフィールドがNull」というエラーがでます。コードも何度もチェックしましたし、データベース(アクセス2000)のほうもフィールドをチェックしたりしましたが、問題はないのです。一体何が原因で、どのようになおせばいいのでしょうか?

まずフォームロードイベントで以下のように設定(テキストボックス以外にコンボボックスにデータをロードしてます)

Dim strSQL As String

Set conVideo = New ADODB.Connection
Set rsVideo = New ADODB.Recordset

strSQL = "SELECT Studio.[Studio Name], Video.[Movie Number]," & _
     "Video.Title, Video.Category, Video.Length " & _
     "FROM Studio INNER JOIN Video ON Studio.[Studio ID] = Video.[Studio ID]"

With conVideo
   .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Persist Security Info=False;Data Source = " & App.Path & _
        "VBVideo2000.mdb;Mode = readwrite"
  
  .Open
End With
With rsVideo
   .CursorLocation = adUseClient
   .Open strSQL, conVideo, adOpenDynamic, adLockOptimistic, adCmdText
End With

Call AssignData
With rsVideo
 Do Until .EOF
  If ![Movie Number] <> "" Then
  cboNum.AddItem ![Movie Number]
  cboTitle.AddItem !Title
  cboStudio.AddItem ![Studio Name]
  cboCategory.AddItem !Category
  End If
  .MoveNext
Loop
.MoveFirst
End With

そしてAddコマンドボタンで
rsVideo.AddNew

として、Saveコマンドボタンで
rsVideo.Update

としています。Deleteも同様です。
考えられる、原因はなんでしょうか?

 ───────────────────────────────────────  ■題名 : Re:ADOをコードしてUpdateとDelete  ■名前 : 孫悟空  ■日付 : 02/11/3(日) 17:18  -------------------------------------------------------------------------
   ▼とも さんこんにちは、
>一体何が原因で、
> strSQL = "SELECT Studio.[Studio Name], Video.[Movie Number]," & _
>     "Video.Title, Video.Category, Video.Length " & _
>     "FROM Studio INNER JOIN Video ON Studio.[Studio ID] = Video.[Studio ID]"
>そしてAddコマンドボタンで
>rsb.AddNew

エラーメッセージの直接の原因は、よくわかりませんが、上記SQLは、複数のテーブルを参照していますので、もし レコードセット rsb と rsVideo が同じものなら編集は直接編集は出来ないのではないでしょうか?

>どのようになおせばいいのでしょうか?

各々のテーブルを追加、更新、削除するようにすればいかがでしょう?
例えば、テーブルVideoのレコードセットreVと、テーブルStudioのレコードセットrsSを作成して各々更新するとか。
外れでしたらごめんなさい。

 ───────────────────────────────────────  ■題名 : Re:ADOをコードしてUpdateとDelete  ■名前 : とも  ■日付 : 02/11/4(月) 5:53  -------------------------------------------------------------------------
   ていねいにお返事ありがとうございます。わたしの掲示板へのミススペルで、レコードセットはrsVideoしかないです。
Addは
rsVideo.Addnewとしています。

互いのテーブルのキーはVideoテーブルはMovie NumberでStudioテーブルはStudioID。
Movie Numberのためのテキストボックスにデータを入力してUPdateボタン
をクリックしているにも限らず、エラーがでてしまいます。Breakして、チェックしてみると他のフィールドにはデータがはいっているのに、Movie Numberフィールドにだけ値がはいっていません。
これはVBよりもアクセス側に問題があるのでしょうか?

>>一体何が原因で、
>> strSQL = "SELECT Studio.[Studio Name], Video.[Movie Number]," & _
>>     "Video.Title, Video.Category, Video.Length " & _
>>     "FROM Studio INNER JOIN Video ON Studio.[Studio ID] = Video.[Studio ID]"
>>そしてAddコマンドボタンで
>>rsb.AddNew
>
>エラーメッセージの直接の原因は、よくわかりませんが、上記SQLは、複数のテーブルを参照していますので、もし レコードセット rsb と rsVideo が同じものなら編集は直接編集は出来ないのではないでしょうか?
>
>>どのようになおせばいいのでしょうか?
>
>各々のテーブルを追加、更新、削除するようにすればいかがでしょう?
>例えば、テーブルVideoのレコードセットreVと、テーブルStudioのレコードセットrsSを作成して各々更新するとか。
>外れでしたらごめんなさい。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 89