• 締切済み

Visual Basic SQL INSERT ADO

VisualBasic6.0 を使用しています。 SQLのINSERT文についての質問なのですが、 フォームのテキストに記入された内容を新規のレコードとしてデータベースに登録する場合、どのようなプログラムを組めばよいのでしょうか? 下記のように組んでみたのですが、エラー(実行時エラー'-2147217904(80040e10)':一つ以上の必要なパラメータの値が設定されていません)がでてしまいます。 以下のプログラムでは、 Form4の.Text1~7にユーザーが記入した情報をデータベースのM_USERというテーブルの新レコードとして追加しようとしています。 Private Sub Command1_Click() Dim objcon As ADODB.Connection Dim objrec As ADODB.Recordset Dim strConnectString As String Dim strMDBFilePath As String Dim strSQL As String strMDBFilePath = "C:\Documents and Settings\Watanabe Ryota\デスクトップ\新ダイエット\diet.mdb" strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBFilePath & ";" Set objcon = New ADODB.Connection objcon.Open strConnectString strSQL = "INSERT INTO M_USER(U_ID,U_NAME,U_PASS,U_SIZES1,U_SIZES2,U_CAL,U_IKIGOMI) VALUES(Form4.Text1,Form4.Text2,Form4.Text3,Form4.Text4,Form4.Text5,Form4.Text6,Form4.Text7)" Set objrec = objcon.Execute(strSQL) End Sub おねがいします。

みんなの回答

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

> 同じように、1箇所ずつ文字列を区切って、「&」でつないでください。 に、追記。 文字列型の項目の場合、「'~'」で括ってやらないと、エラーになります。 また、指定された文字列が「'」を含む場合、「''」に置き換えないと、やはりエラーに・・・

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

「文字列の中」に変数名やプロパティを直接記述しても駄目です。 例えば、 > strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strMDBFilePath & ";" も、 > strConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=strMDBFilePath;" こう書いたてしまったら、ちゃんと動かないですよね? 同じように、1箇所ずつ文字列を区切って、「&」でつないでください。

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

Debug.Print strSQL として、strSQLの内容を確認してみてください。

