こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAとSQLITEでAddNewメソッド

こんにちは!

Access VBAとSQLITEを接続して、SQLITEにデータをインサートしたいと思っています。
ADOを利用して、ADDNEWメソッドでデータを入れたいのですが、うまく動きません。
書いているコードは下記になります。

'ローカル定数
'Xはネットワークドライブ
Const DRIVER_NAME As String = "Driver=SQLite3 ODBC Driver;Database=X:\test.sqlite3;"

'コネクト
Set CON = New ADODB.Connection
Set RS = New ADODB.Recordset

CON.ConnectionString = DRIVER_NAME
CON.Open

'レコードセット
sql = "select * from TABLE1"
table = "TABLE1"

'↓問題無く通りますが、TABLE1にはデータが1件も存在しません。
RS.Open sql, CON, adOpenDynamic, adLockOptimistic

'↓ここで実行エラー 3021 BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。と表示されます。
RS!F1 = "abc"

'↑TABLEにはデータが一件も無い為に、このようなメッセージが表示されると思います。


'↓ODBCドライバは要求されたプロパティをサポートしていません。と表示されます。
RS.Open table, CON, adOpenDynamic, adLockOptimistic


何故、上記のようなメッセージが表示されるのでしょうか?これを解決してAddNewメソッドでデータの挿入を行いたいと思っています。

宜しくお願いします!

投稿日時 - 2013-06-14 09:54:17

QNo.8133380

すぐに回答ほしいです

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

RS!F1 = "abc"
する前に
RS.AddNew
してみたらうまくいきませんか?
(レコードを追加するのなら、これをしないとだめなはずです。
 ・・・最初のレコードを更新しようとするはず。)

例)
RS.OPEN ・・・
RS.AddNew
RS!F1 = "abc"
RS.Update
RS.Close

投稿日時 - 2013-06-17 00:12:05

お礼

ご回答ありがとうございます!参考にさせて頂きます、本当にありがとうございます!

投稿日時 - 2013-06-18 10:23:01

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

TABLE1にデータが存在していないというお話であれば、エラーはおこるべくしておこっています。

Openして、BOFとEOFのいずれかがTrueになっている状態ですから、カレントレコードっが無い状態です。


カレントレコードが無いのに、値をセットしようとしてもエラーになります。

なので、通常テーブルにデータが存在する時、

Do while Rs.Eof
'値をセットする処理など・・・

Rs.MoveNext
Lopp

っと言う感じで、Eof判定入れますよね?


最後のエラーは、最初にOpenしてCloseしてないのに、再度Openしようとしているのだから、エラーになっても、おかしくないかな?

なので、テーブルが0件であることが保障されている前提があるなら、素直にAddNewで値を挿入すれば良いし、保障されていなければ、データを削除する処理を前で入れるとかすれば良いと思います。


何かのご参考になれば・・・

投稿日時 - 2013-06-14 12:59:37

お礼

ご回答ありがとうございます!参考にさせて頂きます、本当にありがとうございます!

投稿日時 - 2013-06-18 10:22:50

あなたにオススメの質問