• 締切済み

レコード登録時に「演算子がありません」構文エラーが発生

【開発言語】 ・C# 【開発環境】 ・Vistual Studio 2005 【質問】 Access databaseに以下のコードでテーブル「Keyword」にレコードを登録しようとしたが、構文エラーが発生した。 --------------コード(ここから)------------- strTmp = "[FM] Group failure for {%GUID}, but can't move. Failure count = {%Count}."; strTmp1 = strTmp.Replace("'", "''"); strSQL = "INSERT INTO Keyword([EventID], [Keyword], [OrderNum]) VALUES(" + EventID + ", '" + strTmp1 + "', " + (num + 1) + ")"; --------------コード(ここまで)------------- しかし、実行時にSQL構文エラーが発生した。 --------------エラーメッセージ(ここから)------------- 'System.Data.OleDb.OleDbException' の初回例外が System.Data.dll で発生しました。 例外発生。ex.Message = クエリ式 '', but can't move. Failure count = ')' の構文エラー : 演算子がありません。 --------------エラーメッセージ(ここまで)------------- 「'」を「''」にエスケープしたにもかかわらず、構文エラーが発生した理由が分かりません。デバッグでSQL文を表示させてみると: strSQL = INSERT INTO Keyword([EventID], [Keyword], [OrderNum]) VALUES(99, '[FM] Group failure for {%GUID}, but can''t move. Failure count = {%Count}.', 1); になっていますので、問題なさそうに見えます。 なお、興味深いのは strTmp = "but can't move"; に変更した場合はSQL文が正常に実行されました! やっぱり、「'」以外の何かの記号もエスケープする必要があったのでしょうか? これから私自身も色々と切り分けしてみますが、もしご存知の方がいらっしゃいましたらぜひお知恵をお貸しください。 よろしくお願いいたします。

みんなの回答

回答No.1

"Keyword"と"("の間に隙間が無いようです。 そのためKeyword関数を探しにいってると思われます。

