• 締切済み

VB6より長文INSERT文でORA1756単一引用符が閉じられていないが発生する

初めまして。 VB6、ORACLE8iでダイナセットを使用しテーブルに対してINSERT文を 発行していますが、INSERT文が長文になると”単一引用符が閉じられていません” とエラーが返ってきます。このSQL文と同一のものをPLUSにて実行させても 同一のエラーが発生するのですが、メモ帳等で改行して一行を短くすると 正常にINSERTされます。 それならと思い、SQL文作成コード内に改行コードを挿入したのですが VB上からは同じようにエラーが返ってきます。改行コード入りのSQL文を イミディエイトより取り込みPLUSにて実行させると正常に動作します。 どうすればVB上から正常実行できるのでしょうか? 初心者ゆえどうすればよいかさっぱりわからなくなりました。 VB上からは何か制約があるのでしょうか? どなたかご存知の方ご教授願います。 長文失礼しました。

みんなの回答

  • delsol
  • ベストアンサー率33% (1/3)
回答No.1

文字列に「'」は含まれていませんか? Commandオブジェクトを使うことをお勧めします。 的外れでしたらすみません。 あと、SQL文を書いた方が回答が来易いと思います。

hiroshi2001
質問者

お礼

ご回答ありがとうございます。 恥ずかしい話ですが、INSERTする変数に NULLが入っていた為に発生しておりました。 お礼が遅くなり申し訳ありませんでした。

