Delphiで扱うデータベース上の日付について

このQ&Aのポイント
  • Delphiでデータベース上の日付を扱う方法を教えてください。
  • TQuery、TDatasourceを使用してデータを表示させる際、日付の正しさをチェックする方法はありますか?
  • データベース上で日付による絞り込みや並べ替えをしたい場合、どのような方法がありますか?
回答を見る
  • ベストアンサー

Delphiで扱うデータベース上の日付について

Delphiで扱うデータベース上の日付について  質問させていただきます。何かしらのマナー違反等ありましたらご指摘願います。  TDataBaseでデータベースにアクセスし、TQuery、TDatasourceでTDBEditにデータを表示させています。接続するテーブルには日付型のフィールドがありそれをTDBEditに表示させて、編集したのち更新する、もしくは行を挿入してから更新する場合、入力した値が正しく日付であるかどうかはどのようにチェックすればよろしいのでしょうか。  フィールドにはMaskEditプロパティで2010/06/07とTDBEditに表示するよう設定してあります。  文字列として保存したものをTDBEditに表示する際日付に変換して表示することも考えたのですが、データベース上で日付による絞り込みや並べ替えをするため、そちらは断念しました。  まとまりのない文章で申し訳ありませんが、お教えいただければ幸いです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#182251
noname#182251
回答No.1

回答が付かないようですが、質問が理解されていないためかもしれません。 TDataBaseは使用したことがないですが、TADO などでは日付でないデータ(ex. 2010/6/40)を入力するとレコードのアップデート時にエラーになります。 それともご質問の趣旨は、それ以前に「日付」だけを入力したときにチェックしたいと云うことでしょうか? それならばTDBEditとは別に、TDateTimePicker を使用しては如何でしょうか。入力時に即チェックしてくれます。このTDateTimePickerの OnChenge イベントハンドラに、レコードの当該フィールドに代入するコードを書けばよろしいかと。

solat0106
質問者

お礼

 ご連絡が遅くなりましたが、自分の思うような入力制御ができました。ありがとうございました!