関連するQ&A

  • SQLの構文エラー??

    お世話になっています。 OS:Win2000 DB:Access2000 です。 Insert文、Update文共に「構文エラー」になってしまいます。 ですが、実行したSQL文をAccessのクエリに貼り付けて実行しても エラーにならず、正常に実行されます。 エラーになったSQL文は以下のとおりです。 INSERT INTO D_Schedule (ShisetuNo,YYYYMMDD,ScheTime,Seq,Title,Memo,AddDate,UpdDate) VALUES (1,20041213,'0900',6,'BBB','BBB',#2004/12/16 14:31:49#,#2004/12/16 14:31:49#) UPDATE D_Schedule Set YYYYMMDD =20041213, ScheTime ='0900', Title ='AAA', Memo ='BBB', UpdDate =#2004/12/16 14:30:06# WHERE ShisetuNo=1 AND YYYYMMDD=20041213 AND ScheTime='0900' AND Seq=2 Insert文の場合、Valueの左側を指定しないで Insert Into D_Schedule Values()だとエラーにならないです。 何かお心当たりのある方、ご指摘お願いいたします。 DB更新はADOで行っています。 ADOの接続方法は Set gobjCon = Server.CreateObject("ADODB.Connection") gobjCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & GCOM_DBNAME & ";" です。 SQL文の実行方法は gobjCon.Execute(strSQL) です。よろしくお願いいたします。

  • 構文エラー : 演算子がありません。

    アクセスからデータをひっぱってくる、SQL文で、 以下エラーメッセージが発生します。 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'D_time <= & w_jyukobistart' の 構文エラー : 演算子がありません。 ちなみに w_jyukobistart は、画面上で入力された、日付データを含む変数です。この変数をSQLに使っていることが、根本的に違うのでしょうか? '実績テーブル(重複処理する用)へのデータ格納のためのSQLstrSQL6 = "SELECT .sID,B.subject,B.D_time FROM (SELECT sID,Min(D_time) AS mtime ,subject FROM Reg1Data WHERE D_time <= & w_jyukobistart GROUP BY sID,subject) A INNER JOIN Reg1Data B ON A.sID=B.sID AND A.mtime=B.D_time GROUP BY B.sID,B.subject,B.D_time ORDER BY B.sID,B.subject;"

  • INSERT INTOステートメント構文エラー

    VB.NET2003+Access2000でデータベース開発中です。 サブフォームを使ってデータグリッドのデータを編集することができるように INSERT、DELETE、UPDATE各コマンドを作成しようとしていたら、 表記ADOエラーが出て次に進めません。 INSERT INTO [編集対象テーブル名]       (列名1,列名2,・・・・) VALUES (?,?,?,?,?・・・・) というサンプルSQLですが、構文エラーって何か記述が抜けているんでしょうか? クエリビルダから「値の挿入」を選んでできたSQLなんですけれど。 解説書を見てもぴったりのコメントがないもので、どうかよろしくお願いいたします。

  • JDBC:ODBCでaccess db にデータをInsertするとき、構文エラーがでました

    insert into InMoneys(Source,Money) values('1',99) java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO ステートメントの構文エラーです。

    • ベストアンサー
    • Java
  • Insert時に一意制約エラーがでる。

    よろしくお願いします。 VB6.0 DB:ORACLE8.1.6 クライアントWIN2000 サーバーWIN2000SERVER VBでデータをINSERTするプログラムを作ったのですが、どうしても一意制約エラーが出てしまいます。 これはデータの都合上仕方が無いのか? (データの主キーに「.」が入っているのでエラーになるのでしょうか?) プログラムが悪いのか? よろしくお願いします。 エラーは2回目の実行部分です。 データ(すべて文字型) 000   001   002 ベルリン12345 ベルリン 12345 ベルリン123.45 ベルリン 123.45 ベルリン123 45 ベルリン 123 45 プログラム strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン12345','ベルリン,'12345')" '処理のチェック If Execute_sql(strSql) = False Then Err.Raise -1, , "失敗しました!" cn.RollbackTrans rs.Close Set rs = Nothing cn.Close Set cn = Nothing Exit Sub End If strSql = "Insert Into KUNIBETU(k000,k001,k002) Values ('ベルリン1234.5','ベルリン','123.45')" '処理のチェック If Execute_sql(strSql) = False Then Public Function Execute_sql(strSql As String) As Boolean Dim cmd As New ADODB.Command Execute_sql = False ' Commandオブジェクトを作成 Set cmd = New ADODB.Command cmd.ActiveConnection = cn cmd.CommandText = strSql ' アクション クエリーを実行 cmd.Execute      ←←←←←←エラー部分 Set cmd = Nothing Execute_sql = True Exit Function

  • SQL Server + VB の開発において

    こんにちは。 SQL Server + VB で開発をしているのですが、下記のソースの ★の部分でエラーが発生するのですが、回避策がわからなくて 困っています。(T T) 'udlパス名 strPath = パス 'コネクション 設定 objCnn.ConnectionString = strPath objCnn.Open 'トランザクション開始 objCnn.BeginTrans 'SQL作成(列名分 データを設定) strSql = "Insert Into User.TableName Values ('2004','02','18')" 'SQL実行★ objCnn.Execute strSql 'エラー判定 If objCnn.Errors.Count > 0 Then objCnn.RollbackTrans Else objCnn.CommitTrans End If エラーNo.:-2147467259 エラーメッセージ:手動または分散トランザクション モードのため、新規接続を作成できません。 別のアプリでSQLは実行できたので、SQLの文法エラーというのは考えにくいので、VBでの操作の仕方が 問題だとは思うのですが、分かる方お願いいたします。m(_ _)m

  • VB6+SQL サーバー 2000 で 実行時エラー '3704' がでます:

    VB6 + SQL サーバー 2000 でDB接続を行っていますが リストのように SELECT 文の後にInsert 文を実行しようとし Re.Closeを実行すると ------------------------------------------------------------- 実行時エラー '3704': オブジェクトが閉じている場合は、操作は許可されません -------------------------------------------------------------  とエラーになり、連続するSQL文を実行する場合のopen ,Close は どのように書けばよろしいのでしょうか。  ネット上で見つけた資料によるとメソッド RE.CancelUpdate を使うと ありましたがこれもエラーとなります。 どなたか 教えていただけないでしょうか。 --- sample ---------------------------------------- Dim Cn As New ADODB.Connection Dim Re As New ADODB.Recordset Connect = "" Connect = "Provider = SQLOLEDB;" _ & "Data Source = サーバー;" _ & "User ID = sa;" _ & "Password = パスワード;" _ & "initial Catalog = database;" ' Cn.Open Connect ' strSQL = "SELECT * from DBTBL WHERE CODE = '000001'" Re.Open strSQL, Cn, adOpenKeyset 'SQL文を実行 Re.Close ' strSQL = "Insert Into MAS1PF (CODE,NAME,TEL,FAX) Values('11111','名前','TEL,'FAX)" Re.Open strSQL, Cn, adOpenKeyset 'SQL文を実行 ' Re.Close Cn.Close

  • PL/SQLのコンパイル

    PL/SQLで書いた構文をコンパイルしようとしたら 「キーワードがありません」というコンパイルエラーが出ます。 キーワードとはいったい何をさしているのでしょうか。 ご存知の方がいましたらご教授ください。お願いいたします。

  • Mysqlエスケープ文字回避の構文について

    現在、 開発言語「VBA」 データベース「Mysql」 で開発をおこなっています。SQL構文を実行する際、エスケープ文字が入力された場合、致命的エラーが発生してしまいます。 INSERT INTO T_Test VALUES ( '\','\','\','100','2009/09/02 16:03:26') この場合回避策はどのようにおこなうのがいいでしょうか? 複数画面でSQL文を実行しているところがあるので一番手間のかからない修正方法はないでしょうか?? VALUESでセットしている値は画面のテキストから入力された値などです。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • to_date使用時に発生するエラーの対処方法について

    Oracle8iにおいて、日付1(date1)カラムは2007年6月5日12時25分20秒というようにvarchar2(14)で定義されており、時分秒でデータを持っています。 それを年月単位で件数をカウントしたいため、 to_dateで変換をかけているのですが(以下のSQL参照)、ORA-1830の エラーが発生してしまいます。 以下のSQLをどのように修正すれば正しく結果が得られるのでしょうか?ご教示下さい。 select to_date(date1,'YYYYMMDD'),count(*) from tableA where date1 >= '20070501000000' group by to_date(date1,'YYYYMMDD') ちなみに、to_dateのところを、to_charにしてみると、ORA-1481が発生してしまいます。

専門家に質問してみよう