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

解決済みの質問

VisualBasic6でAccess2000にデータ格納

 初めまして私はVB6.0の初心者でVB6.0について勉強しています。今VB6.0でAccess2000を利用する勉強をしています。

<プログラム内容>
 フォームに貼り付けたテキストボックス3つ(ID,Password,氏名)とコンボボックス2つ(性別,年齢)にデータを入力しOKボタン(コマンドボタン)を押すとAccess2000のテーブルの中のレコードが追加される。

<条件>
・テーブル名:PROF

・フィールド情報
 IDとPasswordと氏名と性別はテキスト型で、年齢は数値型です。

 私の場合は以下のようなコードを作成しましたが実行すると「Insert文が間違っている」と出てきてしまいます。何故なのでしょうか。お知恵をお貸しください。宜しくお願いします。

Private Sub OK_Click() 'OKボタンを押下すると

'ADOのオブジェクト変数を宣言
Dim cn As New ADODB.Connection 'Connectionオブジェクトを扱う変数(cn)を宣言
Dim rs As New ADODB.Recordset 'Reocordsetオブジェクトを扱う変数(rs)を宣言
Dim strSQL As String 'SQL文

strSQL = "INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " & _
"VALUES (' ID.Text ' " & _
" ,' Password.Text ' " & _
" ,' Name.Text ' " & _
" ,' Sex.Text ' )" & _
" ,' Age.Text ' )"

'データベースに接続するための情報を設定する(データベースの種類、データソース)
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source = C:\sample\ID.mdb"

'データソースへ接続
cn.Open

'AcccessのPROF(テーブル)のID,Password,氏名,性別,年齢(フィールド)にデータ(ID,Password,氏名,性別,年齢)を挿入
rs.Open strSQL, cn

'コネクションを終了する
cn.Close


End Sub

投稿日時 - 2008-05-28 22:27:44

QNo.4058258

すぐに回答ほしいです

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

どこかで同じ名前の変数か関数がある場合に修飾子エラーになります。
自分で作ったもの以外でも、参照設定やコンポーネントの追加により、
定義名が増えますので、注意しないといけません。
先ず、NameとかIDとかは「よくある名前」なので、コントロール名を変えるべきです。
それが嫌なら Forms("xxx").Controls("Name").Text とか、Me.Controls("Name").Text
のように完全修飾して使用してください。ここで、xxx はフォームの名前
Meはフォーム内のプロシージャに限り使用できる自フォームを指すオブジェクトです。
コントロール名が「よくある名前」でないなら、Me.SHIMEI.Text と記述できますが、
MeにはNameプロパティがあるので、Me.Name.Textとは記述できません。

それと、",'" & Age.Text & "')" は間違いです。"," & Age.Text & ")" が正しい。
Ageは数値なので、'(アポストロフィ)で囲ってはいけません。
前もレスしましたが、再掲します。
(1)文字型 '(アポストロフィ)または"(クォート)で囲む cf. 'ABC'
(2)日付型 #(シャープ)で囲む cf. #2008/05/29#
(3)数値型 囲まない。 cf. 30

投稿日時 - 2008-05-29 11:49:33

補足

年齢のデータ型はテキスト型に変更しました。

投稿日時 - 2008-06-06 15:46:26

お礼

ご回答ありがとうございます。
"Insert into PROF (ID ,PD,氏名,性別,年齢) Values" & "('" & ID.Text & "'" & ",'" & PD.Text & "'" & ",'" & Name.Text & "'" & ",'" & Sex.Text & "'" & ",'" & Age.Text & "')"という風に変更したらPROFにデータを格納することが出来ました。

strSQL = "INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
というやり方がいけなかったのでしょうか。

投稿日時 - 2008-06-06 15:42:05

ANo.3

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

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

回答(5)

ANo.5

"INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
>>という書き方がいけなかったのでしょうか。

もちろんいいですよ。
でも、上記のコードが面倒じゃないですか?

>>"Insert into PROF (ID ,PD,氏名,性別,年齢) Values"
このほうがもっと簡単でしょう。

投稿日時 - 2008-06-09 12:05:43

ANo.4

ANo.2のkikujackです。
>>「コンパイルエラー修飾子エラー」

違いことはName.Textと思います。
NameはVBのキーワードです。

Nameというテキストボックスの名はUserNameと変更してください。
もちろんコードも修正の必要があります。
"VALUES('" & ID.Text & "'" & _
",'" & Password.Text & "'" & _
",'" & UserName.Text & "'" & _ '修正した。
",'" & Sex.Text & "'" & _
",'" & Age.Text & "')"

投稿日時 - 2008-05-30 09:47:53

お礼

ご回答ありがとうございます。
"Insert into PROF (ID ,PD,氏名,性別,年齢) Values" & "('" & ID.Text & "'" & ",'" & PD.Text & "'" & ",'" & Name.Text & "'" & ",'" & Sex.Text & "'" & ",'" & Age.Text & "')"という風に変更したらPROFにデータを格納することが出来ました。

"INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
という書き方がいけなかったのでしょうか。

投稿日時 - 2008-06-06 15:44:14

ANo.2

下記のコード
rs.Open strSQL, cn
前に
msgbox strSQL
を追加し、実行してください。
そして、nda23さんのコードも追加し、実行して。
その二つ結果の区別をよく対比すれば、わかる。

下記のコードをよく読んで
sql="values('ID.Text')"
msgbox sql '結果は values('ID.Text') でしょう。
'つまりID.Textは文字列と認識されました。

でも
sql="values('" & ID.Text & "')"
msgbox sql '結果は values('(IDの入力した文字列)') でしょう。

&は二つの文字列を接合します
"values('"は文字列です
"')"も文字列です
IDに入力した文字列はID.Textと表示されます。
分かりますか?

投稿日時 - 2008-05-29 10:46:03

お礼

kikujack様、ご回答ありがとうございます。
ですが
"VALUES('" & ID.Text & "'" & _
",'" & Password.Text & "'" & _
",'" & Name.Text & "'" & _
",'" & Sex.Text & "'" & _
",'" & Age.Text & "')"
の赤表示はなくなりましたが今度は実行すると「コンパイルエラー修飾子エラー」と出てしまいkikujack様の

>>下記のコード
rs.Open strSQL, cn
前に
msgbox strSQL
を追加し、実行してください。

以降ができません。どうすればよろしいのでしょうか。お知恵をお貸しください。宜しくお願いします。

投稿日時 - 2008-05-29 11:03:49

ANo.1

SQLのVALUES以降が間違っています。

"VALUES (' ID.Text ' " & _ ⇒ "VALUES('" & ID.Text & "'" & _
" ,' Password.Text ' " & _  ⇒ ",'" & Password.Text & "'" & _
" ,' Name.Text ' " & _     ⇒ ",'" & Name.Text & "'" & _
" ,' Sex.Text ' )" & _      ⇒ ",'" & Sex.Text & "'" & _
" ,' Age.Text ' )"        ⇒ "," & Age.Text & ")"

最終的には下記のようになっている必要があります。
VALUES('ID007','PASS','NAMAE','MAN',35)

投稿日時 - 2008-05-28 22:56:33

お礼

nda23様、ご回答ありがとうございます。
貴方が教えてくれたとおりVALUES以降を下記のように修正しましたが、
赤く表示されます。なぜなのでしょうか。教えてください。宜しくお願いします。
"VALUES('" & ID.Text & "'" & _
",'" & Password.Text & "'" & _
",'" & Name.Text & "'" & _
",'" & Sex.Text & "'" & _
",'" & Age.Text & "')"

投稿日時 - 2008-05-29 10:05:34

あなたにオススメの質問