関連するQ&A

  • Delphiで現在日付を表示するには

    初歩的な質問ですが, Delphi 3でプログラム(普通のGUI)を作成しましたが DateTimePickerコンポーネントで現在日付を 表示しようとしたら,(プログラム)作成日付のままで 更新されません。 更新するメソッドか何か手段はありますか。 またなかったら他の現在日付を表示する手立てが あったら教えてください。

  • DelphiのTDBLookupConboBoxの使用方法ついて

    DelphiのTDBLookupConboBoxの使用方法ついて  質問させていただきます。よろしくお願いします。現在、TDatabase,TQuery,TDataSourceを使用し、データベースに接続およびDBコンポーネントを使用しています。  テーブルは二つ、AとBを用意し、それぞれ TableA a1(Integer型) a2(String型) TableB a3(Integer型)  のフィールドを持たせています。そしてTDBLookupComboBoxのプロパティには DataField :a3 KeyField :a1 ListField :a2 同じくTDBEditのプロパティには DataField :a3 としています。 その中で、他から引っ張ってきた数値をTDBEditに挿入しても、DBLookupComboBoxのテキスト部分はTDBNavigatorなどでPostするまで空白なままです。これをTDBEditに値が挿入された時点でDBLookupComboBoxのテキスト部分も対応する値を表示させるにはどうすればよいのでしょうか?  稚拙な状況説明で申し訳ありません。ご指導よろしくお願いします。

  • Delphi データベースコンポーネント使用時におけるIDの自動生成に

    Delphi データベースコンポーネント使用時におけるIDの自動生成について  質問させていただきます。よろしくお願いします。現在DelphiでTQuery,TDatabase,TDataSourceを使用し、データベースに接続、DBGridでレコードを一覧表示し、DBEditとDBNavigatorでレコードの新規登録や編集が行えるようにしています。  ここでIDというフィールドを作り、これを主キーとして扱っていますが、レコードの新規作成時、自動的に連番で数値が挿入されるようにするにはどうすればいいのでしょうか?   ひとつ方法を思い付き実際やってみて今のところうまくいってはいるのですが、私が採択した方法だと少々問題があります。  exe起動時にレコードをソート、IDのフィールドで一番値の大きい数値を取得し、新規作成時にはその値に+1してDBEditに挿入するようにしています。しかしこれだと、いくらIDの値が小さいレコードを削除しても値の大きいレコードがある限り、新規作成時にIDとして挿入される値は大きくなるばかりなのです。  稚拙な文章で申し訳ありませんが、お教えいただければと思います。  よろしくお願いします。

  • 日付の表示について

    お世話になります。 WEBの登録フォームより日々の更新情報を登録し、更新情報を表示するということをやっております。 データベースの【日付型】のデータで 例)2009/07/12 とあるのですが、 7月の情報や12日の情報を取り出したいのですが可能でしょうか? ご教授下さい。 一覧や並べ替えなどはできるのですが、、、 SQL文は以下のように書いております。 strSQL = "select * From テーブル名 Where 項目=" & ID & " ORDER BY IN_DATA DESC"

  • ピボットテーブルの日付を週ごとに集計したい

    顧客管理データーベースをExcel2003で行っています。 顧客ごとに「日付1」、「日付2」、「日付3」の3つのフィールドがあり、 各フィールドを週ごとに集計した表を作りたいです。 ピボットテーブルを使って行いたいのですが、各々の週ごとの集計が 表示されません。 たとえば、「日付1」の1月の1週目の中で「日付2」のデータが集計され ます。           1週目        2週目      3週目 日付1      2           1         1 日付2      0           5         0 日付3      1           0         10 上記のように表示するにはどのようにすればよいでしょうか? お教えください。 なお、データーベースには、「年度」フィールドもあり、年度ごとの集計を 行いたいです。 分かりづらい内容で申し訳ございませんが、良い方法をご教示ください。

  • accessテーブルデータシートに日付非表示

    アクセスで以前から使用しているテーブルに当日の日付 date() のフィールドを追加しても、データシートに表示されません。 フィールドは表示されますが、データシート内が空です。 テーブル内には他に日付/時刻型のデータが既に一つ設定されています。 新規で作ったテーブルで同じように作業すると、きちんと表示されます。 おかしいとしたら、どこチェックすれば良いでしょうか。 テーブルのフィールドプロパティの画像を添付します。 どうかご回答お願いいたします。

  • データベース操作(DAO)でのフィールド追加について

    データベース(Access)のあるテーブルのフィールドをVBのコード(プログラム)から追加したのですが、現在Appendとかいうメソッドを使ってテーブルの中にあるフィールドの一番最後尾に追加するということはできました。 しかし、好きな場所(前から2番目とか…)に挿入することができません。こんなことって可能なのでしょうか?? データベースをコードから操作する上ではフィールドがどの位置にあっても関係ないのですが、メンテナンスなども考えてできればやりたいのですが、どなたか分かる方おられたら教えてもらえませんか?? (操作方法はDAOです) どうぞよろしくお願いしますm(__)m

  • データベースが壊れ開けなくなる

    C#でデータベースを追加・削除・更新をするプログラムをつくっているのですが、ソースをいじっていないのに突然データベースが開けなくなりました。 ーーーーーーーーーーーーーーーーーーーーーーーー 指定された除数 (4) の列は、組み込みの .NET システム型として表現できない DBNull 値を含んでいます。SqlTypes プロパティまたは IsDBNull プロパティを使用してください。 ーーーーーーーーーーーーーーーーーーーーーーーー このようなメッセージが表示されているのですが、これは壊れて使えなくなってしまったと考えるしかないでしょうか? 環境は、visualstudio2010でデータベースはSQL Server Compact 3.5を使用しています。

  • データベース処理のプログラミングについて

    データベースを処理するためのプログラムを作成していますが、そのコーティングで悩んでいます。 説明が長くなってしまいますが、お付き合いいただける方、ご教示頂ける方がいらっしゃることを、切に願います。 まずは現在の状況説明ですが、下記のような感じでプログラムを作っています。 データベースに、Table1があります。 ・Table1・・・fld1~fld10までの10個のフィールドがあり、fld1が主キー また、このテーブルを処理するためのクラスがあります。 ・データベース処理系のクラス・・・clsTable1 clsTable1では、各フィールドを、メンバ、プロパティとして作ってあります。 ・メンバ:_fld1、 プロパティ:fld1 ・・・ メンバ:_fld10、 プロパティ:fld10 また、Table1に対してSQLを発行するためのメソッドがあります。 ・SelectRecord・・・主キーで検索して1件だけ返すメソッド(検索のためfld1が必要) ・InsertRecord・・・Insert用メソッド(fld1~fld10の全てが必要) ・UpdateRecord・・・主キーで検索し、該当するレコードのfld2を更新するメソッド(検索値のfld1と更新値のfld2が必要) また、あるフィールドの範囲検索などをするメソッドとして、 ・SelectRecords・・・fld3を範囲検索して複数レコードを返すメソッド(fld3をBETWEEN演算子で検索するためfld3minとfld3maxが必要) を作成した場合は、fld3minとfld3max用のメンバとプロパティを追加しています。 これらのメソッドは全て引数なしになっていて、フォームなどから使う場合は必要なプロパティに値を代入してから各メソッドを呼んでいます。 そのため、メソッドを呼び出す際には、どのプロパティを設定する必要があるのかが分からないです。 (作っている時は記憶で、メンテの時はコメントやソースを見て判断しています。) これを改善するために、設定が必要なフィールド全てを各メソッドの引数にしてしまえば良いのかとも思ったのですが、そうするとInsertRecoedの引数は10個になります。 仮にフィールド数が100列のテーブルだったりした場合は引数が100個になってしまうので、それもダメだろうと思っています。 Insert以外でも、詳細な検索などが必要な場合や、全フィールドのUpdateの場合にも、引数が多くなりすぎです。 どんな感じにすればよろしいのでしょうか? また、みなさんは、どんな感じにされているのでしょうか? 開発環境: SQL Server 2000 Standard Visual Basic 2010 Express

  • クエリで日付型のIIF関数の使用

    テーブル1にフィールド名→日付、データ型→日付/時刻型(主キーなし) を作成し、 クエリ1を作成し、フィールド1にテーブル1の日付フィールドをドラッグし、 フィールド2には「有無: IIf([日付]="","未",[日付])」 を入力しました。 「日付フィールドが空白なら有無フィールドは「未」、入力されているならその日付を表示する」 としたいです。 しかし画像のように 日付フィールドが空白→有無フィールドも空白 日付フィールドに日付が入っているなら→有無フィールドは#エラー になってしまいます。 何がだめなんでしょうか? よろしくお願い致します。

専門家に質問してみよう