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+@)とかが入ると
エラーになります。
このような特殊文字等はどのように対応するのでしょうか?
教えてください。
シングルコーテーションや、ダブルコーテーションがあるのは
わかりましたが、「`」の対応がわかりません。
delphi5+Paradoxの環境はありませんが
D7のDatabase Desktopで試しました。(D5も同じと思います)
書かれている内容を、SQLで実行しましたが問題ありません
確かに ダブルコーテーションなどの文字は、渡す時に識別するので
""のように2重に表記したりする必要はありますが・・
エラーというのは どの様なエラーですか?
きっと、コードで記述されていることと思います。
(CREATE文のところから判断すると)
insert文等の記述の部分を 挙げて見られてはいかがですかね?
頑張るマンさん、こんにちは
直接データーベースディスクトップで動かすと、キー違反が出ますが、
このことではないのでしょうか?同じ997には登録できません。
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;
` 若しくは : のみであれば 問題ないですが `: の組み合わせはだめですね。
知りませんでした・・
バリュー値の内容であって、記述の仕方の問題ではないので
解決は、申し訳ないですが?です。
この組み合わせを回避するしかないかも・・
TQueryのSQLを[insert into "tbl_wrk" values(:Key_ID, :Comment)]のようにパラメターを設定して、
Query1.Close;
Query1.ParamByName('Key_ID').AsInteger := 999;
Query1.ParamByName('Comment').AsString := '*`:明日の予定は;★★。';
Query1.ExecSQL;
で登録できるようです。
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さんの書き込みのように
それ自体を、パラメータ渡ししてしまうとすれば 回避可能
何れにしても、要注意ですね
HOtaさん、書き込みで原因は見えました。
訂正
HOtaさんの書き込みで、原因は見えました。
ツイート | ![]() |