- ベストアンサー
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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
どこかで同じ名前の変数か関数がある場合に修飾子エラーになります。 自分で作ったもの以外でも、参照設定やコンポーネントの追加により、 定義名が増えますので、注意しないといけません。 先ず、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
その他の回答 (4)
- kikujack
- ベストアンサー率47% (17/36)
"INSERT INTO PROF " & _ " (ID " & _ " ,Password " & _ " ,氏名 " & _ " ,性別 " & _ " ,年齢) " & >>という書き方がいけなかったのでしょうか。 もちろんいいですよ。 でも、上記のコードが面倒じゃないですか? >>"Insert into PROF (ID ,PD,氏名,性別,年齢) Values" このほうがもっと簡単でしょう。
- kikujack
- ベストアンサー率47% (17/36)
ANo.2のkikujackです。 >>「コンパイルエラー修飾子エラー」 違いことはName.Textと思います。 NameはVBのキーワードです。 Nameというテキストボックスの名はUserNameと変更してください。 もちろんコードも修正の必要があります。 "VALUES('" & ID.Text & "'" & _ ",'" & Password.Text & "'" & _ ",'" & UserName.Text & "'" & _ '修正した。 ",'" & Sex.Text & "'" & _ ",'" & Age.Text & "')"
お礼
ご回答ありがとうございます。 "Insert into PROF (ID ,PD,氏名,性別,年齢) Values" & "('" & ID.Text & "'" & ",'" & PD.Text & "'" & ",'" & Name.Text & "'" & ",'" & Sex.Text & "'" & ",'" & Age.Text & "')"という風に変更したらPROFにデータを格納することが出来ました。 "INSERT INTO PROF " & _ " (ID " & _ " ,Password " & _ " ,氏名 " & _ " ,性別 " & _ " ,年齢) " & という書き方がいけなかったのでしょうか。
- kikujack
- ベストアンサー率47% (17/36)
下記のコード 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と表示されます。 分かりますか?
お礼
kikujack様、ご回答ありがとうございます。 ですが "VALUES('" & ID.Text & "'" & _ ",'" & Password.Text & "'" & _ ",'" & Name.Text & "'" & _ ",'" & Sex.Text & "'" & _ ",'" & Age.Text & "')" の赤表示はなくなりましたが今度は実行すると「コンパイルエラー修飾子エラー」と出てしまいkikujack様の >>下記のコード rs.Open strSQL, cn 前に msgbox strSQL を追加し、実行してください。 以降ができません。どうすればよろしいのでしょうか。お知恵をお貸しください。宜しくお願いします。
- nda23
- ベストアンサー率54% (777/1415)
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)
お礼
nda23様、ご回答ありがとうございます。 貴方が教えてくれたとおりVALUES以降を下記のように修正しましたが、 赤く表示されます。なぜなのでしょうか。教えてください。宜しくお願いします。 "VALUES('" & ID.Text & "'" & _ ",'" & Password.Text & "'" & _ ",'" & Name.Text & "'" & _ ",'" & Sex.Text & "'" & _ ",'" & Age.Text & "')"
お礼
ご回答ありがとうございます。 "Insert into PROF (ID ,PD,氏名,性別,年齢) Values" & "('" & ID.Text & "'" & ",'" & PD.Text & "'" & ",'" & Name.Text & "'" & ",'" & Sex.Text & "'" & ",'" & Age.Text & "')"という風に変更したらPROFにデータを格納することが出来ました。 strSQL = "INSERT INTO PROF " & _ " (ID " & _ " ,Password " & _ " ,氏名 " & _ " ,性別 " & _ " ,年齢) " & というやり方がいけなかったのでしょうか。
補足
年齢のデータ型はテキスト型に変更しました。