• 締切済み

DataAdapterで取込するとき ?マークでエラー

環境:Windows XP Visual Basic 2008 DB:Access MDB OLEdbAdapterでプログラムで作ったテーブルデータを、MDBへINSERT若しくはUPLODEしています。 あるフィールドのテーブルデータに?マークを入れてしまうと、 「指定されたデータ量がフィールド サイズを超えています。データ量を減らし、挿入または貼り付けを行ってください。」 と表示されてしまいます。 フィールド例 NO(int32):名前(String):コメント(string):担当(string) 1    :テスト1  :テストだ    :大田 2    :テスト2  :テストよ    :城田 3    :テスト3  :テストさ    :宮田 4    :テスト4  :テスト?    :千堂 パラメータ(INSERT) dbAdapter.InsertCommand = New OleDbCommand( _ "INSERT INTO テーブル(" & _ "`NO`, `名前`, `コメント`, `担当`)" & _ "VALUES(?, ?, ?, ?)", _cn) _dbAdapter.InsertCommand.Parameters.Add( _ New OleDbParameter("NO", OleDbType.Integer, 0, "NO")) dbAdapter.InsertCommand.Parameters.Add( _ New OleDbParameter("名前", OleDbType.Char, 60, "名前")) dbAdapter.InsertCommand.Parameters.Add( _ New OleDbParameter("コメント", OleDbType.Char, 60, "コメント")) dbAdapter.InsertCommand.Parameters.Add( _ New OleDbParameter("担当", OleDbType.Char, 20, "担当")) レコード4のコメント「テスト?」の?をとると正常に取り込むことができ、?を付けるとエラーがキャッチされます。 MDBで直接インポートなどのテストをしてみましたが、問題なくインポートできました。 VB側でのOleDbParameterなどの設定なのか、MDBでの受入の設定なのか、探すポイントがいまいちわからない為、困ってます。 ヒントでも良いですし、どこから調べていけばいいかでも結構ですので、ご返答お願いします。

みんなの回答

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

VALUES('?', '?', '?', '?')

buraigasho
質問者

お礼

回答ありがとうございます。 一応、私も試してはみたんですが、VALUES('?', '?', '?', '?')とすると、逆にどれもこれもINSERTやUPDATEすることができませんでした。 囲い込むことを行わないとけなそうなところは、なんとなくわかるんですが・・・ テーブルデータを作る時点で、囲んだ文字列を作ってしまえばよいのかな?とも思ったりもしたんですが、MDBで受け入れたときに「’」や「”」までデータに入ってしまって・・・ ふさがってます。 宜しくお願いします。

