TFDCommandで、255文字(?)を超えるsqlの実行方法

解決


km  2020-11-18 16:45:58  No: 149372

 お世話になります。表題の件について質問させてください。
(データベースは、MySQLを本当に少し触ったことがあるだけで、
試行錯誤しながらやっています。プロの方から見れば、おそらく
つまらない質問だと思いますが、ご容赦をお願いできればと思います。)

 現在、Delphi10.3+Windows10 home+SQLiteの環境で、簡単なデータベース
プログラムを作成しています。
 その中で

  Insert Into Table1 (Key, Str) Values (キー, 長文の文字列)
  (Key、StrはどちらもText型、文字数制限なし。キーはどんなに長くても200文字ほどだが、
  長文の文字列は2000文字以上といった長文が入ることがある。)

といったようなSQL文を作り、

      FDCommand1.CommandText.Text := SQL文;
      FDCommand1.Execute;

として実行しているのですが、この文字列の部分が特に長いとき、以下のエラーが出ます。
(厳密な発生条件は把握しきれておりませんが、SQL全体で、UTF8でカウントしたとき、
255バイトを超えたあたりで出るように思えます。)

  [FireDAC][Phys]-323. 識別子が長すぎます (255 を越えています)

 いろいろ検索すると、文字列に適当な長さで改行を入れるとよいようなのですが、
できれば元の文字列を壊したくなく、この255制限を発生させることなく、元の
SQL文を実行したいと思っています。

 もしどなたかお知恵をお持ちでしたらお教えください。どうぞよろしくお願い
いたします。


HFUKUSHI  2020-11-18 17:26:33  No: 149374

TFDQueryでパラメータクエリにしたらどうですか?
http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E5%AE%9F%E8%A1%8C%EF%BC%88FireDAC%EF%BC%89


km  2020-11-18 21:38:31  No: 149377

なんとかうまくできました。
fdqueryコンポーネントのSQLプロパティに雛形を登録して、変数としていじりたいところだけ、:keyのように、頭にコロンをつけておき、あとはfdquery.executeを行う直前にその変数を指定するためのparam操作を行うだけでずいぶんと簡単にできました。
エスケープ処理なども不要だったので、本当に楽に処理できました。
今日1日で書いた無駄なコードをバッサリと削除する寂しい場面もありましたが、コードが煩雑にならない、非常に効率的な方法を教えていただき、大変ありがたく感じています。
そもそも処理ができなかったところから見ると、本当に大きな進歩です。
大変助かりました。どうもありがとうございました。


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








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