Paradoxで特殊文字列のInsertは?


頑張るマン  2005-05-03 09:14:39  No: 14590

delphi5+Paradoxで作成している素人です。
特殊文字のInsertで困っています。。。
CREATE TABLE tbl_wrk

KEY_ID INTEGER ,' +
コメント VARCHAR(100) ,' +
PRIMARY KEY(KEY_ID)' +
)
のようなテーブルにInsertします。
insert into "tbl_wrk" values(1, "ここはコメント欄") --> OK
insert into "tbl_wrk" values(997, "`:NG?")      --> NG
insert into "tbl_wrk" values(997, "*`:明日の予定は;★★。")  --> NG
といったように、コメント欄に特殊な文字「`」(Shift+@)とかが入ると
エラーになります。

このような特殊文字等はどのように対応するのでしょうか?
教えてください。
シングルコーテーションや、ダブルコーテーションがあるのは
わかりましたが、「`」の対応がわかりません。


AY  2005-05-03 21:02:02  No: 14591

delphi5+Paradoxの環境はありませんが
D7のDatabase Desktopで試しました。(D5も同じと思います)
書かれている内容を、SQLで実行しましたが問題ありません
確かに  ダブルコーテーションなどの文字は、渡す時に識別するので
""のように2重に表記したりする必要はありますが・・
エラーというのは  どの様なエラーですか?

きっと、コードで記述されていることと思います。
(CREATE文のところから判断すると)
insert文等の記述の部分を  挙げて見られてはいかがですかね?


HOta  2005-05-04 00:47:42  No: 14592

頑張るマンさん、こんにちは

直接データーベースディスクトップで動かすと、キー違反が出ますが、
このことではないのでしょうか?同じ997には登録できません。


AY  2005-05-04 02:39:37  No: 14593

ExecSQLで、エラーになりますね。
D7でもなりました・・

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    Query1.SQL.Clear;
//    Query1.SQL.Add('insert into "c:\aaaa" values(1, "ここはコメント欄")');
//    Query1.ExecSQL;

    Query1.SQL.Add('insert into c:\aaaa values(997, "`:NG")');
    Query1.ExecSQL;

end;

` 若しくは : のみであれば  問題ないですが  `:  の組み合わせはだめですね。
知りませんでした・・
バリュー値の内容であって、記述の仕方の問題ではないので
解決は、申し訳ないですが?です。
この組み合わせを回避するしかないかも・・


HOta  2005-05-04 03:18:18  No: 14594

TQueryのSQLを[insert into "tbl_wrk" values(:Key_ID, :Comment)]のようにパラメターを設定して、
 
  Query1.Close;
  Query1.ParamByName('Key_ID').AsInteger := 999;
  Query1.ParamByName('Comment').AsString := '*`:明日の予定は;★★。';
  Query1.ExecSQL;
で登録できるようです。


AY  2005-05-04 06:28:11  No: 14595

HOtaさん、書き込みで原因は見えました。
:明日の予定は  をパラメータ指定と誤判別してしまっていますね。
TQueryにSQL文を書き込むと、パラメータに登録されるので
確認できると思います。

    Query1.SQL.Clear;
    Query1.SQL.Add('insert into "c:\aaaa" values(996,''`::NG?'')');
    Query1.ExecSQL;

    Query1.SQL.Clear;
    Query1.SQL.Add('insert into "c:\aaaa" values(997,''*`::明日の予定は;★★。'')');
    Query1.ExecSQL;

"のように、:を::と二重にすれば正しく動作します。
ただ、この誤判別は  やはり`:の組み合わせに依存するようなので
無条件に、::とすると問題がありますね。
`:の場合のみ、`::とするか、HOtaさんの書き込みのように
それ自体を、パラメータ渡ししてしまうとすれば  回避可能
何れにしても、要注意ですね


AY  2005-05-04 06:29:57  No: 14596

HOtaさん、書き込みで原因は見えました。
訂正
HOtaさんの書き込みで、原因は見えました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加