お世話になっています。
Win2000,VC6,MFC,SDIの環境です。
データーベースは ODBC MS SQL7 を使っています。
SQL7のエンタープライズマネージャーでテーブルに項目を追加すると
データ型のコンボボックスに datetime型 長さ8 という項目が出てきます。
この型を選択し
VC6でレコードセットの派生クラスをつくると、この型には
CTimeクラスが割り当てられていました。
この datetime型 とはどんな型(フォーマット)なのでしょうか?
BooksOnlineでも調べられませんでした。
VCとは直接関係ない質問かもしれませんが、ご存知のかたご教授ねがいます。m(__)m
> この datetime型 とはどんな型(フォーマット)なのでしょうか?
データベース内部にどんなカタチで格納されているかが知りたいのですか?
それを知ってどうするのですか?
推測するに8-byte整数です。たとえば1900年1月1日からの通算秒数とか。
επιστημηさん レスありがとうございます。
>データベース内部にどんなカタチで格納されているかが知りたいのですか?
はい、そうです。
>それを知ってどうするのですか?
テーブルにプログラムから書き込みをしたいのです。
「○丸年からの正の整数」ということでしょうか?
○丸年は何年なのでしょうか?
1ステップは何を示すのでしょうか?秒ですか?
ご存知のかた、ご教授よろしくお願いします。
> テーブルにプログラムから書き込みをしたいのです。
打ち込むSQL-statementにたとえば { ts '1998-09-24 10:02:20' }
とか書けばいいんじゃないかと。
# 外したかしら?
επιστημηさん レスありがとうございます。
>打ち込むSQL-statementにたとえば { ts '1998-09-24 10:02:20' }
文字列を書けば良いと言うことですか?
> 文字列を書けば良いと言うことですか?
SQL-statementを直接食わすAPIがあるなら、たとえば
INSERT INTO table VALUES( { ts '1998-09-24 10:02:20' }
みたいに。
# CTime型を直接マップできるのかもしれない。
# MFCのDB関連クラスは使ったことないので自信ないです。
# ふぉろーよろしく > だれぞ
はずしてるかもしれません。
必要ならバックアップを取ってから試して下さい。
MFCのウィザードでは、CTime型が自動作成されますが、
CRecordSetから派生させたクラスCHogeRecordSetのメンバ変数を
COleDateTimeに変更してみて下さい。
それと、コンストラクタでm_hogeDate = 0;としているところを
コメントアウトして下さい。
当方も理解が曖昧なので、うまく説明できませんが。
「参考文献」
「3週間完全マスター Visial C++ 6.0」日経BP社
の14日目
たいちうさん レスありがとうございます。
>MFCのウィザードでは、CTime型が自動作成されますが、
>CRecordSetから派生させたクラスCHogeRecordSetのメンバ変数を
>COleDateTimeに変更してみて下さい。
>それと、コンストラクタでm_hogeDate = 0;としているところを
>コメントアウトして下さい。
やってみたいのですが、
DoFieldExchange()という関数はどうすれば呼ばれるのでしょうか?
まさか、 UpdateData()ですか?
そうすれば insert into なとのSQL文を投げなくてもデータベースに
書き込みができるのでしょうか?
トンチンカンなことをいっていたらゴメンナサイ。
よろしくお願いします。
> DoFieldExchange()という関数はどうすれば呼ばれるのでしょうか?
CRecordset::Update()で呼ばれませんか?
>そうすれば insert into なとのSQL文を投げなくてもデータベースに
>書き込みができるのでしょうか?
環境、Win XP MS SQL Server7.0 (DE)(SP4)
ODBC接続(CDatabaseクラス、CRecordSetクラス)だけでアプリ作ってます?
CRecordViewクラスも使っていたっけかな
insert、DELETE、selectなどのSQL文は使用していません
Executeは使ってませんよ(カプセル化はされていると思うけど)
AppwizardでODBC接続SDIアプリ生成してみて下さい
DoFieldExchange()やRFX、DDX、DDVなど作成されます
テーブル項目の部分UPDATEはまだやってみたこと無いです
データベースサポートなしのアプリへ
クラスウィザードで後づけでデータベースサポートさせるとヘッダの
インクルードが追加されない等のバグはありますけど
話はずれてましたけど、
「datetime」は「OLAP」などで利用されているの見かけますよ
今のところ必要ないので「OLAP」はインストールしていません
但し「kai さん」の使用しているクラスが「CDAOxxxx クラス」
JETエンジン経由ODBC接続になるんでしょ
なので
多少機能的に私の環境と違うため確実回答とはいえてません
たいちうさん レスありがとうございます。
>CRecordset::Update()で呼ばれませんか?
そういうことでしたか。
woodさん レスありがとうございます。
>insert、DELETE、selectなどのSQL文は使用していません
>Executeは使ってませんよ(カプセル化はされていると思うけど)
レコードに書き込みたい場合などに
レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
ということでしょうか?
>但し「kai さん」の使用しているクラスが「CDAOxxxx クラス」
>JETエンジン経由ODBC接続になるんでしょ
JETではないようです。SQL7でデータベースを作成しています。
JET==.MDB ですよね? 今は .MDF を使っています。
余談なのですが
クラスの新規作成で、基本クラスをCDaoRecordsetをえらんでも
基本クラスは CRecordset になってしまうようですね。バグでしょうか。
ですから、今は CDaoRecordset の派生ではなく CRecordset の派生を
つかっています。
>JETではないようです。SQL7でデータベースを作成しています。
>JET==.MDB ですよね? 今は .MDF を使っています。
アクセスするエンジン(JET35.DLLやDAO30.DLL)
の話で物理ファイルの話ではありません
ODBC接続の場合、DAOでオラクルもアクセスできるよ
おおざっぱには
>レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
>ということでしょうか?
だと思いますけど細かい操作したいときはやはり、SQL文を投げる必要
が出てくるんじゃないかな?
いまは、自分に必要ないから使ってませんけど
datetimeは解決したんですか、話の内容私が変えたみたいですけど
解決したんだったら「済」にして下さい
ほんで、別のスレッド上げたほうが良いと思いますけど
woodさん レスありがとうございます。
>>JETではないようです。SQL7でデータベースを作成しています。
>>JET==.MDB ですよね? 今は .MDF を使っています。
>アクセスするエンジン(JET35.DLLやDAO30.DLL)
>の話で物理ファイルの話ではありません
>ODBC接続の場合、DAOでオラクルもアクセスできるよ
そうなのですか。ただ自分がなんのエンジンを使っているか
わかっていません。f(^^;;;
>おおざっぱには
>>レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
>>ということでしょうか?
>だと思いますけど細かい操作したいときはやはり、SQL文を投げる必要
>が出てくるんじゃないかな?
そういうことなのですね。わかりました。
>datetimeは解決したんですか、話の内容私が変えたみたいですけど
>解決したんだったら「済」にして下さい
まだ試行錯誤中なんです。m(__)m
いろいろ考えたのですが、理解できなかったのでdatetime型を
使うのをやめることにしました。
皆様、アドバイスありがとうございました。
[解決]されたようですが、参考までに。
datetime
グレゴリオ暦の1753年1月1日から9999年12月31年までの日付と時刻を、
300分の1秒 (3.33ミリ秒または0.00333秒に相当) の精度で表します。
http://www.microsoft.com/japan/msdn/sqlserver/sql2000/IntlFeaturesInSQLServer20
00.asp#intlfeaturesinsqlserver2000_topic3
http://www.microsoft.com/japan/sql/techinfo/sqleval/self_doc.asp