DBEditでMM/DD形式の文字列を表示するには


GARO  2012-01-21 12:14:08  No: 41481  IP: 192.*.*.*

はじめまして、GAROです。
DBEditを使って、DBGridの選択行のVARCHAR型のデータベースの項目値(日付)をMM/DD形式で表示.編集したいです。
しかしながら、DBEditのプロパティで表示形式を指定するプロパティはないようです。
そもそも上記は実現可能でしょうか?
もし不可能なら別の実現方法はありますか?
ご存じの方がおられましたら、是非ともご教授下さい。

編集 削除
test  2012-01-21 16:25:59  No: 41482  IP: 192.*.*.*

DBを使用しているならSQLでMM/DD形式で表示させることができると思いますが。
編集もinsert文をちょこっといじれば可能なのでは?

それとDelphiのバージョンやDBに何を使用しているのか等の情報も書いたほうがいいと思います

編集 削除
GARO  2012-01-21 17:54:16  No: 41483  IP: 192.*.*.*

返信ありがとう御座います。
説明不足で申し訳ありません。
Delphiではなく、BorlandC++6.0を使用ています。
DBは、SQLSERVERを使用しています。
現在、システム保守で既存の画面に新たに項目を追加する対応を行っています。
画面には複数のDBEditでDBGridの選択行の各項目を表示・編集する仕様になっています。
今回、YYYYMMDD形式の文字列を保存するVARCHAR型のDB項目をMM/DD形式で表示・編集できるようにする事が要件となります。
新たに画面を作成するならSQLの結果をTEXTボックスに出力する事で良いと思いますが、既存の画面項目がTTABLEをDataSourceとするDBEditとなっている為、今回の追加項目についてもTTABLEのフィールドとリンクするDBEditを使いたいと考えております。

編集 削除
Mr.XRAY  2012-01-21 19:03:44  No: 41484  IP: 192.*.*.*

こんにちは,Mr.XRAYです.

TTableやTQueryコンポーネントの各フィールドには,DisplayFormatというプロパティがあります(項目によってはないものもあります).
これではダメでしょうか.

静的(設計時)に項目を設定するのであれば,オブジェクト・インスペクタで指定できます.
動的(アプリ実行時)に項目を追加,設定する方式のアプリでも指定できます.
オブジェクト・インスペクタで設定可能なものは,実行時にも設定できます.

編集 削除
GARO  2012-01-21 23:47:38  No: 41485  IP: 192.*.*.*

Mr.XRAY様
返信有難う御座います。
職場に行ったらDBEditのプロパティでDisplayFormat="MM/DD"のように設定出来るか確認してみます。

編集 削除
GARO  2012-01-24 00:08:04  No: 41486  IP: 192.*.*.*

GAROです。
オブジェクト・インスペクタで設定項目が見当たらなかったので、
以下のようにTTABLEのフィールドのDisplayFormatを指定するコードを書きましたが、アドレスの参照エラーとなってしまいます。
原因が分かる方がおりましたら教えて頂けると助かります。

((TDateTimeField*)tTable->FieldByName("日付項目"))->DisplayFormat="mm/dd";

編集 削除
Mr.XRAY  2012-01-24 00:34:02  No: 41487  IP: 192.*.*.*

>オブジェクト・インスペクタで設定項目が見当たらなかったので、

Tableコンポを使用しているのでしたら,Tableコンポをダブルクリックしてみてください.

編集 削除
Mr.XRAY  2012-01-24 00:46:44  No: 41488  IP: 192.*.*.*

コードでしたら,使用しているコンポや項目の型にもよりますが,
例えば,以下のような感じです.
項目名を使用するなら,Fields[3] は FieldByName("日付項目")
もしかしたら,BorlandC++6.0 とDelphiは少し書き方が違うかも知れません. 

TDateTimeField(ADOQuery1.Fields[3]).DisplayFormat:='yyyy"年"mm"月"dd"日"';

編集 削除
Mr.XRAY  2012-01-24 00:53:27  No: 41489  IP: 192.*.*.*

>もしかしたら,BorlandC++6.0 とDelphiは少し書き方が違うかも知れません. 

BorlandC++6.0 は以下のようなコード補完機能が使えないのかな?
(正確にはコード補完という操作ではないのですが)
これが使えれば,リストに出てこなければ,最初からコーディングのミスを防ぐことができます.

http://mrxray.on.coocan.jp/Delphi/Others/A_IDETechnique.htm#05

編集 削除
Mr.XRAY  2012-01-24 12:08:15  No: 41490  IP: 192.*.*.*

失礼しました.

>アドレスの参照エラーとなってしまいます。

ということなので,設定コードの問題ではないですね.(汗)
多分,データセットの状態の問題かも知れません.

編集 削除
Mr.XRAY  2012-01-24 22:24:33  No: 41491  IP: 192.*.*.*

Mr.XRAYさん
様々なアドバイスを頂きまして有難うございます。
職場ではこのサイトを参照できないので掲示板に返信出来ませんでした。
私もデータセットの状態を疑いましたが、
データは設定されている事を確認しました。
恐らくはDB項目の型がVARCHAR型の日付データなので、
TDateTimeField型に変換できないのかもしれません。
いろいろ試してみたいと思います。

編集 削除
GARO  2012-01-24 22:27:08  No: 41492  IP: 192.*.*.*

GAROです。
先ほどの投稿は私です。
失礼しました。

編集 削除
Quest  2012-01-25 01:57:25  No: 41493  IP: 192.*.*.*

日付を文字列で"YYYYMMDD"の形で格納してあって
画面表示では"MM/DD"の書式で表示・編集するんですよね。
編集する場合、年の部分はどうしますか?
新規入力が無いのなら、元の年をそのまま適用するでもいいでしょうけど。
編集も絡むならフィールドコンポーネントのGetText、SetTextイベントで
処理するのが無難だと思います。

編集 削除
Mr.XRAY  2012-01-25 08:31:22  No: 41494  IP: 192.*.*.*

>編集も絡むならフィールドコンポーネントのGetText、SetTextイベントで
>処理するのが無難だと思います。

そうですね.確かに.
それと,バリアント型のことですが.

Variants.VarToDateTime
https://www.petitmonte.com/bbs/answers?question_id=7555

が使えるかも知れません.

編集 削除
Mr.XRAY  2012-01-25 08:32:48  No: 41495  IP: 192.*.*.*

>Variants.VarToDateTime
>https://www.petitmonte.com/bbs/answers?question_id=7555

リンク間違えました.http://docwiki.embarcadero.com/VCL/ja/Variants.VarToDateTime

編集 削除
GARO  2012-01-25 23:30:59  No: 41496  IP: 192.*.*.*

QUESTさん、Mr.XRAYさん
有難う御座います。
DBの日付項目の年は変更後も変更前の値となります。
DBEditのイベントでDBへ格納する形式に変換する予定です。
また教えて頂いたメソッドを使って、以下のように出来るか試してみます。
Variants.VarToDateTime(tTable->FieldByName("日付項目"))->DisplayFormat="mm/dd";

編集 削除