Watch, Follow, &
Connect with Us

Please visit our new home
community.embarcadero.com.


Welcome, Guest
Guest Settings
Help

Thread: FireDACで特定のSQLを実行するとエラーが発生



Permlink Replies: 2 - Last Post: Aug 24, 2016 8:05 PM Last Post By: Takeshi Miyagawa
Takeshi Miyagawa

Posts: 2
Registered: 4/26/02
FireDACで特定のSQLを実行するとエラーが発生
Click to report abuse...   Click to reply to this thread Reply
  Posted: Aug 22, 2016 9:56 PM
Delphi XE7 Update1 を使用しています。

VCLフォームアプリケーションを新規に作成して、
FDConnection1: TFDConnection;
FDQuery1: TFDQuery;
FDGUIxWaitCursor1: TFDGUIxWaitCursor;
を配置します。
FDConnection1にOracle(11g)に接続する設定を行い、FDQuery1に下記のSQLを設定します。

select 'こんにちは' from dual

ここで、FDQuery1のActiveプロパティをTrueに設定すると、下記のエラーが発生します。

[FireDAC][DatS]-32. 変数長の列['こんにちは']でオーバーフローが発生しました。値の長さ-[10]、列の最大長-[5].

ちなみに下記のSQLではエラーは発生しません。
select 'Hello World' from dual

また、DBExpressで同様のことを行ってもエラーは発生しません。
igy kk

Posts: 147
Registered: 9/11/03
Re: FireDACで特定のSQLを実行するとエラーが発生
Click to report abuse...   Click to reply to this thread Reply
  Posted: Aug 24, 2016 2:36 AM   in response to: Takeshi Miyagawa in response to: Takeshi Miyagawa
'こんにちは'

n'こんにちは'
に変えた場合、どうなりますか?
Takeshi Miyagawa

Posts: 2
Registered: 4/26/02
Re: FireDACで特定のSQLを実行するとエラーが発生
Click to report abuse...   Click to reply to this thread Reply
  Posted: Aug 24, 2016 6:08 PM   in response to: igy kk in response to: igy kk
igy kk 様
ご返答ありがとうございます。

n'こんにちは' でエラーは解消しました。

n を付けることで oracle が NCHAR,NVARCHAR で結果を返すので、FireDACが正しく文字列を処理できるようになったという理解でよろしいのでしょうか?

oracle の SQL の知識が足りないことを認識しました。

追記
select dump(n'こんにちは',1106) from dual
Typ=96 Len=15 CharacterSet=UTF8: e3,81,93,e3,82,93,e3,81,ab,e3,81,a1,e3,81,af

select dump('こんにちは',1106) from dual
Typ=96 Len=10 CharacterSet=JA16SJISTILDE: 82,b1,82,f1,82,c9,82,bf,82,cd

という結果になりました。

Unicodeで作成したデータベースだと
select dump(n'こんにちは',1106) from dual
Typ=96 Len=10 CharacterSet=AL16UTF16: 0,S,0,93,0,k,0,a,0,o

select dump('こんにちは',1106) from dual
Typ=96 Len=15 CharacterSet=AL32UTF8: e3,81,93,e3,82,93,e3,81,ab,e3,81,a1,e3,81,af

Edited by: Takeshi Miyagawa on Aug 25, 2016 11:49 AM

Edited by: Takeshi Miyagawa on Aug 25, 2016 12:03 PM
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02