はじめまして、GAROです。
DBEditを使って、DBGridの選択行のVARCHAR型のデータベースの項目値(日付)をMM/DD形式で表示.編集したいです。
しかしながら、DBEditのプロパティで表示形式を指定するプロパティはないようです。
そもそも上記は実現可能でしょうか?
もし不可能なら別の実現方法はありますか?
ご存じの方がおられましたら、是非ともご教授下さい。
DBを使用しているならSQLでMM/DD形式で表示させることができると思いますが。
編集もinsert文をちょこっといじれば可能なのでは?
それとDelphiのバージョンやDBに何を使用しているのか等の情報も書いたほうがいいと思います
返信ありがとう御座います。
説明不足で申し訳ありません。
Delphiではなく、BorlandC++6.0を使用ています。
DBは、SQLSERVERを使用しています。
現在、システム保守で既存の画面に新たに項目を追加する対応を行っています。
画面には複数のDBEditでDBGridの選択行の各項目を表示・編集する仕様になっています。
今回、YYYYMMDD形式の文字列を保存するVARCHAR型のDB項目をMM/DD形式で表示・編集できるようにする事が要件となります。
新たに画面を作成するならSQLの結果をTEXTボックスに出力する事で良いと思いますが、既存の画面項目がTTABLEをDataSourceとするDBEditとなっている為、今回の追加項目についてもTTABLEのフィールドとリンクするDBEditを使いたいと考えております。
こんにちは,Mr.XRAYです.
TTableやTQueryコンポーネントの各フィールドには,DisplayFormatというプロパティがあります(項目によってはないものもあります).
これではダメでしょうか.
静的(設計時)に項目を設定するのであれば,オブジェクト・インスペクタで指定できます.
動的(アプリ実行時)に項目を追加,設定する方式のアプリでも指定できます.
オブジェクト・インスペクタで設定可能なものは,実行時にも設定できます.
Mr.XRAY様
返信有難う御座います。
職場に行ったらDBEditのプロパティでDisplayFormat="MM/DD"のように設定出来るか確認してみます。
GAROです。
オブジェクト・インスペクタで設定項目が見当たらなかったので、
以下のようにTTABLEのフィールドのDisplayFormatを指定するコードを書きましたが、アドレスの参照エラーとなってしまいます。
原因が分かる方がおりましたら教えて頂けると助かります。
((TDateTimeField*)tTable->FieldByName("日付項目"))->DisplayFormat="mm/dd";
>オブジェクト・インスペクタで設定項目が見当たらなかったので、
Tableコンポを使用しているのでしたら,Tableコンポをダブルクリックしてみてください.
コードでしたら,使用しているコンポや項目の型にもよりますが,
例えば,以下のような感じです.
項目名を使用するなら,Fields[3] は FieldByName("日付項目")
もしかしたら,BorlandC++6.0 とDelphiは少し書き方が違うかも知れません.
TDateTimeField(ADOQuery1.Fields[3]).DisplayFormat:='yyyy"年"mm"月"dd"日"';
>もしかしたら,BorlandC++6.0 とDelphiは少し書き方が違うかも知れません.
BorlandC++6.0 は以下のようなコード補完機能が使えないのかな?
(正確にはコード補完という操作ではないのですが)
これが使えれば,リストに出てこなければ,最初からコーディングのミスを防ぐことができます.
http://mrxray.on.coocan.jp/Delphi/Others/A_IDETechnique.htm#05
失礼しました.
>アドレスの参照エラーとなってしまいます。
ということなので,設定コードの問題ではないですね.(汗)
多分,データセットの状態の問題かも知れません.
Mr.XRAYさん
様々なアドバイスを頂きまして有難うございます。
職場ではこのサイトを参照できないので掲示板に返信出来ませんでした。
私もデータセットの状態を疑いましたが、
データは設定されている事を確認しました。
恐らくはDB項目の型がVARCHAR型の日付データなので、
TDateTimeField型に変換できないのかもしれません。
いろいろ試してみたいと思います。
GAROです。
先ほどの投稿は私です。
失礼しました。
日付を文字列で"YYYYMMDD"の形で格納してあって
画面表示では"MM/DD"の書式で表示・編集するんですよね。
編集する場合、年の部分はどうしますか?
新規入力が無いのなら、元の年をそのまま適用するでもいいでしょうけど。
編集も絡むならフィールドコンポーネントのGetText、SetTextイベントで
処理するのが無難だと思います。
>編集も絡むならフィールドコンポーネントのGetText、SetTextイベントで
>処理するのが無難だと思います。
そうですね.確かに.
それと,バリアント型のことですが.
Variants.VarToDateTime
https://www.petitmonte.com/bbs/answers?question_id=7555
が使えるかも知れません.
>Variants.VarToDateTime
>https://www.petitmonte.com/bbs/answers?question_id=7555
リンク間違えました.http://docwiki.embarcadero.com/VCL/ja/Variants.VarToDateTime
QUESTさん、Mr.XRAYさん
有難う御座います。
DBの日付項目の年は変更後も変更前の値となります。
DBEditのイベントでDBへ格納する形式に変換する予定です。
また教えて頂いたメソッドを使って、以下のように出来るか試してみます。
Variants.VarToDateTime(tTable->FieldByName("日付項目"))->DisplayFormat="mm/dd";