• ベストアンサー

Updateできない・・・

初心者です。お願いします。 Access2002で人事考課DBを作成中です。 ADOのUpdate処理がうまくいかず困っています。 作業の流れとしては以下のとおりです。 1)職員テーブルを元にしたメニューフォーム(F_人事管理DB)を開く。2)対象となる職員を呼び出す。3)メニューから考課結果入力フォーム(F_情意考課)を開く。 4)考課結果を入力する。5)情意考課テーブル(T_情意考課)に結果が蓄積される。 情意考課テーブル(T_情意考課)と中心の職員テーブル(T_人事考課DB)は職員番号をキーにして繋がり、考課結果入力フォーム(F_情意考課)は情意考課テーブルを元にしています。 考課結果を入力した後「更新後処理」で次のようなプロシージャによって、結果を情意考課テーブルに追加させようと考えました。 Private Sub Form_AfterUpdate() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim bango As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T_情意考課", cn, adOpenKeyset, adLockOptimistic bango = Forms!F_情意考課!テキスト63 rs.Update "職員番号", bango rs.Update "更新日付", Date rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub テキスト63のコントロールボックスには「=Forms!F_人事管理DB!職員番号」という式で職員番号が代入されます。 変数bangoにはデータは代入されているようですが、情意考課テーブルの更新ができずエラーになってしまいます。 どこがおかしいでしょうか? 職員番号は「K000*」という連番で型はテキストです。 この作業中は、F_人事管理DB、F_情意考課のふたつのフォームが開いています。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>rs.Update "職員番号", bango >rs.Update "更新日付", Date いきなりUpdateしてますけど、どこにも更新対象のレコードを指定している個所が無いんですけどいいんですか? >情意考課テーブルの更新ができずエラーになってしまいます。 どんなエラーですか?

jetstream
質問者

お礼

ご回答ありがとうございます。 変数bangoをやめて、次のように直に「職員番号」にテキスト63に引っ張ってきた値を代入したらうまくいきました。 rs.Update "職員番号", Forms!F_情意考課!テキスト63 私の質問の仕方が悪かったみたいですみません。 また宜しくお願い致します。

その他の回答 (1)

  • ykmtk
  • ベストアンサー率26% (6/23)
回答No.2

テーブルにデータを追加させたいということですよね? 今のままだと、現在のレコードを書き換えることになってしまっています。 追加させるのであれば、UpdateではなくAddNewを使います。 もしはずしていたらすみません。 詳しい内容がわからないので、新規に追加させたいのかと判断して回答してみました。