関連するQ&A

  • Visual Basic SQL INSERT ADO

    VisualBasic6.0 を使用しています。 SQLのINSERT文についての質問なのですが、 フォームのテキストに記入された内容を新規のレコードとしてデータベースに登録する場合、どのようなプログラムを組めばよいのでしょうか? 下記のように組んでみたのですが、エラー(実行時エラー'-2147217904(80040e10)':一つ以上の必要なパラメータの値が設定されていません)がでてしまいます。 以下のプログラムでは、 Form4の.Text1~7にユーザーが記入した情報をデータベースのM_USERというテーブルの新レコードとして追加しようとしています。 おねがいします。

  • ADOでRecordsetオブジェクトをレコードソースに設定したい

    Access2000を使っています。リンクテーブルを使わずに、ODBCで繋いだDBのテーブルをフォームのレコードソースにセットしたいのですが、可能でしょうか。 宜しくお願いします。 Private Sub FormNoKansu() Dim cn as New ADODB.Connection Dim rs as New ADODB.Recordset Dim strSql as String 'ODBCでサーバーに接続 cn.ConnectionString = "ODBCでMySQLに..." ... strSql = "SELECT * FROM ..." rs.Open strSql, cn 'ここに[rs]を入れられたらと思っています Me.Recordset = "" End Sub

  • ACCESSでレコード数の取得の仕方

    Aテーブルのレコード数を取得しようと思い、次のPGを考えました。(Aテーブルには10件のデータが入っています。)ですが、「-1」という数値が返ってきます。なぜでしょうか? Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Set objADOCON = Application.CurrentProject.Connection strSQL = "SELECT * FROM Aテーブル" Set objADORS = objADOCON.Execute(strSQL) MsgBox objADORS.RecordCount , vbOKOnly, "レコード数"

  • ExcelでDBにInsertするには?

    ExcelからAccessデータを追加する際にInsertを使うと思うのですが自力で調べ他のですがうまく登録できません? SQLは全くの素人なので間違いだらけでしょうが、ご指南よろしくお願いします あとテーブル名は全角でも大丈夫でしょうか?(書籍・ネット上ではどれもアルファベットのみでしたので) Sub Macro3() Dim objDB As New ADODB.Connection Dim rcsTB As New ADODB.Recordset Dim StrSQL As String Dim hizuke As Date, id As Integer objDB.Open _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\aaa.mdb;" rcsTB.ActiveConnection = objDB hizuke = Date id = 1280 StrSQL = "Insert Into bbb (日付,職員ID) values(hizuke,id)" objDB.Close Set objDB = Nothing End Sub

  • Access ADOについて質問です。

    Access ADOについて質問です。 以下コードでレコードセットを返す関数を使用しています。 動作的には問題ないのですが、標準モジュール内のレコードセットをClose及びNothingしていないのが気になります。 Private Sub Form_Open(Cancel As Integer) Dim rs2 As ADODB.Recordset Set rs2 = New ADODB.Recordset Set rs2 = CreateRecordSet("SELECT * FROM T_Standard;") Set Me.Recordset = rs2 rs2.Close: Set rs2 = Nothing end sub '標準モジュール Public Function CreateRecordSet(strSQL As String) As ADODB.Recordset Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=O:\標準DB\StandardBackEnd.mdb" cn.Open Set rs = New ADODB.Recordset rs.Open strSQL, cn, adOpenStatic, adLockReadOnly Set CreateRecordSet = rs ' rs.Close: Set rs = Nothing   ←この部分 ' cn.Close: Set cn = Nothing   ←この部分 End Function 標準モジュール内ではCloseやNothingしなくてもメモリの開放は行われているのでしょうか? アドバイスよろしくお願いいたします。

  • ASPでボタンクリック時にフォームのリフレッシュ

    こんばんわ。 質問です。 ASPで作成した質問ページに表示されている質問の回答と、テキストボックスに入力されている文字列をリフレッシュしたいです。 質問の回答は、ラジオボタンをチェックしてあります。 そして、このあと、ADO接続で、SQLサーバーに接続して、テキストボックスに入力されていた文字列を選択し、文字列がDB内にあれば、その文字列をテキストボックスに再表示します。 以下のようなコードを書きましたが、何も表示されません。 <% Dim objCon Dim objRS Dim strSQL Dim strUserID Dim strOCD 'フォーム内のリフレッシュを行いたい ' コネクションオブジェクトの生成 Set objCon = Server.CreateObject("ADODB.Connection") Set objRS = Server.CreateObject("ADODB.Connection") ' コネクションストリングの設定 objCon.ConnectionString = "Provider=SQLOLEDB;" & _ "User ID=id;" & _ "Password=pw;" & _ "Data Source=server1;" & _ "Initial Catalog=data1" ' コネクションのオープン objCon.Open strUserID = obj.uerID.value set strSQL = "Select ID, dnum from emp Where CorpId='"& obj.userID.value &"'" 'レコードセットのオープン objRS.Open strSQL, objCon, 3 'EOF が True になるまで繰り返し Do Until objRS.EOF if objrs.RecordCount=0 then Msg "正しいIDを入力してください! Insert correct ID ! " else obj.ID.value = strSQL("txtid") obj.dnum.value = strSQL("txtdnum") end if '次のレコードを参照 objRS.MoveNext Loop 'コネクションのクローズ objCon.Close ' コネクションオブジェクトの解放 Set objCon = Nothing %> ご教示いただけると、幸いです。

  • Access ADO RecordSetについて質問です。

    Access ADO RecordSetについて質問です。 Openイベントでフォームにレコードセットを挿入しています。 その際のフォームにはレコードセットをコントロールソースとしてテキストボックスが10個ほどあります。 しかし、テキストボックスを修正しようとしても、入力が出来ません。 レコードセットの作り方が悪いのか、フォームがおかしいのかわかりません。 流れとしては、帳票フォームより、単票フォームを呼び出し、IDでSQLを発行し、レコードセットを挿入しています。 その単票フォームは修正フォームとして更新したいのですが、入力が出来ず困っています。 詳しい方や同じ事で悩んだ方のアドバイスよろしくお願いいたします。 Private Sub Form_Open(Cancel As Integer) Call SetRecordSet("SELECT * FROM T_Agent WHERE ID =" & Me.OpenArgs, Me) End Sub Public BackEndCn As ADODB.Connection Public BackEndRs As ADODB.Recordset Public Sub SetRecordSet(strSQL As String, FormName As Form) Set BackEndCn = New ADODB.Connection Set BackEndRs = New ADODB.Recordset BackEndCn.ConnectionString = DbPass BackEndCn.Open BackEndRs.Open strSQL, BackEndCn, adOpenKeyset, adLockOptimistic Set FormName.Recordset = BackEndRs BackEndRs.Close: Set BackEndRs = Nothing BackEndCn.Close: Set BackEndCn = Nothing End Sub

  • Access VBA フォームに表示したい

    Access2000で、帳票フォームにSQLの値を表示させたいのですが、 以下のコードだとフォーム上に最後のレコードしか表示されません。 取得したデータを正しく表示するにはどうしたらよいでしょうか。 ・フォームのtext1のコントロールソースにfld1と書く 以外の方法でできますか? できればすべて非連結で、作成したいです。 (本当はフォームのrecordsourceも設定したくないのですが それは無理でしょうか?) よろしくお願いいたします。 Private Sub Form_Load() Dim conn As Connection Dim rs As ADODB.Recordset Dim strSql As String Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset strSql = "select * from table1" rs.Open strSql, conn, adOpenKeyset, adLockOptimistic, adCmdText Me.RecordSource = strSql rs.MoveFirst Do Until rs.EOF me!text1 = rs!fld1 rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set connn = Nothing End Sub

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • ADO 「Set」は使ったほうがいいのでしょうか?

    Sub test1() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection Set rs = New ADODB.Recordse End Sub Sub test2() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset End Sub この二つは同じ意味ですか? 「Set」は使ったほうがいいのでしょうか? よろしくお願いします。

専門家に質問してみよう