• ベストアンサー
  • すぐに回答を!

accessからsqlserverにアップサイジングしましたが,テーブ

accessからsqlserverにアップサイジングしましたが,テーブルにデータを入力出来なくなってしまいました。 Dim rs As DAO.Recordset Dim db As DAO.Database Set db = CurrentDb() Set rs = db.OpenRecordset("確認用", dbOpenDynaset) rs.AddNew rs!品番 = Me.品番 rs.Update 上記のようにDAOを介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1586
  • ありがとう数19

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

  • ベストアンサー
  • 回答No.3
  • KHSSSK
  • ベストアンサー率76% (13/17)

書き忘れました。 テーブルに主キーが設定されていないと Access側からレコードの更新はできません。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

テーブルに主キーを設定後に書き込めるようになりました。 本当にありがとうございます。

関連するQ&A

  • 空欄を含む項目のレコードセット

    Access 2003 DAO.Recordsetにてデータを取得しようと思うのですが テーブル項目に空欄がある場合はどのように書けばよろしいのでしょうか? Dim DB As DAO.Database Dim RS As DAO.Recordset Set DB = CurrentDb Set RS = daoDB.OpenRecordset("Aテーブル", dbOpenDynaset) RS.AddNew daoRS!ああ ああ = xx RS!Update ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

その他の回答 (2)

  • 回答No.2
  • KHSSSK
  • ベストアンサー率76% (13/17)

SQLの場合はDAOではなくADOになります。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "テーブル名", cn, adOpenStatic, adLockOptimistic レコードの追加 rs.AddNew は同じ形式で可です。 レコードの更新 rs.Edit は不要で rs!列名 = 値: rs.Update または rs.Update "列名", 値 の形式になります。 レコードの検索 rs.FindFirst → rs.Find 以下形式は同じです。 また、直接クエリを発行してレコードセットを作成することも可能です。 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim MySQL As String MySQL = "SELECT * FROM テーブル名 WHERE 検索条件" Set cn = CurrentProject.Connection rs.Open MySQL, cn, adOpenStatic, adLockOptimistic rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing 最後はクローズしてメモリーを解放しておきましょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

daoというのはもう古いんですね.... adoに書き換えて試してみます。 ありがとうございます。

  • 回答No.1

どんなエラーになりますか?

共感・感謝の気持ちを伝えよう!

質問者からのお礼

情報が少なく、申し訳ありませんでした。 access2007 sql server2005に接続しています。 エラーですが... 実行時エラー 3027 データベースまたはオブジェクトは読み取り専用なので、更新できません。 以上のようなエラーがでます。 テーブルのリンクを,sqlserverではなく,通常に戻したら上記のようなエラーは出ずに,テーブルにデータを入力することは可能でした。 アドバイス、よろしくお願いいたします。

質問者からの補足

rs.addnewの箇所でエラーになります。

