アプリ版:「スタンプのみでお礼する」機能のリリースについて

 初めまして私は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

A 回答 (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

この回答への補足

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

補足日時:2008/06/06 15:46
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
"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

"INSERT INTO PROF " & _


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

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

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

ANo.2のkikujackです。


>>「コンパイルエラー修飾子エラー」

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

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

ご回答ありがとうございます。
"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

下記のコード


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と表示されます。
分かりますか?
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2008/05/29 11:03

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)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/05/29 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!