関連するQ&A

  • まれにinsertエラーが発生する

    VB6からWindows版PostgreSQL8.2.4へ書き込みを行っています。 まれにinsertエラーが発生する為、困っています。(2日~7日に1回) エラー時のSQLログがあり、SQL文に間違いが無いことは確認ずみです。 エラー詳細を取っておらず詳細がわかりません。 (実際に現象を発生させようとしましたが、発生しません。) 追加するテーブル自体に主キーは設定していません。 データの書き込みは15秒に2レコード位なのですが、Update文の直後のinsert文がまれに失敗します。 とりあえず、トランザクション処理で回避していますが、PostgreSQLの設定値などの変更により、回避出来るのでしょうか。 また、この様な事はよくあることなのでしょうか。 説明が分かりづらく申し訳ありませんが、 宜しくお願いします。

  • insert文について

    Access2000を使用しています。 テーブルがメインとサブの2つあり、 どちらにも同じ項目があります。 その項目をリレーションシップで関連付けました。 フォームがあり、いくつかあるテキストボックスは非関連です。 そのテキストの1つが関連付けた項目となります。 フォームに入力した項目はほどんどがサブテーブルにinsertされます。 しかし、SQL文は実行されるのですが、 そのあと、エラーメッセージにより追加されることができません。 リレーションシップをしていると追加することができないのでしょうか? 項目名は ・コード ・学校名 ・学部

  • 見たことのないINSERT文

    お世話になります。 他人の書いたSQLを解析して以下のようなコードを見つけました。 CREATE TABLE OYA ( ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / CREATE TABLE KO ( ID NUMBER NOT NULL, OYA_ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / INSERT INTO ( SELECT ID ,OYA_ID ,NAME FROM KO WHERE EXISTS ( SELECT ID FROM OYA WHERE NAME LIKE '%1' ) ) VALUES ( 1 ,1 ,'KODOMO-1' ); INSERT文でテーブル名を指定するかわりにSELECT文を指定しています。 SELECT INSERT文は知っていますが、このような表記は初めてです。 (文法エラーにならないのに驚きました) おそらく意図するところは、ある条件に一致したOYAが存在する場合に、KOをインサートするのだと思いました。 実際は、OYAがなくてもINSERTは実行されてしまいますが。。。 このような表記のINSERT文の説明が書いてあるサイトをご存知の方がいらっしゃいましたら、よろしくお願いします。

  • 長いSQL文を実行するには?

    Oracle10gを使用しています。 数千バイトある長いSQL文(insert処理です)を実行したいのですが、どうやらバイト数の制約の為にinsert出来ません。 何か対処方法があれば、教えてください。 よろしくお願いします。

  • VB2008、Insertのループをかけたいのですが・・・

    初の質問になりますが、よろしくお願いします。 現在、VB2008にて、DataGridViewに入力した内容を、Insertで登録処理をするという作業を行っているのですが、変わった現象が起きてしまうのです。 まず、ボタンクリックのイベントで、DataGridViewの内容を一行づつ取り込み、Insertのループを行うと言うものなのですが、 DataGridViewにある列は、'日付','出勤時間',退社時間','~~と続くのですが、日付だけしか一行づつ取り込めず、それ以外の列項目は、値の入っている列までしか取り込めないんです。 たとえば、二行目まで値を入れ、三行目からはすべてのCellをNullの状態にしてInsertのループをかけると、二行目にしか入らない値が、三行目以降まで続いてしまうんです。これってどういうことでしょうか、、、ちなみに日付だけはきちんとInsertされるのです。どなたかお分かりになる方いらっしゃらないでしょうか。 ちなみにこれがソースです。 For r As DataGridViewRow in DataGridView1.Rows 日付 = DataGridView1(0, r.Index).Value If IsDBNull (DataGridView1(9, r.Index).Value) = False Then 出勤時間 = DataGridView1(9, r.Index).Value Else If IsDBNull(DataGridView1(5. r.Index).Value) = False Then 出勤時間 = "0" End If '列が多いので、省略します。 'ここからInsert sql = "Insert into Time Seet" sql &= "Values (" sql &= "'" & 日付 & "'" : : Next r という形です。列が長いので、だいぶ省略しましたので伝わりにくいかと思いますが、よろしくお願いします。 ちなみに他のサイトでは、 ループの外側でパラメータクエリを作成して、ループの中ではパラメータの設定とSQLの実行のみにすればよいです。 と言われましたが、パラメータクエリというのがイマイチ理解できなかったので・・・ できればそれらに関する情報や考え方なども教えてくださるとうれしいのですが・・・よろしくお願いします。

  • VB.NET ORA-12170

    http://okwave.jp/qa/q8420174.html ↑ VB.NETで作成したアプリでこちらの質問で無事解決し、違う環境で試したところORA-12170の タイムアウトエラーが発生しました。 SQL*Plusからの接続は問題ありません。 わからないのはWEBアプリの方は接続できるのに、コンソールアプリの方がこのエラーになってしまいます。 どちらのアプリの接続文字列も同じData Sourceを指定してます。 「db1」がTNSNAMES.ORAに記述している識別子になります。 WEBアプリ側 (Web.configに記述) <connectionStrings> <add name="oracle" connectionString="Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1" providerName="System.Data.OleDb" /> </connectionStrings> コンソールアプリ側 (INIファイルに記述) ConnectionString=Provider=OraOLEDB.Oracle;Data Source=db1;Password=pass1;User ID=user1 一般的にはDBサーバにネットワークがつながってないなど単純な理由のようですが、 WEBアプリは接続できるので、そういうことはあり得ないと思います。 コンソールアプリの問題と思うのですが、どんな原因が考えられるでしょうか?

  • プログラム内のINSERT文が実行されない。

    CGIのソース内でINSERT INTO テーブル名 SELECT文を使って行追加しているのですが、処理がエラーの場合の処理が動いてしまい実行されません。 ただ、同じSQL文をphpMyAdminのデータベースサーバーのSQLにコピペして実行すると問題なく行追加されました。 なので、問題があるとしたらそのプログラムだと思うのですが、原因がつかめません。 SQL文を変数に格納してから実行させてその結果によってエラーメッセージを出す処理は以下の通りです。 $sql = (INSERT INTO テーブル名 SELECT ****** FROM ***** WHERE ******) $ins_result = $db->prepare($sql); $num = $ins_result->execute; if ( not $num ) { &db_rollback; &db_disconnect; &msgout("エラー1","エラーメッセージ","システムエラー"); } すでに作られているプログラムを修正しています。ちなみに、そのプログラムを作った人はすでに現場にはいませんので聞けません。 msgout内に$ins_resultと$numを表示してみましたら、前者は「DBI::st=HASH(0x9f38560)」で、後者は何も入っていないつまり空でした。 【if ( not $num )】のif文も意味が分からないです。私の知識から解読すると $numの否定が真だったらカッコ内の処理を実行するという意味だと思いますが、$numは空なので空でないことが真だったらとなりますが、どういう意味なんでしょうか? プログラム内のSQL文がなぜ実行できなかったのかその原因を調べることができるツールとかあれば試すことができるのですが、データベースで実行して成功したところを考えるとあまり意味ないかもしれませんが。 過去カラム数が違ってたとか、追加データの長さが範囲外だったとかが原因だったことがありましたが今回はそのどちらでもなさそうです。

    • ベストアンサー
    • CGI
  • Pro*CでのINSERT文

    こんにちわ。 Pro*CでのINSERT文について質問させてください。 例えば、CUSTOMERSというテーブルを作り、メンバーをC_ID, CNAME, ADDRESSとしたときに、INSERT文を使用しまして、 新規のお客さんのデータをいれようと考えています。そのとき、C_IDの値をすでに入れてあるC_IDの最大値+1として、格納したいのですが、どうも旨くいかずに行き詰っています。MAX(C_ID)を使用することは分かっているのですが、INSERTとの組み合わせ方がわからず、困っています。 どなたかうまいやりかた(SQL文)があれば教えていただけないでしょうか? もちろん、C言語で書きましたプログラム内に組み込みたいと考えています。 OSはUNIX(SUN)、DBはORACLE9を使用しています。 どうかよろしくお願いいたします。

  • SQLについて

    うまく説明できるるかわかりませんが、 以下、解決方法がもしあれば教えてください。 VBで Oracleデータベースを接続し、 SQL実行をするツールを作成しています。 概要は、二つのデータベースを接続しています。 一つには、職員番号と、所属コード 二つ目には、職員番号と、異動地コード 選択した、所属コードから職員番号を引っ張ると、10名が該当して、 その全員に選択した異動地コードをinsertするというものです。 問題なく、できたのですが、 10名のうち1人は、別途で異動地コードを入力しており、そのあとに完成したセレクト文を流すと、一意制約に引っかかります。 職員番号と異動地コード、さらにinsertする日付などがユニーク制約をかけているので、理由もわかるのですが、はじかれる1人以外の9名だけinsertすることは可能なのでしょうか? できるかどうかもわからず、困っています(;_;) なにかいい方法があれば、教えてください。

  • INSERT文について…。

    お世話になります☆ データベースへのデータ登録をJavaからSQL文を実行して行いたいの ですが、一つのテーブルのNOという列にPRIMARY KEYとAUTO_INCREMENT制約を設定しており もう一つのテーブルのNOという列にはPRIMARY KEYだけを設定していると仮定します。 一度のSQLの実行で二つのテーブルに登録を行いたいのですが、 2回目の実行でSQLExeptionが発生してしまいます…。 理由は、AUTO_INCREMENTを設定していない方のテーブルで同じNOで 登録をしようとしているからだと思うのですが(違うかな?) 両方にAUTO_INCREMENTを設定しても1回しか登録できずエラーが 発生してしまいます。 何か考えられる対策はありますでしょうか? まだ勉強したてで説明不足な点もあるかも知れませんが捕捉も致します。 宜しくご教授願います…。

    • ベストアンサー
    • MySQL