関連するQ&A

  • DAOでレコード数を取得したい(ACESSVBA)

    レコードの行数は複数あるのに --------------------------------------------------------- Sub あ() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_test", dbOpenDynaset) MsgBox rs.RecordCount Set rs = Nothing Set db = Nothing End Sub --------------------------------------------------------- これでレコード数を取得しようとすると1がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • Accessで、DAOでAddnew

    参照はDAOで、Addnewでデータの追加をしたいのですが、記述が悪いのか、上手くできません。 どなたか、教えて下さい! テーブル:スケジュールソース フィールド:日付 Private Cur_Db As DAO.Connection Private rs As DAO.Recordset Private sql As String Dim str_date As String str_date = Me!日付 Set Cur_Db = CurrentDb rs.Open "スケジュールソース", Cur_Db, dOpenKeyset, adLockOptimistic rs.AddNew rs("日付").Value = str_date rs.Update

  • レコード件数が返らない理由がわからない

    テーブル1にはレコードが5件入ってるのですが Private Sub レコード件数() Dim strSQL As String Dim rs As DAO.Recordset strSQL = "SELECT * FROM テーブル1;" Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset) Debug.Print rs.RecordCount End Sub これをすると1が返るのですがなぜでしょうか? レコードの数が返ると思ってるのですが違うのでしょうか?

  • Access VBA 添付型フィールド

    Access VBAで添付型フィールドからファイル名を取りだしたいのですが、どのようにすればいいでしょうか? Private Sub Sample() Dim DB As DAO.Database Dim RS As DAO.Recordset Dim SQL As String   Set DB = CurrentDb SQL_1 = "SELECT * FROM ボランティア情報 ORDER BY 分野 & 団体名読み;" Set RS = DB.OpenRecordset(SQL_1, dbOpenDynaset) With RS   Do While Not .EOF   MsgBox (!写真.FileName)  ←ここでエラーが出ます。 .   MoveNext   Loop End With RS.Close Set RS = Nothing Set MDB = Nothing End Sub

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • パススルークエリの使い方について

    パススルークエリーを使ってAccess 2007 から SQL Server 2008 上のデーターに追加したいのですが、パススルークエリーが読取り専用のため何もできません。パススルークエリーは、Microsoft のサポートにあるとおりに作成しました。SQL欄には Select * from T_Data とのみ記述しただけですので、このクエリ (Q_Data) はSQLServer にあるテーブルのすべてを表示しています。 以下のように記述しましたが、何ともなりません。 Private Sub cmd_追加_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Data", dbOpenDynaset) rs.AddNew rs!カテゴリー = Me!txt_カテゴリー rs!商品名 = Me!txt_商品名 rs.Update MsgBox ("追加しました") rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub この場合のQ_Dataには加工ができないのでしょうか? 追加、更新ごとにパススルーを新たに作成する必要があるのでしょうか? ご指導をお待ちしております。

  • Access レコードを分割してフォームで表示

    Access 2007です。 下記のような日記テーブルがあり、 その「行動」フィールドの中身を「●」の記号で レコードに分割して、 フォームに表示したいと思っています。 日記テーブル ID 年月日   天気  行動 1 2014/1/10  晴  ●読書。●新聞を読む。●散歩。 2 2014/1/11  曇  ●電車に乗る。●新年会。●庭の手入れ。●カラオケ。 3 2014/1/12  曇  ●昼寝。 4 2014/1/13  雨  ●買い物。●読書。 ・・・・ 結果フォーム(データシートビュー)で表示 年月日    行動 2014/1/10  読書。 2014/1/10  新聞を読む。 2014/1/10  散歩。 2014/1/11  電車に乗る。 2014/1/11  新年会。 2014/1/11  庭の手入れ。 2014/1/11  カラオケ。 2014/1/12  昼寝。 2014/1/13  買い物。 2014/1/13  読書。 もとの日記テーブルのデータは変更しません。 下記のように、VBAのコードの中で、 レコードセットを使えば、上記のようなレコードの分割ができると思うのですが、 うまくいきません。 rs2というレコードセットをどうやって作成すればいいのかわかりません。 (Set rs2 = DB.OpenRecordset ・・・ のような行が必要ではないか、と思うのですが、 そのやり方がわかりません。) やり方を教えていただけたら幸いです。 Dim DB As DAO.Database Set DB = CurrentDb() Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Set rs1 = DB.OpenRecordset("日記テーブル", dbOpenForwardOnly) Dim A As Variant Do Until rs1.EOF A = Split(rs1!行動, "●") For i = 1 to UBound(A) rs2.AddNew rs2!年月日 = rs1!年月日 rs2!行動 = rs1!A(i) rs2.Update Next i rs1.MoveNext Loop DoCmd.OpenForm "結果フォーム" Set Forms!結果フォーム.Recordset = rs2

  • access2003 自社カレンダーを作りたい

    現在、access2003で注文書を出力するプログラムを作成中です。 自社の営業日カレンダーを表示させたいのですが、 開く時のイベントプロシージャでエラーになって先に進みません。 エラーメッセージは 【イベントプロパティに指定した式 開く時でエラーが発生しました:プロシージャの宣言が、イベントまたはプロシージャの定義と一致していません。】です。 開発が初めてなので、どなたか教えていただけませんか?よろしくお願いします。   下記のイベントプロシージャの書き方に問題がありますか?  Function Form_Open(F As Form) Dim DB As DAO.Database Dim rs As DAO.Recordset Dim F As Form Set DB = CurrentDb Set F = Forms!カレンダA Set rs = DB.OpenRecordset("calen", dbOpenDynaset) End Function

  • ACCESS2000でテーブルをVBAからテーブルを読み込む方法

    ACCESS2000を使っています。 以下の指定をした場合、「ユーザ定義型は定義されていません」のメッセージが出て、コンパイルが通りません。 なにかインストールや設定が必要なのでしょうか? Dim db As Database Dim rs As Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("テーブル名", dbopendynaset) ヘルプ等を自分なりに参照してみたのですが、わかりません。教えてください。