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

ADOを使いDBへ読み書きしたい

  • 質問No.2540823
  • 閲覧数2270
  • ありがとう数6
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 100% (10/10)

VB初心者です。よろしくお願いします。
今、VBのActiveXドキュメントを使い、ブラウザ上で利用できるシステムを作ろうと思っています。その際、Textboxに入力されたデータをADOを使いAccess2003に格納したいのですが、うまくいきません。DAOではうまくいきました。
コードは以下の通りです。

Private Sub Command1_Click()
Dim db As ADODB.Connection
Dim rst1 As ADODB.Recordset

Set db = New ADODB.Connection
db.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source = 'データへのパス'\zaseki3.mdb"
db.Open
MsgBox ("接続成功")
Set rst1 = New ADODB.Recordset

☆☆rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic

  With rst1
.AddNew
.Fields("氏名") = Text1
.Update
End With

rst1.Close
db.Close
Set db = Nothing
Set rst1 = Nothing

End Sub

☆☆のところでエラーが発生します。エラー内容は次の通りです。
 実行時エラー'-2147217900(80040e14)':
SQLステートメントが正しくありません。'DELETE'などを使用してく ださい。

環境は Windows XP, VB6.0, Access2003  です。
よろしくお願いします。

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

  • 回答No.5
  • ベストアンサー

ベストアンサー率 64% (171/265)

> SQL上では「"~"」で括ると、一続きの識別子と見てくるはずなので、
> > ☆☆rst1.Open """T-利用者""",
> としてみてはどうでしょう?

ごめんなさい。ACCESSの場合「"~"」では無く「[~]」のようです。
ですから、

> ☆☆rst1.Open "[T-利用者]",
かな。
お礼コメント
HAtSu569

お礼率 100% (10/10)

回答の通り入力したところ、うまくいきました。
本当にありがとうございました。
投稿日時:2006/11/16 11:22

その他の回答 (全5件)

  • 回答No.6

ベストアンサー率 40% (157/390)

No.5 dsuekichiさんに負けた。。。(笑)
テーブル名に[-]があるのでNGのようです。"[~]"にすればいけるようです。
可能ならテーブル名を変えることのほうをお勧めしますが、、、
お礼コメント
HAtSu569

お礼率 100% (10/10)

回答NO.5の方の通り入力したところ、うまくいきました。
色々と意見をくださりありがとうございました。
投稿日時:2006/11/16 11:25
  • 回答No.4

ベストアンサー率 44% (364/816)

>rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic

RecordSetのOpenメソッドのOption(第5引数)を指定しないと、
第1引数はSQLコマンドとみなされます。
テーブル名を指定して開く場合は、
rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic,adCmdTable
とします。
adOpenForwardOnlyもadOpenStaticかadOpenKeysetの方が良いと思います。
お礼コメント
HAtSu569

お礼率 100% (10/10)

返事が遅くなり申し訳ありませんでした。
試してみたところ、エラー内容が少し変わり 

FROM句の構文エラーです。 とのことです。

第5引数の設定はOPENメソッドの際だけでよろしいのでしょうか?
コード以前の問題で、プロパティにも何か追加する必要があるのでしょうか?
よろしくお願いします。
投稿日時:2006/11/16 10:08
  • 回答No.3

ベストアンサー率 40% (157/390)

ANo.1です。
追加します。

rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic
の部分を
Dim sql as String
sql = "SELECT * FROM T-利用者"
rst1.Open sql, db, adOpenForwardOnly, adLockOptimistic

としてみるのはどうでしょう。
お礼コメント
HAtSu569

お礼率 100% (10/10)

追加回答ありがとうございました。
SQLに変更しても同様のエラーが発生しました。
VBAの本にもそのような記述があり、いろいろと試してみましたが、結果はエラーでした。
投稿日時:2006/11/16 09:57
  • 回答No.2

ベストアンサー率 64% (171/265)

> ☆☆rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic

「"T-利用者"」って、テーブル名でしょうか?
SQLでは、「-」は引き算の記号として扱われますから、これでは、
『「T」から「利用者」を引いたもの』と言う意味になるのでは?

SQL上では「"~"」で括ると、一続きの識別子と見てくるはずなので、
> ☆☆rst1.Open """T-利用者""",
としてみてはどうでしょう?

#「""」とするのはVBの表記法。
お礼コメント
HAtSu569

お礼率 100% (10/10)

返事が遅くなり申し訳ありませんでした。
早々の回答ありがとうございました。
変更してみましたが、結果は同じ部分でのエラーでした。
ちなみに、このコードは若干の変更はありますが、VBAの本に載っている通りに打ち込んだものです。
投稿日時:2006/11/16 09:52
  • 回答No.1

ベストアンサー率 40% (157/390)

LockOptimistic なのに adOpenForwardOnlyだからじゃないでしょうかね。。
よくわかりませんが。

adOpenForwardOnly を adOpenStatic にしてみたらどうなりますか?
rst1.CursorLocationをadUseClient にしてみたらどうなりますか?
お礼コメント
HAtSu569

お礼率 100% (10/10)

返事が遅くなり申し訳ありませんでした。
早々の回答ありがとうございました。
回答通り設定してみましたが、やはり同じ部分でエラーになります。
投稿日時:2006/11/16 09:49
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