TDBEditにChar型の文字列を格納した際のスペースについて

解決


とむ  2011-12-22 20:00:27  No: 41373

いつも拝見させていただき勉強しております。
さっそくですが、TDBEditにDBでChar型で宣言された文字列が格納される際に、語尾をスペースで埋められるのですが、それを回避する方法やプロパティがあったらご教授ください。
[環境]
・DelphiXE
・Oracle11g
・win7
・TSQLConnection>TSQLQuery>TDataSetProvider>TClientDataSet>TDataSource>TDBEdit

取得した後にTrimを使用してスペースを消す処理を追加することは極力避けたいと思っています(修正箇所多数なため)。
取得した後にTrimを行うことなくプロパティでどうにかならないかと試行錯誤しております。
よろしくお願い致します。


とむ  2011-12-22 20:07:36  No: 41374

:追記
TSQLConnectionのTrimCharプロパティをTrueにしてもダメでした。

TClientDataSetの項目のFixedCharプロパティをFalseにしてもダメでした。

上記以外で何か方法があればご教授ください。
また、上記方法でもうまくいく方法があればご教授いただきたいです。

よろしくお願い致します。


nobukoshi802  2011-12-22 20:42:15  No: 41375

CHARの特性で、語尾はスペースでDBに格納されます。
それでしたら、VARCHAR2でテーブルを定義して見てください。

ただし、上記項目がインデックスキーになっている場合は
CHARの方が使いやすい場合もあります。


とむ  2011-12-22 20:56:42  No: 41376

nobukoshi802さん早速のご返答ありがとうございます。

>CHARの特性で、語尾はスペースでDBに格納されます。
CHARの特性は重々承知した上での質問なのです。
言葉足らずですみませんでした。

>それでしたら、VARCHAR2でテーブルを定義して見てください。
テーブル定義の変更も視野には入れておりますが、できることなら上記にも記述しました通りプロパティ等で回避できればと思っております。

よろしくお願い致します。


nobukoshi802  2011-12-23 01:14:32  No: 41377

テーブル変更出来ないなら、ビューを作成して逃げるとか
TRIM(対象カラム)  とすれば、取得時にブランクを無くしてくれます。


KHE00221  2011-12-25 08:20:10  No: 41378

TDBEdit 内で Trim するように改造する


とむ  2011-12-26 19:58:34  No: 41379

nobukoshi802さん、KHE00221さん回答ありがとうございます。
どうしても、SQL文やコンポーネントの作成をやりたくなかったので、TClientDataSetの項目が持っているOnGetTextイベントでTrim処理を行うようにしました。
ソースは以下の通りです。

procedure TmdlDatabase.TrimChar(Sender: TField; var Text: string; DisplayText: Boolean);
var
  trimTxt : String;
begin
  try
    trimTxt := TrimRight(Sender.AsString);
    Text    := trimTxt;
  except on E: Exception do
    //-- エラー処理
  end;
end;

結局自己解決になってしまいましたが、ご回答いただいたみなさん勉強になりました。ありがとうございました。


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

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






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