いつも拝見させていただき勉強しております。
さっそくですが、TDBEditにDBでChar型で宣言された文字列が格納される際に、語尾をスペースで埋められるのですが、それを回避する方法やプロパティがあったらご教授ください。
[環境]
・DelphiXE
・Oracle11g
・win7
・TSQLConnection>TSQLQuery>TDataSetProvider>TClientDataSet>TDataSource>TDBEdit
取得した後にTrimを使用してスペースを消す処理を追加することは極力避けたいと思っています(修正箇所多数なため)。
取得した後にTrimを行うことなくプロパティでどうにかならないかと試行錯誤しております。
よろしくお願い致します。
:追記
TSQLConnectionのTrimCharプロパティをTrueにしてもダメでした。
TClientDataSetの項目のFixedCharプロパティをFalseにしてもダメでした。
上記以外で何か方法があればご教授ください。
また、上記方法でもうまくいく方法があればご教授いただきたいです。
よろしくお願い致します。
CHARの特性で、語尾はスペースでDBに格納されます。
それでしたら、VARCHAR2でテーブルを定義して見てください。
ただし、上記項目がインデックスキーになっている場合は
CHARの方が使いやすい場合もあります。
nobukoshi802さん早速のご返答ありがとうございます。
>CHARの特性で、語尾はスペースでDBに格納されます。
CHARの特性は重々承知した上での質問なのです。
言葉足らずですみませんでした。
>それでしたら、VARCHAR2でテーブルを定義して見てください。
テーブル定義の変更も視野には入れておりますが、できることなら上記にも記述しました通りプロパティ等で回避できればと思っております。
よろしくお願い致します。
テーブル変更出来ないなら、ビューを作成して逃げるとか
TRIM(対象カラム) とすれば、取得時にブランクを無くしてくれます。
TDBEdit 内で Trim するように改造する
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;
結局自己解決になってしまいましたが、ご回答いただいたみなさん勉強になりました。ありがとうございました。
ツイート | ![]() |