- PR -

UPDATEステートメントの構文について

投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-04 22:13
こんばんは。

>SQL文が作成される際にチェックするにはどのようにするのが適当かお教えください。

僕が伝えたかったのは先ずSQL文として意味を成しているかという事です。
Access等で使用するSQLと同じでテーブル名がシート名になっただけです。
UPDATE [散布基地$] ではUPDATE文が不完全でエラーになりますよね。

パラメータを展開した形でとなると少々手間が掛かりますが確認は可能なようです。

こちらを参照してみて下さい。 ODP.NETの実行SQLについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11776&forum=7&start=0

>根本的に時刻のデータが日付のデータとして認識されるのには変わりないような

具体的にどう表示されますか?
SQLでFormat関数等で整形してみてはどうですか?

とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-04 22:53
引用:

うえつきさんの書き込み (2004-11-04 19:38) より:

…最終的には日付がNull値のセルの行番号を取得して行指定したいのですが。




編集されたの気付かなかったです。

そういえば前に別のスレッドでお会いしましたね。

そのときはNull値をTableStyleで別の値に置き換えて表示しましたね。

では、WHERE条件で

WHERE 日付 Is Null

でいけるんじゃないですか。行を指定するのは何のためですか?
うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-11-05 06:06
おはようございます。

引用:
WHERE条件で

WHERE 日付 Is Null

でいけるんじゃないですか。行を指定するのは何のためですか?



重ね重ね仰るとおりです・・・


>根本的に時刻のデータが日付のデータとして認識されるのには変わりないような

↑すいません、この現象について私の認識が間違っておりました。
セルが狭かったので、日付の後に時刻が書かれていることに気がつかなかったのです。

Excelに保存済みの時刻のみのデータは1989年の日付で時刻はそのままで保存される。
updateで"12月14日"等として送ると、当日の日付が付加されて保存される。
Formatで送っても、日付が付加される、という現象が起こってました。
Excelのセル設定を触ってもう一度確認してみます。

[ メッセージ編集済み 編集者: うえつき 編集日時 2004-11-05 06:10 ]
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-05 08:34
引用:

うえつきさんの書き込み (2004-11-05 06:06) より:

Excelに保存済みの時刻のみのデータは1989年の日付で時刻はそのままで保存される。
updateで"12月14日"等として送ると、当日の日付が付加されて保存される。
Formatで送っても、日付が付加される、という現象が起こってました。
Excelのセル設定を触ってもう一度確認してみます。




おはようございます。

Formatでと書いたのはDataGridで表示する再にSQLの時点で『時刻』部分だけを取得しようと
しているわけです。

元々データ取得元になっている最初の段階のExcelシートで時刻のみが表示されていたとしても
データとしては日付と時間を持っています。例えば2004/11/5と表示されているセルの書式を
時刻に変えてもデータ自体は『2004/11/5 0:00:00』ですよね。

 ですからExcelシートで日付と時刻のフィールドが分かれていても中身は同じで表示の仕方が
違うだけなのです。ですからExcelから取得してデータグリッドに表示するだけでよいなら
SQL文で時刻部分だけを抜き出して表示してもいいんですけど、その場合はExcleシートの時刻
フィールドにデータを更新させる時には時間しかデータとして持っていませんから、正確な日付
データに更新されるかは疑問です。まあ、時間しか表示しないから日付のデータ自体はどうでも良ければそれでもよいのでしょうし、データとして日付部分もきちんと保持したいのであれば
Excel側に送る時に工夫してあげればいのではないでしょうか。

 それと元になるExcelシートは日付・時刻のフィールドは書式の設定をしておかないとダメで
しょうし、それでも表示が上手く行かない場合は、更新後にプログラム側でExcelの書式を
設定してあげれば良いのではないでしょうか




[ メッセージ編集済み 編集者: とっと 編集日時 2004-11-05 08:41 ]
うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-11-05 09:17
おはようございます。
引用:
SQLの時点で『時刻』部分だけを取得しようとしているわけです。