関連するQ&A

  • VB.net エラー「オブジェクト参照がオブジェクトインスタンスに設定されていません」

    タイトル通り『オブジェクト参照がオブジェクトインスタンスに設定されていません』というエラーが発生し、全く僕の脳では解決しないので、ここに質問させて頂きます。 VB.netでフォームロード時に、Accessに登録されている件数分だけテキストコントロールを動的に配置(配列処理をしています)、そこにAccessからデータを取り込みます。 追加ボタンで一件分のテキストコントロールを一番下の行になるよう配置。そこにユーザがデータを入力し、更新ボタンを押すことで、Access上にINSERTする。 というような処理です。 で、INSERTはされるのですが、その後textboxの中身を配列の最初から確認しようしたり、データを入れようとしたり、空にしようとしたりすると上のエラーが表示されます。 'テキストの配列' Private field_text(,) As System.Windows.Forms.TextBox Sub s_insert() ' ’ 更新ボタン時の処理 ' Const strinsert As String = "INSERT INTO 社員マスター (SNO,SNAME) VALUES (@sCode,@sName)" Dim oConn As New System.Data.OleDb.OleDbConnection Dim oCommand As New OleDbCommand Dim i As Integer Dim j As Integer Dim insert_ok As Integer 'DB接続のための処理(省略)      'SQL文の設定 oCommand.CommandText = strinsert insert_ok = 0 oCommand.Parameters.Add(New OleDbParameter("@sCode", OleDbType.Char, 10)) oCommand.Parameters("@sCode").Value = field_text(更新する行の値, 0).Text oCommand.Parameters.Add(New OleDbParameter("@syainName", OleDbType.Char, 20)) oCommand.Parameters("@sName").Value = field_text(更新する行の値, 1).Text insert_ok = oCommand.ExecuteNonQuery() 'SQL文を実行' If insert_ok > 0 Then MessageBox.Show("新規登録完了", "メッセージ") End If 'DB接続を閉じる処理(省略) For i = 0 To 登録行数 - 1 For j = 0 To 1 f_text(i, j).Text = ""  ←ここでエラー Next j Next i End Sub 随分と省いてあり、意味の分からない部分が多数あると思いますが、何か気付いたことや他の部分を書け!という場所があれば教えてください。 一日やっても解決せずに、本当に困り果てています。

  • <VB.NET>INSERT文でDBにデータを入れたい 

    プログラム初心者です。 ボタンを押したらtextboxの値がDBのテーブルに格納されて画面が閉じるという処理をしたいです。 そして他の画面でボタンを押すとINSERT済みのテーブルが出るという 処理をしようと思っています。 今のところは、他の画面でボタンを押してもINSERT済みのテーブルが でないという状態です。元のテーブルのデータはでます。 サンプルを見つけてやってみたのですが、思った結果がでません。 public sub botton1-click dim sql_insert as string dim cmd_insert as oledbcommand dim strconn as string = "provider = ~OLEDB4.0 = ~.mdb" DA = New oledbDataAdapter conn = New oledbconnection(strconn) sql_insert = "INSERT INTO A組(名前) VALUES(TextBox1.Text) cmd_insert = New oledbcommand(sql_insert,conn) DA.insertCommand = cmd_insert Me.colse end sub DataAdapterはdatasetを使わず直接DBに格納させるINSERTの時にでも 使うのでしょうか? 自分自身まだよく分かっていないので、正しいコードと処理の流れを 教えて欲しいです。 使っているのはaccess2000、VB.NET2003です。よろしくお願いします。

  • VB DB更新時にパラメーターへ値のセット

    データベースの更新についてご指導下さい。 VB2010からSQLサーバーのデータベースに接続しております。 dataAdapter.Updateによりデータベースを更新する際の パラメーターへ値をセットする方法を教えて下さい。 テーブル名Test Code Name ------------ A   Suzuki 希望する処理 テキストボックスに入力された名前に変更 例) Suzuki → Yamada ○フォームの変数として定義 Dim dataAdapter As New SqlDataAdapter Dim dataSet As New DataSet ○FormLoad時にSelectCommandとUpdateCommandを設定 Dim SQL As String = "" Dim command As SqlCommand Dim connection As SqlConnection = New SqlConnection(~) SQL = "SELECT * FROM Test WHERE Code = @code " command = New SqlCommand(SQL, connection) dataAdapter.SelectCommand = command dataAdapter.SelectCommand.Parameters.Add("@code", SqlDbType.Char) SQL = "UPDATE Test SET Name = @name WHERE Code = @code" command = New SqlCommand(SQL, connection) dataAdapter.UpdateCommand = command dataAdapter.UpdateCommand.Parameters.Add("@code", SqlDbType.Char) dataAdapter.UpdateCommand.Parameters.Add("@name", SqlDbType.Text, 50) ○データ表示時にはこれで表示されました。 dataAdapter.SelectCommand.Parameters.Item("@code").Value = ComboBoxCode.text dataAdapter.Fill(dataSet) ○このSelectCommandを参考にこのように書いて見たのですが更新されません。 dataAdapter.UpdateCommand.Parameters.Item("@code").Value = ComboBoxCode.Text dataAdapter.UpdateCommand.Parameters.Item("@name").Value = TextBoxName.Text dataAdapter.Update(dataSet) どのようにしたら実行時にパラメーター化したところへデータをセットできるのでしょうか? データセットに値が入っていないのでは?と予想したのですが…。

  • VB.NET、mdbに新しいデータを追加したい

    超初心者で申し訳ありません。下のプログラムにおいてオペレータ名が一致する場合には 更新(UPDATE)する。一致するデータが無い場合には新規登録を行いたいのですが どのように書いたらいいのかさっぱりでNETを相当探したのですが回答が見つかりません。 お手数ですがどなたか助けていただけませんでしょうか。なお、一致する場合には 更新(UPDATE)は動作するようになりました。 VBを始めて2ケ月になります。Microsoftの文献を見ても難しくてまだ理解できるレベルに達していません。どなたか、よろしくお願い致します。 「データ構造」 ID          integer オペレータ名   string ランク       integer パスワード    string 補足       string Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click '■■■■■■■■■■■■■■■■■■■■■■■■ '■■■   オペレータの新規/更新登録   ■■■  '■■■■■■■■■■■■■■■■■■■■■■■■ '----------------------------------------------------------- 'コネクションを作成 Dim CurrentDir As String = System.IO.Directory.GetCurrentDirectory() Dim cn As New OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & CurrentDir & "\operator.mdb" '**************** コマンドを作成 **************** Dim OPE As String Dim PWORD As String Dim HOSOKU As String Dim RANK As Integer OPE = オペレータ名.Text RANK = ランク.Text HOSOKU = 補足.Text PWORD = パスワード.Text Dim cmd As New OleDbCommand( "UPDATE table1 " & "SET ランク = ? " & "," & "パスワード = ? " & "," & "補足 = ? " & " WHERE オペレータ名 = ? ", cn) '************** パラメータを作成 **************** cmd.Parameters.Add("ランク", OleDbType.Integer).Value = RANK cmd.Parameters.Add("パスワード", OleDbType.Char).Value = PWORD cmd.Parameters.Add("補足", OleDbType.Char).Value = HOSOKU cmd.Parameters.Add("オペレータ名", OleDbType.Char).Value = OPE '実行 cn.Open() cmd.ExecuteNonQuery() '-------------------------- Dim COUNTC As Integer COUNTC = cmd.ExecuteNonQuery()   '************************************ elseの中に簡単に記載すのって難???*** If COUNTC > 0 Then MessageBox.Show("更新 完了")     Else 'INSERTの手順       ’★ ここにmdbの中に 項目値 OPE、RANK、HOSOKU、PWORDを挿入(追加)        する命令を入れたい。   '実行 cmd.ExecuteNonQuery() End If ’********************************** '-------------------------- cn.Close() End Sub

  • Npgsql+VB2008環境にてDataAdapterでのデータの追

    Npgsql+VB2008環境にてDataAdapterでのデータの追加できない この環境で、以下のプログラムを書いていますが、なぜか追加されません。問題はどこにあるのでしょうか。あとトランザクション処理も加えたいのですが。NpgsqlのVBサンプルがなくて・・・まして.NETをはじめたばかりで。初歩的なことですいません。 宜しくお願いします。 Dim strCnn As String strCnn = /* PostegreSQL接続文字列 */ Dim Cnn = New NpgsqlConnection(strCnn) Dim npgDataSet As DataSet = New DataSet Dim npgDataAdapter As Npgsql.NpgsqlDataAdapter npgDataAdapter = New Npgsql.NpgsqlDataAdapter("SELECT * FROM T_Zip;", Cnn) npgDataAdapter.Fill(npgDataSet, "T_Zip") Dim npgCommand = New NpgsqlCommand("INSERT INTO T_Zip(ZipCode, Address) VALUES (:Code,:Adr);", Cnn) npgCommand.Parameters.Add("Code", SqlDbType.NVarChar, 10, "ZipCode") npgCommand.Parameters.Add("Adr", SqlDbType.NVarChar, 50, "Address") npgDataAdapter.InsertCommand = npgCommand Dim dt As New DataTable npgDataAdapter.Fill(dt) Dim tempRow = dt.NewRow() tempRow.BeginEdit() tempRow("ZipCode") = "487-0023" tempRow("Address") = "AAAA" tempRow.EndEdit() dt.Rows.Add(tempRow) npgDataAdapter.Update(npgDataSet, "T_Zip")

  • VB2010 SQLのUPDATE文エラー

    VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub

  • ASP.NETで Web.Configの定義がエラーになります。

    Web.configに以下の定義 (フォームでSqlDataSouceを貼り付けて定義) <add name="TestdateConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\wwwroot\Test\App_Data\Test.mdb" providerName="System.Data.OleDb" /> 次にフォームのVB側で以下のサブルーチンを作成 (TestConnectionString)で定義がされていませんなる エラーがでます。定義はしているのですが何故でしょうか? 教えて下さいよろしくお願いいたします。 Protected Sub updateTimestamp(ByVal syouhinCD As String, ByVal updateFieldName As String, ByVal updateData As String) Using connection As New System.Data.Odbc.OdbcConnection(TestConnectionString) Dim updateCommand As String updateCommand = ("UPDATE Test SET {1} = Now(), {2} = 'dummy' WHERE({4} = 42)") Dim command As System.Data.Odbc.OdbcCommand = New System.Data.Odbc.OdbcCommand(updateCommand, connection) connection.Open() command.ExecuteNonQuery() connection.Close() End Using End Sub

  • orace 変更表エラーを回避するトリガー

    お世話になります。 今回、あるTBL1のフィールド:[氏名]を入力すると同テーブルのフィールド:[社員番号]が自動で セットされるようなトリガーを作成しようとおもっています。 しかし、変更表の更新には複合トリガーを使用しなければ出来ないというのはわかったのですが、 うまいことコンパイルできません。下記に前提条件と自分なりに作成したトリガーをを記載しますので どなたか助けてください。 <前提条件> ・セットされる社員番号はプライマリーキーとなっている。 ・更新される条件はTBL1のフィールド:[データ区分]が2or3のとき <作成したトリガー> CREATE OR REPLACE TRIGGER TRG_SET_AUTO_SHAIN_NO FOR INSERT ON CM_PORTAL_SHAIN COMPOUND TRIGGER REFERENCING OLD AS OLD NEW AS NEW WHEN (NEW.DATA_KBN in (2,3)) DECLARE GRP_CD VARCHAR2(3); SEQ_NO NUMBER(4); NEW_SET_NO VARCHAR2(7); AFTER STATEMENT IS BEGIN IF :NEW.DATA_KBN = 2 THEN select SQ.GROUP_CD,SQ.SEQUENCE_NO + 1 into GRP_CD,SEQ_NO from CM_HAKEN_GROUP_SEQUENCE_MT SQ where SQ.GROUP_CD = '999'; ELSE select SQ.GROUP_CD,SQ.SEQUENCE_NO + 1 into GRP_CD,SEQ_NO from CM_HAKEN_GROUP_SEQUENCE_MT SQ where SQ.GROUP_CD = '888'; END IF; NEW_SET_NO := substr(GRP_CD,LPAD(SEQ_NO,4,0)); INSERT INTO CM_PORTAL_SHAIN (SHAIN_NO,SHIMEI_LOCAL,DATA_KBN) VALUES (NEW_SET_CD,:NEW.SHIMEI_LOCAL,:NEW.DATA_KBN); AFTER EACH ROW IS BEGIN INSERT INTO CM_PORTAL_SHAIN (SHAIN_NO) VALUES (NEW_SET_NO) END; / ちなみにこれでコンパイルするとエラーが発生します・・・ どこがいけないのでしょうか?

  • <>&などを保存する方法をおしえてください。

    <>&などを保存する方法をおしえてください。 NameTextBox CommentTextBox 保存ボタン があり保存ボタンを押すと 下記コードが実行されるようにしました。 これで、保存はできるようになったのですが <>&などを使用するとエラーとなってしまします。 <>&を使用するにはどのようにしたらいいのでしょうか? 教えてください。 Dim strSQL As String = "INSERT INTO tableA (Name,Comment) VALUES (@Name,@Comment)" Using con As New SqlConnection(conStr) Dim command As New SqlCommand(strSQL, con) con.Open() Using cmd1 As SqlDataReader = con.CreateCommand() cmd1.CommandType = CommandType.Text Try with cmd1 .Parameters.Add("@Name", SqlDbType.NVarChar) .Parameters.Add("@Comment", SqlDbType.NVarChar) .Parameters("@Name").Value = NameTextBox .Parameters("@Comment").Value = CommentTextBox End With cmd1.CommandText = strSQL cmd1.ExecuteNonQuery() Catch er As Exception Finally con.Close() Catch ex As Exception Finally con.Close() End Try End Using End Using

  • VB2008とObjectBlowser9の連動について

    お世話になります。 先日、こちらのサイトでTextBoxの暗号化について質問させていただいたのですが、 現在、ObjectBlowser9のファンクションに、暗号化の dbms_obfuscation_toolkit.desencrypt( input_string => orgstr, key_string => keystr, encrypted_string => encstr ); を作成し、VBからそのファンクションに接続しようと考えております。 ですが、 Using con As New OracleConnection(builder.ConnectionString) con.Open()  Using cmd As New OracleCommand With cmd .Connection = con .CommandType = CommandType.StoredProcedure .CommandText = "CON_PASS_ANGO" .Parameters.Add("keystr", OracleType.VarChar).Value = keystr .Parameters.Add("orgstr", OracleType.VarChar).Value = orgstr .Parameters.Add("encstr", OracleType.VarChar).Direction = _ ParameterDirection.ReturnValue .ExecuteNonQuery() MessageBox.Show(String.Format("{0}X{1}={2}", _    keystr, orgstr, .Parameters("encstr").Value)) End With End Using End Using と記述したところ、 .Parameters.Add("encstr", OracleType.VarChar).Direction のところで、 パラメータ 'encstr': 可変長データ型 : String のサイズが設定されていません。というエラーが出てしまいます。 エラーの意味も調べたのですがいまいち理解できず、停滞しているところです。どなたか解決策をご提示願えないでしょうか、 よろしくお願いします。