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

どなたかご存知の方ご教授願います。
長文失礼しました。

A 回答 (1件)

文字列に「'」は含まれていませんか?


Commandオブジェクトを使うことをお勧めします。

的外れでしたらすみません。
あと、SQL文を書いた方が回答が来易いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/08 09:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBで使用するAccessのSQL(INSERT文)

VBで使用するAccessのSQL(INSERT文)ですが、
下記のようなSQLはどのようにすれば良いのでしょうか?

テーブル:A
フィールド:B(Text型),C(Yes/No型)
作成したいSQL文:
Textに空白、Yes/NoはTrueを入れ、
既存のフィールド内の一番下に
作成(追加)する。

Aベストアンサー

AccessのJet(MDB)と判断して良いですよね?

もし、Bのフィールドが空文字列の許可が「いいえ」の場合は、
Insert into A (B,C) values (Null, Yes);
と、なります。

テキストで空白とは、Nullや""(空文字列)、または" "ともとれるので言葉が難しいですね。
プログラムを作る時はここらへんの意思統一ができてないとトラブルの元です。

QOracle SQL*Plus Dateタイプのinsertでエラー

date タイプを含むデータをinsert するとエラーが出ます。
たとえば、
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
purchase_date DATE
)
;
で表を作り、

INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, '5-NOV-00');
を実行すると、
”ORA-01858: 数値を指定する箇所に文字が指定されています”
というエラーが'5-NOV-00'の下に星マークが出て表示されます。

自分のマシンに大学から渡された生徒用のOracle8iをWindows2000にインストールして教本に載っていた上のような文を実行したところ、エラーが発生しました。大学のマシンでは、うまくいきました。

何か設定するんだと思いますが、その方法がまったく分かりません。どうしたらエラーをなくすことができるでしょうか?

date タイプを含むデータをinsert するとエラーが出ます。
たとえば、
CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
product_price NUMBER(4,2),
purchase_date DATE
)
;
で表を作り、

INSERT INTO plsql101_purchase VALUES
('Product Name 1', 1, '5-NOV-00');
を実行すると、
”ORA-01858: 数値を指定する箇所に文字が指定されています”
というエラーが'5-NOV-00'の下に星マークが出て表示されます。

自分のマシンに大学から渡された生徒用のO...続きを読む

Aベストアンサー

Fireworksさん こんちは

ご自宅のORACLEの NLS_DATE_FORMAT はどうなっていますか?
初期化パラメタに設定されているはずですので確認してみてください。
'5-NOV-00'での形式での日付データを挿入できないのであれば、なにか別の形式になっている可能性があります。

「初期化ファイルの修正後ORACLE再起動」か、
SQL*Plusより、
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY';
で変更できると思います。

QSQL (insert文)文の質問です。

すみません、緊急で調べる時間があまりなくてお尋ねします。
次のDBが2つあります。

データベース名:A_DATA
内容  名前
    番号
    登録年月日

これには既にデータが投入されています。

そして

データベース名:B_DATA
内容  名前
    番号
    住所
    電話
    国籍

とあった場合B_DATAにinsertを行うのですが、
その際のデータの内容はA_DATAの内容を検索してその
値を投入したいのです。
A_DATAの検索条件は登録年月日が本日のもので
B_DATAの名前と番号の値は

名前=A_DATAの名前
番号=A_DATAの番号


でINSERTしたいのです。


意味がわかりますでしょうか?
多量にデータがあるのでなんとかうまいSQLを考えてるのですが、あまり詳しくないもので。。。
すみません誰かよろしくお願いします。

Aベストアンサー

>それではOracleの場合

#2の方の回答は間違ってます。SQLエラーになります。
valuesの中にselectは記述できませんし、
CURRENT_DATEなんてキーワードありません。

insert into b_data select 名前, 番号 from a_data
where 登録年月日 = truc(sysdate)

または、

insert into b_data (名前, 番号) select 名前, 番号 from a_data
where 登録年月日 = truc(sysdate)

です。

QSQL*PLUSでファイルからDELETE文

お世話になります、

Oracle8のSQL*PLUSを使用方法についての質問です。

ローカルにファイル(delete.sql)を作成して
SQL*PLUSからそのファイルを流してファイルの中身の処理を実行するという方法をご存知の方が
いらっしゃったらおしえてください。

--delete.sqlの中身---------
delete from table_a
delete from table_b
delete from table_c
delete from table_d
delete from table_e
以下省略

よろしくお願いします。

Aベストアンサー

SQL*Plusには、ファイルの内容をリダイレクトで実行する機能があります。

DOSプロンプトから

>PLUS80W.EXE system/manager@orcl < delete.sql

と入力してください。

ただし、ユーザー名、パスワード、インスタンス名などはそちらの環境に合わせてください。
ちなみに、delete.sqlの最後に、exitと記述しておけば、終了後にSQL*plusを自動的に終了します。
また、delete.sqlの先頭に、spool delete.logとしておけば、実行のログを作成できます。

SQL*Plusの実行ファイル名はOSやOracleのバージョンによって変わりますが、NTのOracle8なら上記のファイル名で大丈夫だと思います。

QSQLのINSERT文について

SQLのINSERT文について

Accessを使用していて1列目が管理Noとなっています。
その時のレコード数を管理Noに指定したいのですがうまく行きません。
Insert Into TableA Values((Select Count(*) From TableA),'データ')
原因もしくは他の方法があればご教授お願いします。

Aベストアンサー

Values の中に Select は書けません。
下記のように書いたらよいはずです。

INSERT INTO TableA SELECT COUNT(*), 'データ' FROM TableA

参考URL:http://office.microsoft.com/ja-jp/access-help/HP001032245.aspx?CTT=1


人気Q&Aランキング

おすすめ情報