なんだか毎回とっと様の意図する内容からすると
素っ頓狂な方向で対処していますね、ワタクシ…

引用:

とっとさんの書き込み (2004-11-05 08:34) より:
元々データ取得元になっている最初の段階のExcelシートで時刻のみが表示されていたとしても
データとしては日付と時間を持っています。例えば2004/11/5と表示されているセルの書式を
時刻に変えてもデータ自体は『2004/11/5 0:00:00』ですよね。

 ですからExcelシートで日付と時刻のフィールドが分かれていても中身は同じで表示の仕方が違うだけなのです。



先回書き込んだときに時間のデータは日付の情報も持っていることに、気がつきましたが

同じデータが表示の仕方が違うだけだ、ということに
当たり前のことなのに説明していただくまで気がつきませんでした。
ありがとうございます。

日付と時刻のフィールドが別々なのはエクセルのほうは文字列として処理したいからです。
なので、ExcelのBookを生成するときに、セルの書式設定を文字列で保存したいと思います。

[ メッセージ編集済み 編集者: うえつき 編集日時 2004-11-05 09:19 ]
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-05 09:53
こんにちは。

>日付と時刻のフィールドが別々なのはエクセルのほうは文字列として処理したいからです。
>なので、ExcelのBookを生成するときに、セルの書式設定を文字列で保存したいと思います。

Excelのほうで文字列として処理したいのであれば最初からExcelの書式を文字列にしておけば
良いのではないんですか?インポートするExcelのシートを限定出来るなら。

で更新時のパラメータも日付型ではなく文字列型にしてあげればExcelのBookを生成するとき
に、セルの書式設定を文字列で保存しなくてもいけると思いますよ。
うえつき
会議室デビュー日: 2004/09/06
投稿数: 14
投稿日時: 2004-11-05 20:56
疑問は残る形ですが、UPDATEできました。
根気よく切り分けに付き合ってくださってありがとうございました。
(申し訳ない気持ちでいっぱいです)

結局DataSetを利用する方法ではなく、
非常に単純な以下のUPDATEステートメントに落ち着きました。

MD.CommandText = "UPDATE [散布基地$] " & _
"SET Day = 'ほにゃらら', Time = 'ほにゃらら' WHERE No = '8'"

Where 日付Is Null で指定する方法ですが、
結局自分では動くコードが書けないでいるので、
NoをWhere句で指定する方向でテストしました。

また、なぜDay・Timeの表記を変えてしまったかというと、
(Excel 側も日付をDayに、時刻をTime に変えてます)
この形の構文で、漢字かな表記でSQLを作成する方法が見つけられなかったのです…
できれば利用者の要望もあり、EXCEL側を漢字かな表記にしたいのですが、
これについて何かご存じでしょうか?

[ メッセージ編集済み 編集者: うえつき 編集日時 2004-11-05 20:59 ]
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-11-05 22:02
引用:

うえつきさんの書き込み (2004-11-05 20:56) より:

Where 日付Is Null で指定する方法ですが、
結局自分では動くコードが書けないでいるので、
NoをWhere句で指定する方向でテストしました。

また、なぜDay・Timeの表記を変えてしまったかというと、
(Excel 側も日付をDayに、時刻をTime に変えてます)
この形の構文で、漢字かな表記でSQLを作成する方法が見つけられなかったのです…
できれば利用者の要望もあり、EXCEL側を漢字かな表記にしたいのですが、
これについて何かご存じでしょうか?




こんばんわ。

若干話が逸れますが、MicrosoftAccessはされた事ありますか?

プロバイダーがJetプロバイダーなので基本的にはAccessと同じSQLでいけると
思うんですが・・・。(検証はちゃんとやってはないですが・・・)

Accessでテーブル名が[散布基地$]で、no、日付、時間、項目、場所というフィールドが
あるとしたら、このテーブルの日付フィールドを更新する時にどういうSQLを書きますか?

スキルアップ/キャリアアップ(JOB@IT)