初めまして私は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
No.3ベストアンサー
- 回答日時:
どこかで同じ名前の変数か関数がある場合に修飾子エラーになります。
自分で作ったもの以外でも、参照設定やコンポーネントの追加により、
定義名が増えますので、注意しないといけません。
先ず、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
ご回答ありがとうございます。
"Insert into PROF (ID ,PD,氏名,性別,年齢) Values" & "('" & ID.Text & "'" & ",'" & PD.Text & "'" & ",'" & Name.Text & "'" & ",'" & Sex.Text & "'" & ",'" & Age.Text & "')"という風に変更したらPROFにデータを格納することが出来ました。
strSQL = "INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
というやり方がいけなかったのでしょうか。
No.5
- 回答日時:
"INSERT INTO PROF " & _
" (ID " & _
" ,Password " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
>>という書き方がいけなかったのでしょうか。
もちろんいいですよ。
でも、上記のコードが面倒じゃないですか?
>>"Insert into PROF (ID ,PD,氏名,性別,年齢) Values"
このほうがもっと簡単でしょう。
No.4
- 回答日時:
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 " & _
" ,氏名 " & _
" ,性別 " & _
" ,年齢) " &
という書き方がいけなかったのでしょうか。
No.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と表示されます。
分かりますか?
kikujack様、ご回答ありがとうございます。
ですが
"VALUES('" & ID.Text & "'" & _
",'" & Password.Text & "'" & _
",'" & Name.Text & "'" & _
",'" & Sex.Text & "'" & _
",'" & Age.Text & "')"
の赤表示はなくなりましたが今度は実行すると「コンパイルエラー修飾子エラー」と出てしまいkikujack様の
>>下記のコード
rs.Open strSQL, cn
前に
msgbox strSQL
を追加し、実行してください。
以降ができません。どうすればよろしいのでしょうか。お知恵をお貸しください。宜しくお願いします。
No.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)
nda23様、ご回答ありがとうございます。
貴方が教えてくれたとおりVALUES以降を下記のように修正しましたが、
赤く表示されます。なぜなのでしょうか。教えてください。宜しくお願いします。
"VALUES('" & ID.Text & "'" & _
",'" & Password.Text & "'" & _
",'" & Name.Text & "'" & _
",'" & Sex.Text & "'" & _
",'" & Age.Text & "')"
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルのVBAの標準モジュール...
-
PowerPointVBAでスライドマスタ...
-
[VBA]CDOメッセージ送信エラー
-
VBScriptでExcelのグラフを貼り...
-
VBAからPDFファイルにパスワー...
-
オブジェクトが見つかりません
-
VBA:オートシェイプの線の長...
-
Excel VBA グラフを任意sheetに...
-
sheetsメソッドの失敗
-
テキストボックス中の文字列の...
-
上下の位置揃えについて
-
EXCEL VBA オートシェイプナン...
-
VBScriptからDLL参照設定したい
-
TXTファイルをMDBファイ...
-
AccessからOutlookを立上げファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
worksheetFunctionクラスのVloo...
-
「Columns("A:C")」の列文字を...
-
エクセルのVBAの標準モジュール...
-
実行時エラー 3265「要求された...
-
VBAで既に開いている別アプリケ...
-
PowerPointVBAでスライドマスタ...
-
VBAで Set wb = Sheets(1).Cop...
-
エクセルマクロエラー「'Cells'...
-
ある文字列が全て数字であるか...
-
VBAについてです。 初心者です...
-
VBScriptでファイルの日時順(降...
-
Excelでフィルタをかけると警告...
-
VBAからPDFファイルにパスワー...
-
VBで引数にDictionaryオブジェ...
-
このように書くべきですか? { ...
-
EXCEL VBA オートシェイプナン...
-
テキストボックス中の文字列の...
-
エクセルVBAでcode128のバー...
-
[VBA]CDOメッセージ送信エラー
-
オブジェクトが見つかりません
おすすめ情報