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

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

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

  • 回答数2
  • 閲覧数1095
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2
  • teppy
  • ベストアンサー率50% (9/18)

おつかれさまです(^^)/ データベース変数の宣言文を変更されましたでしょうか? Private Cur_Db As DAO.Connection ↓ dim Cur_Db As DAO.Database 変更しなければ、確かに「実行時エラー'13' 型が一致しません」というエラーがでます。 ダメでしたら、再度補足等を御願い致します

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

質問者からのお礼

ありがとうございます! 宣言を直したら、上手くデータの追加が出来ました!! \(^o^)/ 今後もこの処理を使う時がたくさんあるはずなので、 とても助かりました♪ m(_ _)m

関連するQ&A

  • 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を介してテーブルにデータを入れていました。 アップサイジングする前は、問題なかったのですが、どういったことが原因になりますでしょうか?

  • アクセス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

  • ACCESS VBAからDAOを使ってのExcelファイル読み込みについて

    以前もお世話になりました。またよろしくお願いできますでしょうか。(OS: XP , Access 2003) 今回はACCESS VBA からDAOを使ってのExcelファイルの読み込みを試みています。 最初はTransferSpreadsheetを使ってうまく行っている様に見えたのですが、Quit及びSet XLApp=Nothingをちゃんとしていても、タスクマネージャーを開けると裏でEXCELが走っている状態でした。 他サイトで同じ現象の解決でAddNewが提案されており、そのサイトの例と他のDAOを使っている例を自分用にアレンジしてみました。 (他サイトのURL張っていいのかわからないので外しておきます) エラー1)Import元のファイルを開けていないと"External table is not in the expected format" でOpenDatabaseの行で止まります。これは仕様でしょうか?わざわざ Excel.Applicationなどで開けないと行けないということですか? エラー2)"Run-time error 1004. Method 'Range' of object '_Global' failed"。ファイルを開けて実行した場合Rangeの所で止まります。Public subにしたりしましたが関係なかったようです。 申し訳ありませんが、アドバイスお願い致します。 ------- Sub loadToDB() Dim rs, rs2 As DAO.Recordset Dim db As DAO.Database Dim SheetName As String Set db = OpenDatabase("U:\projects\ABC\TestFile.xls", False, False, "Excel 8.0;")   ’ファイルを開けていないとまずここで SheetName = db.TableDefs(0).Name Set rs = db.OpenRecordset(SheetName) Set rs2 = CurrentDb.OpenRecordset("TableA") Do Until rs.EOF rs2.AddNew rs!F1 = Range("A1").Value   ’ファイル開けているとここで駄目です rs!F2 = Range("B1").Value rs!F3 = Range("C1").Value rs!F4 = Range("D1").Value rs2.Update rs.MoveNext Loop rs.Close Set rs = Nothing db.Close Set db = Nothing rs2.Close Set rs2 = Nothing End Sub

その他の回答 (1)

  • 回答No.1
  • teppy
  • ベストアンサー率50% (9/18)

こんにちは 下記文例では、どうでしょうか? '~~~~~~~~~~ Dim Cur_Db As DAO.Database Dim rs As DAO.Recordset Dim sql As String Dim str_date As String str_date = Date Set Cur_Db = CurrentDb Set rs = Cur_Db.OpenRecordset("スケジュールソース", dbOpenDynaset) rs.AddNew rs![日付] = str_date rs.Update '~~~~~~~~~~ もし、ダメでしたらDAOのバージョン、エラーメッセージ等の補足を御願い致します

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

質問者からの補足

Set Cur_Db = CurrentDbで、 型が一致しません。 というエラーが出るんです...