関連するQ&A

  • 【ADO】「Execute」を使うときは「Update」は不要?

    Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic cn.Execute "DELETE FROM テーブル1" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub を実行したとき テーブル1にデータがあるときはエラーにはならないのですが 何もデータがないときは「rs.Update」でエラーになります。 なので「Update」は消して実行していますが 「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか? よろしくお願いします。

  • テーブルのデータをフォームに表示したい。

    テーブルのデータをフォームに表示したい。 Access2003で顧客管理のシステムを作成しています、 下記コードで検索フォームより顧客フォームを開き顧客テーブルのデータを渡していますが、 現在では顧客データを渡したいフォームが増えた為、各フォームにtxt顧客コードを設けて 標準モジュールで行った方が良いかと思うのですが、どの様にしたら良いか解りません。 良い方法がありましたらご教授よろしくお願いいたします。 Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "T顧客", cn, adOpenKeyset, adLockOptimistic rs.Find "顧客コード=" & Forms!F顧客検索!S顧客.Form.顧客コード Forms!F顧客!txt顧客コード = rs!顧客コード Forms!F顧客!cmb顧客区分 = rs!顧客区分 Forms!F顧客!txt顧客名 = rs!顧客名 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing

  • 1つのフォームから複数のテーブルにレコード追加をやってみました。

    1つのフォームから複数のテーブルにレコード追加をやってみました。 そこで疑問があるのですが、Connectionは1つでRecordsetは追加するテーブルの数だけOpenが必要なのですか? 一応下記のコードで2つのテーブルにレコードを追加出来たのですが、素人の推測でやってみたので間違っている所がないか見て頂きたいです。 返答よろしくお願いします。 Dim cn As ADODB.Connection Dim rs1 As New ADODB.Recordset Dim rs2 As New ADODB.Recordset Set cn = CurrentProject.Connection Set rs1 = New ADODB.Recordset Set rs2 = New ADODB.Recordset Beep If MsgBox(Format(txt車両コード, "000000") & " " & txt登録番号 & Chr(13) & "を登録しますか?", 33, "確認! 登録") = vbOK Then rs1.Open "T車検証", cn, adOpenKeyset, adLockPessimistic rs2.Open "T所有者", cn, adOpenKeyset, adLockPessimistic rs1.AddNew rs1!車両コード = Me.txt車両コード rs1!登録番号 = Me.txt登録番号 rs1!交付年月日 = Me.txt交付年月日 rs1!初度年月 = Me.txt初度年月 rs1.Update rs2.AddNew rs2!車両コード = Me.txt車両コード rs2!所有者 = Me.txt所有者 rs2.Update rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing cn.Close: Set cn = Nothing MsgBox Format(txt車両コード, "000000") & " " & txt登録番号 & Chr(13) & "を登録しました。", 64, "確認! 登録" End If End Sub

  • rs.MoveFirst

    アクセスvbaです。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim i As Long Set cn = CurrentProject.Connection rs.Open "Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.MoveFirst '←これいらない? For i = 1 To rs.RecordCount rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようなコードの場合 rs.MoveFirst はあってもなくても変わらないですか?

  • SQL文の最後に「;」はいらないのでしょうか?

    VBAのADOについて質問です。 SQL文の最後には「;」を付けなくちゃいけないものだと思っているのですが ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Private Sub test_Click() Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset SQL = "SELECT * FROM Tテーブル" ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ でも問題なくコードが動きました。 SQL文の最後に「;」はいらないのでしょうか? ちなみに SQL = "SELECT * FROM Tテーブル;" でもエラーになりませんでした。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

  • 同じテーブルのフィールドを使ったUPDATEしたい

    こんにちは。 いつも参考にさせていただいています。 本日は投稿側です。 やりたいことは「T_ALL」テーブルの加工した「受付番号」フィールドを 「お客様番号」フィールドに書き込むことです。 ACCESS VBAで以下のコードを書き、実行すると[受付番号]のとこで 「定義されていない」とエラーになります。 思考錯誤しましたが解決できず困っています。 ご教示ください。 よろしくお願いします。 ************************************************************************* Dim db As ADODB.Connection Dim rs As ADODB.Recordset Dim mypath, we As String Dim mysql As String Set db = New ADODB.Connection Set rs = New ADODB.Recordset db.Open "Provider=OraOLEDB.Oracle;Data Source=kcwf;User Id=kcwf;Password=kcwf;" rs.Open "SELECT * FROM T_ALL", db, adOpenDynamic, adLockOptimistic, adCmdText '***** 項目を更新 mysql = "UPDATE T_ALL SET お客様番号= 'B" & Mid([受付番号], 5, 9) & "'" db.Execute mysql 'Close rs.Close Set rs = Nothing db.Close Set db = Nothing *************************************************************************

  • ADOでエクセルからSQL Serverへデータを移行するには

    エクセルvbaのADOを使って、 SQL Serverの「test」という名のデータベースの「Table_1」に 新規レコードを追加する事はできますか? エクセルからアクセスには Sub test() Dim データベース名 As String Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordset cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & データベース名 rs.Open "Tテーブル1", cn, adOpenKeyset, adLockOptimistic rs.AddNew rs.Fields("フィールド1") = データ rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub で移行しています。 これをエクセルからSQL Serverへ移行させるにはどうすればいいのでしょうか? よろしくお願いします。

  • フォームの従業員番号と日付から該当レコードを

    フォームの従業員番号と日付から該当レコードを検索したいのですができません。 おそらくFilterの文法が間違えているのではと思いましたが、色々試した結果 自力ではダメでした。何卒よろしくお願いします Private Sub テスト() Dim CN As ADODB.Connection: Set CN = CurrentProject.Connection Dim RS As ADODB.Recordset: Set RS = New ADODB.Recordset RS.Open "勤怠表", CN, adOpenKeyset, adLockOptimistic RS.Filter = "従業員番号 = " & Me.TB_StaffID & " and 日付 = #" & Format(Me.TB_Date, "yyyy/mm/dd") & "#" If RS.RecordCount = 0 Then Debug.Print "ありません" Else Do Until RS.EOF Debug.Print RS!勤怠番号 RS.MoveNext Loop End If RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。