SQL7のdatetime型とはどんな型でしょうか?

[戻る]
kai 2003/02/26(水) 10:30:18
お世話になっています。
Win2000,VC6,MFC,SDIの環境です。
データーベースは ODBC MS SQL7 を使っています。

SQL7のエンタープライズマネージャーでテーブルに項目を追加すると
データ型のコンボボックスに datetime型 長さ8 という項目が出てきます。
この型を選択し
VC6でレコードセットの派生クラスをつくると、この型には
CTimeクラスが割り当てられていました。

この datetime型 とはどんな型(フォーマット)なのでしょうか?
BooksOnlineでも調べられませんでした。

VCとは直接関係ない質問かもしれませんが、ご存知のかたご教授ねがいます。m(__)m

επιστημη 2003/02/26(水) 10:41:48
> この datetime型 とはどんな型(フォーマット)なのでしょうか?

データベース内部にどんなカタチで格納されているかが知りたいのですか?
それを知ってどうするのですか?
推測するに8-byte整数です。たとえば1900年1月1日からの通算秒数とか。

kai 2003/02/26(水) 10:54:26
επιστημηさん レスありがとうございます。

>データベース内部にどんなカタチで格納されているかが知りたいのですか?

はい、そうです。

>それを知ってどうするのですか?

テーブルにプログラムから書き込みをしたいのです。

「○丸年からの正の整数」ということでしょうか?

○丸年は何年なのでしょうか?
1ステップは何を示すのでしょうか?秒ですか?

ご存知のかた、ご教授よろしくお願いします。

επιστημη 2003/02/26(水) 11:10:27
> テーブルにプログラムから書き込みをしたいのです。

打ち込むSQL-statementにたとえば "{ ts '1998-09-24 10:02:20' }"
とか書けばいいんじゃないかと。
# 外したかしら?

kai 2003/02/26(水) 11:15:50
επιστημηさん レスありがとうございます。

>打ち込むSQL-statementにたとえば "{ ts '1998-09-24 10:02:20' }"

文字列を書けば良いと言うことですか?

επιστημη 2003/02/26(水) 11:23:12
> 文字列を書けば良いと言うことですか?

SQL-statementを直接食わすAPIがあるなら、たとえば
  "INSERT INTO table VALUES( { ts '1998-09-24 10:02:20' }"
みたいに。

# CTime型を直接マップできるのかもしれない。
# MFCのDB関連クラスは使ったことないので自信ないです。
# ふぉろーよろしく > だれぞ

たいちう 2003/02/26(水) 11:48:40
はずしてるかもしれません。
必要ならバックアップを取ってから試して下さい。

MFCのウィザードでは、CTime型が自動作成されますが、
CRecordSetから派生させたクラスCHogeRecordSetのメンバ変数を
COleDateTimeに変更してみて下さい。
それと、コンストラクタでm_hogeDate = 0;としているところを
コメントアウトして下さい。

当方も理解が曖昧なので、うまく説明できませんが。

「参考文献」

「3週間完全マスター Visial C++ 6.0」日経BP社
 の14日目

kai 2003/02/26(水) 11:59:53
たいちうさん レスありがとうございます。

>MFCのウィザードでは、CTime型が自動作成されますが、
>CRecordSetから派生させたクラスCHogeRecordSetのメンバ変数を
>COleDateTimeに変更してみて下さい。
>それと、コンストラクタでm_hogeDate = 0;としているところを
>コメントアウトして下さい。

やってみたいのですが、

DoFieldExchange()という関数はどうすれば呼ばれるのでしょうか?
まさか、 UpdateData()ですか?
そうすれば insert into なとのSQL文を投げなくてもデータベースに
書き込みができるのでしょうか?

トンチンカンなことをいっていたらゴメンナサイ。
よろしくお願いします。

たいちう 2003/02/26(水) 12:14:34
> DoFieldExchange()という関数はどうすれば呼ばれるのでしょうか?

CRecordset::Update()で呼ばれませんか?

wood 2003/02/26(水) 12:43:33
>そうすれば 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接続になるんでしょ
なので
多少機能的に私の環境と違うため確実回答とはいえてません

kai 2003/02/26(水) 13:05:41
たいちうさん レスありがとうございます。

>CRecordset::Update()で呼ばれませんか?

そういうことでしたか。

woodさん レスありがとうございます。

>insert、DELETE、selectなどのSQL文は使用していません
>Executeは使ってませんよ(カプセル化はされていると思うけど)

レコードに書き込みたい場合などに
レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
ということでしょうか?

>但し「kai さん」の使用しているクラスが「CDAOxxxx クラス」
>JETエンジン経由ODBC接続になるんでしょ

JETではないようです。SQL7でデータベースを作成しています。
JET==***.MDB ですよね? 今は ***.MDF を使っています。

余談なのですが
クラスの新規作成で、基本クラスをCDaoRecordsetをえらんでも
基本クラスは CRecordset になってしまうようですね。バグでしょうか。
ですから、今は CDaoRecordset の派生ではなく CRecordset の派生を
つかっています。

wood 2003/02/26(水) 14:34:45
>JETではないようです。SQL7でデータベースを作成しています。
>JET==***.MDB ですよね? 今は ***.MDF を使っています。
アクセスするエンジン(JET35.DLLやDAO30.DLL)
の話で物理ファイルの話ではありません
ODBC接続の場合、DAOでオラクルもアクセスできるよ

おおざっぱには
>レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
>ということでしょうか?
だと思いますけど細かい操作したいときはやはり、SQL文を投げる必要
が出てくるんじゃないかな?

いまは、自分に必要ないから使ってませんけど

datetimeは解決したんですか、話の内容私が変えたみたいですけど
解決したんだったら「済」にして下さい
ほんで、別のスレッド上げたほうが良いと思いますけど

kai 2003/02/26(水) 15:19:58
woodさん レスありがとうございます。

>>JETではないようです。SQL7でデータベースを作成しています。
>>JET==***.MDB ですよね? 今は ***.MDF を使っています。
>アクセスするエンジン(JET35.DLLやDAO30.DLL)
>の話で物理ファイルの話ではありません
>ODBC接続の場合、DAOでオラクルもアクセスできるよ

そうなのですか。ただ自分がなんのエンジンを使っているか
わかっていません。f(^^;;;

>おおざっぱには
>>レコードセットの派生クラスをつくれば、SQL文を投げる必要はない
>>ということでしょうか?
>だと思いますけど細かい操作したいときはやはり、SQL文を投げる必要
>が出てくるんじゃないかな?

そういうことなのですね。わかりました。

>datetimeは解決したんですか、話の内容私が変えたみたいですけど
>解決したんだったら「済」にして下さい

まだ試行錯誤中なんです。m(__)m

kai 2003/02/27(木) 09:28:47
[[解決]]
いろいろ考えたのですが、理解できなかったのでdatetime型を
使うのをやめることにしました。

皆様、アドバイスありがとうございました。

x 2003/02/27(木) 23:39:03
[解決]されたようですが、参考までに。

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

古いスレッドには追加発言できません。