DBEdit入力から時間型へ

解決


湘南乃海  2007-02-17 22:47:20  No: 24914

では改めて、
データベースで、フィールド名=開始時刻(型=時間型)というのをつってるんですが、入力画面Formで入力された値を、時間型として取り込むためにはどのようにすればよいでしょうか。つまりこういうことです。

入力画面Form
(DBEdit1) 時(Label1) (DBEdit2) 分から(Labal2)

○○時○○分から
これを
○○:○○  というかたちにもっていきたいんです。


Mr.XRAY  URL  2007-02-17 23:27:40  No: 24915

Delph7のヘルプで時刻をキーワードにして検索し、
[時刻の値、形式化]を選択します。  [参照]をクリックし、
[DateTimeToString 手続き]を表示すると変換用の関数の説明があります。
またこのヘルプのページで[日付時刻ルーチン]をクリックすると
時刻や日付の関数の説明があります。

文字列から時刻型への変換は、
StrToTime 関数やStrToTimeDef 関数などがあります。
ヘルプも購入価格の内です。使用しないともったないお化けがでますよ。

時刻型に変換する必要がなければ、文字列をそのまま表示するだけです。


AY  2007-02-17 23:41:04  No: 24916

>フィールド名=開始時刻(型=時間型)というのをつってるんですが
では
>(DBEdit1) 時(Label1) (DBEdit2) 分から(Labal2)
のDBEDit1と2は、どの項目と結びついているのでしょうか?
たぶん数値型でしょうが、単純に時刻にできるかチェックも必要になりますね
例えば55時88分とか入力してる場合不正ですよね
開始時刻を時刻型で作成されているのでしたら
最初から、DBEdit1に開始時刻を結びつけるのが簡単ですが・・


湘南乃海  2007-02-18 04:17:12  No: 24917

AYさんの
”最初から、DBEdit1に開始時刻を結びつけるのが簡単ですが・・”
についてですけど、どう結び付けるんでしょうか。
DBEdit1に、○○:○○  と、直接入力するとか?
仮にそうすることになったとしたら、:(コロン)を打つのが面倒というか・・・テンキーのみで済ませたい気がするんです。
他であればお教えください。

Mr.XRAYさんの教えに従ってヘルプを見てみました。あまり内容を理解できなかったのですが、なんとなくでやってみると、実験では無事にできました。実験というのは、FormにEdit1,Edtit2,Edit3 Button1を用意して、Button1をクリックしたらEdit1(時)、Edit2(分)に入力された数字がEdit3.Textに時間型で表示されるというものです。

procedure TForm1.Button1Click(Sender: TObject);
var
  a:Ttime;
  b:string;
begin
  try
    b:=edit1.text+':'+edit2.text;
    a:=strtotime(b);
    edit3.Text:=timetostr(a);
  except
    showmessage(b+'?');
  end;
end;

一応これでうまく動きました。何か無駄な要素があれば言って下さい。
問題として、”秒”を表示させないようにしたいんです。
あと、DBEditじゃあ勝手が違うんですかね。ていうか違いますよね。


AY  2007-02-18 06:08:02  No: 24918

DisplayFormat hh:mm
EditeMask !99:99;1;_
テンキーのみの入力です。
秒は入力も表示もないです。
時刻型のフィールド直結で


湘南乃海  2007-02-19 19:26:01  No: 24919

ヘルプでEditMaskを調べてみたのですが、OnValidateというのが書いてあって、何とかそれに行き着いたのはいいのですが、そこからどうあいていいのか分かりません。
あと一つ気になったことがありまして、DBEditに値を入力するときに、どこに値が入っているのかなぁ・・・と。
例えば、LabelはCaption、EditはText、じゃぁDBEditは?


AY  2007-02-19 19:58:53  No: 24920

元々、DBeditで質問されていましたよね?
DBEditの値は、結びついているデータベースのフィールド(書き出すまでは、実際にはデータベース上に書き込まれていませんが)ですが

今、フォーム上には  Table,DataSource そして  DBEditがあるのですよね?
DBEditと結びついているのは、プロパティのDataSource・DataFieldを見てください。


湘南乃海  2007-02-19 21:04:44  No: 24921

そうですよね。何でこんなこと質問してんのか・・・(ど忘れ?)すいません。
でですね、

DisplayFormat hh:mm
EditeMask !99:99;1;_

これをどのように書いていいのか・・・
OnValidateはいいんですけど、そのまま上の2行を書けば良い訳ではないみたいで。


AY  2007-02-19 21:50:54  No: 24922

HELPを見られているのでしたら、「持続的項目の作成」で参照してみてください。
プロパティ DisplayFormat や  EditeMask は項目コンポーネントが持っています。

1.フォーム上のTableを右クリック
2.項目の設定を選ぶ
3.項目のリストが開くので(最初は空っぽ)その上で、右クリック
4.全ての項目を追加を選択
テーブルの各項目が登録されます。
その中から、開始時刻の項目をクリックしてください。
オブジェクトインスペクタに、お探しのプロパティが見えるはずです。
それぞれに設定してください。

DisplayFormatに、hh:mm
EditeMaskに、!99:99;1;_

最初の質問に帰りますが
そうすれば、DBEdit1には、直接「開始時刻」を指定できますよ。


湘南乃海  2007-02-19 22:21:36  No: 24923

・・・夢のような光景がそこに。
AYさん、何から何までまことにありがとうございます。まさに’こうしたい!’という形になりました。DisplayFormatとEditMaskはプロパティだったんですね。コードに直接書くものだと勘違いしてました。(どんな勘違いやねん)
ほんとにありがとうございました。


湘南乃海  2007-02-19 22:23:16  No: 24924

すいません。うれしすぎて”解決”ボタン押し忘れてました。


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

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






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