関連するQ&A

  • 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

  • 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がかえるのですが なぜレコードの行数を取得できないのでしょうか?

  • DAOでデータベースを二つ開くには?

    環境 Windows2000 VB6 DAOで同じデータベースを開くためのやり方がわかりません。 下記のようにマスタのキーを使用して他のテーブルの 内容を更新したいのですが よろしくお願いします。m(__)m Dim ws As Workspace Dim db As Database Dim qd As QueryDef Dim rs As Recordset Dim STRSQL As String dim strsql2 as string Set ws = DBEngine.Workspaces(0) Set db = ws.Databases(0) STRSQL = "SELECT KEY FROM マスタ" Set qd = db.CreateQueryDef("", STRSQL) Set rs = qd.OpenRecordset() Do While Not rs.EOF strsql2 = "Update data from マスタ where key = " & rs!key ???? rs.MoveNext Loop rs.Close qd.Close db.Close

  • SELECT文を発行して、ACCESSより取得する方法

    既存のプログラムを元に、 以下のようなソースを作成したのですが、 取得出来ませんでした。 参照設定やパスの設定、SQL文は正しいです。 どこがマズイのでしょうか? アドバイスをお願い致します。 Dim db  As DAO.Database Dim rs  As DAO.Recordset Dim SQL As String 'データベース接続 Set db = OpenDatabase("DBのパス") 'データ検索SQL SQL = "" SQL = " SELECT文 " 'ACCESSより取得 Set rs = db.OpenRecordset(SQL) db.Close rs.Close

  • DAOでのコードをADOへ書き直し

    Access2003、WinXPです。 レコードセットの取得関係をDAOで書いていたのですが ADOに途中から変更しました。 変数宣言を Public db As DAO.Database ⇒Public cn As ADODB.Connection Public rs As DAO.Recordset ⇒Public rs As ADODB.Recordset Public Fld As DAO.field  ⇒Public Fld As ADODB.field レコードセット取得を Set db = CurrentDb      Set rs = db.OpenRecordset(strSQL) ↓ Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn レコードセット クローズを Set rs = Nothing Set db = Nothing ↓ rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing としました。今のところ動いているようですが、 何か勘違い、気をつけないといけない事等ありますでしょうか・・・?

  • ODBC--リンクテーブル'XXXX'での更新に失敗しました

    同じ現象がなさそうでしたので質問させていただきます。 インポートしたテーブルであれば問題なくレコードの更新が出来るのですが 実際のODBCで繋いだDBでは「ODBC--リンクテーブル'XXXX'での更新に失敗しました」となってしまいます。 DAOとADO両方試してみました。以下のものになります こちらは教えていただいたものです。 Private Sub Sample3() Dim rs As New ADODB.Recordset Dim i As Integer Const フィールド名 As String = "連番" ' ☆1 Const テーブル名 As String = "元テーブル" ' ☆1 Const 抽出 As String = "登録番号" ' ☆1 Const 並び替え As String = "登録番号" ' ☆1 i = 1 rs.Source = "SELECT " & フィールド名 & " FROM " & テーブル名 & _ " WHERE " & 抽出 & " LIKE 'ZZZZ%' ORDER BY " & 並び替え & ";" rs.Open , CurrentProject.Connection, adOpenForwardOnly, adLockOptimistic While (Not rs.EOF) rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub ADOだからダメなのかと思い こちらは教えて頂いたものをDAOにしてみました。 Private Sub Sample3() Dim Db As DAO.Database Dim rs As DAO.Recordset Dim i As Integer Const フィールド名 As String = "連番" ' ☆1 Const テーブル名 As String = "元テーブル" ' ☆1 Const 抽出 As String = "登録番号" ' ☆1 Const 並び替え As String = "登録番号" ' ☆1 i = 1 Set Db = CurrentDb() Set rs = Db.OpenRecordset("SELECT " & フィールド名 & " FROM " & テーブル名 & " WHERE " & 抽出 & " LIKE 'ZZZZ*' ORDER BY " & 並び替え & ";") While (Not rs.EOF) rs.Edit rs(フィールド名) = "ZZZZ" & Format(i, "0000") rs.Update rs.MoveNext i = i + 1 Wend rs.Close End Sub 両方とも「ODBC--リンクテーブル'XXXX'での更新に失敗しました」 となってしまいます。 どうすれば更新に失敗せずにできるのでしょうか?

  • DAOでフィールドの値を変更する

    MDBファイルにDAOでアクセスし、フィールド(今回の場合Fields(4))の値をTextBox内の値に変更する方法がわかりません。 Dim WS As DAO.Workspace Dim DB As DAO.Database Dim RS As DAO.Recordset 'レコードを特定する処理 RS.Fields(4).Value = TextBox.Text RS.Update どのように直せばいいのでしょうか??

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

    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 ・・・ とするとエラーになります。 項目名"ああ ああ"はどのように書けばいいのでしょうか? よろしくおねがいします。

  • Excel VBA DAO について

    いつもお世話になっております。 現在Excel2007でマクロを組みました。 下記ソースのような形で、マクロを実行するブック内にあるシートから、データを取得するのですが・・・・ ~ソース例~ dim dbEngine as object Dim db as object Dim rs as object Dim sql as object '■SQL格納 sql = sql & "Select 社員名 " sql = sql & " ,Sum(月収) as 年収 " sql = sql & " From 月収一覧 " sql = sql & "Group By 社員名,月収; " '■DBを開く Set dbEngine = CreateObject("DAO.DBEngine36") Set db = dbEngine.OpenDatabase("C:\社員月収.xls", False, False, "Excel8.0;") '■SQL実行後レコードセットへ格納 Set rs = db.Openrecordset(sql) としていますが「■DBを開く」の部分でCreateObject内で宣言している”DAO.DBEngine36”の部分をそのPCのDAOライブラリのバージョンによって変更したいのですが、可能なのでしょうか?? 以上です><よろしくお願いいたします!!

  • ACCESSの SELECT SUM

    SELECT SUMを 計算させると ゼロしか 出てきません。 どこが悪いのでしょうか?  日付         出金       氏名 2012/12/10      540      安田 2012/12/10      1020      斉藤 2012/12/10       970      TOM 2012/12/11      650      池田  2012/12/11     2010      南 2012/12/12      350      林田 2012/12/12     1200      加藤 のようなテーブルがあり Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim gokei As Long Set Db = CurrentDb SQL = "SELECT Sum(出金) as gokei FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) MsgBox gokei End Sub を フォームアルファに 新しく作ったコマンドボタンのクリック時に 書きました。 これを テキストの日付を変えておいて いろいろ試しても ゼロのメッセージしか出ません。 WHERE以下が 間違っていないか 試しに Private Sub コマンド_click() Dim Db As Database Dim SQL As String Dim rs As Recordset Dim Count As Long Set Db = CurrentDb SQL = "SELECT (出金)  FROM テーブル  WHERE 日付= #" & [Forms]![フォームアルファ]![テキスト] & "# " Set rs = Db.OpenRecordset(SQL) If rs.EOF Then Count = 0 Else rs.MoveLast Count = rs.RecordCount End If MsgBox Count End Sub を 実行すると ちゃんと 正しいレコード数が 表示されます。 「出金」のデータ型は 長整数になっています。 どこが 悪いのでしょうか? 目的は 指定した日付の 出金の合計を取り出したいのです。 . . .