- ベストアンサー
ADOを使いDBへ読み書きしたい
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 です。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> SQL上では「"~"」で括ると、一続きの識別子と見てくるはずなので、 > > ☆☆rst1.Open """T-利用者""", > としてみてはどうでしょう? ごめんなさい。ACCESSの場合「"~"」では無く「[~]」のようです。 ですから、 > ☆☆rst1.Open "[T-利用者]", かな。
その他の回答 (5)
- PED02744
- ベストアンサー率40% (157/390)
No.5 dsuekichiさんに負けた。。。(笑) テーブル名に[-]があるのでNGのようです。"[~]"にすればいけるようです。 可能ならテーブル名を変えることのほうをお勧めしますが、、、 ↓
お礼
回答NO.5の方の通り入力したところ、うまくいきました。 色々と意見をくださりありがとうございました。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
>rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic RecordSetのOpenメソッドのOption(第5引数)を指定しないと、 第1引数はSQLコマンドとみなされます。 テーブル名を指定して開く場合は、 rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic,adCmdTable とします。 adOpenForwardOnlyもadOpenStaticかadOpenKeysetの方が良いと思います。
お礼
返事が遅くなり申し訳ありませんでした。 試してみたところ、エラー内容が少し変わり FROM句の構文エラーです。 とのことです。 第5引数の設定はOPENメソッドの際だけでよろしいのでしょうか? コード以前の問題で、プロパティにも何か追加する必要があるのでしょうか? よろしくお願いします。
- PED02744
- ベストアンサー率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 としてみるのはどうでしょう。
お礼
追加回答ありがとうございました。 SQLに変更しても同様のエラーが発生しました。 VBAの本にもそのような記述があり、いろいろと試してみましたが、結果はエラーでした。
- dsuekichi
- ベストアンサー率64% (171/265)
> ☆☆rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic 「"T-利用者"」って、テーブル名でしょうか? SQLでは、「-」は引き算の記号として扱われますから、これでは、 『「T」から「利用者」を引いたもの』と言う意味になるのでは? SQL上では「"~"」で括ると、一続きの識別子と見てくるはずなので、 > ☆☆rst1.Open """T-利用者""", としてみてはどうでしょう? #「""」とするのはVBの表記法。
お礼
返事が遅くなり申し訳ありませんでした。 早々の回答ありがとうございました。 変更してみましたが、結果は同じ部分でのエラーでした。 ちなみに、このコードは若干の変更はありますが、VBAの本に載っている通りに打ち込んだものです。
- PED02744
- ベストアンサー率40% (157/390)
LockOptimistic なのに adOpenForwardOnlyだからじゃないでしょうかね。。 よくわかりませんが。 adOpenForwardOnly を adOpenStatic にしてみたらどうなりますか? rst1.CursorLocationをadUseClient にしてみたらどうなりますか?
お礼
返事が遅くなり申し訳ありませんでした。 早々の回答ありがとうございました。 回答通り設定してみましたが、やはり同じ部分でエラーになります。
お礼
回答の通り入力したところ、うまくいきました。 本当にありがとうございました。