Access(365)からSqlserverのテーブルを参照するパススルークエリの接続について
NativeClientが非推奨のため、oledbのデータソースで接続する様にしたところ、
パススルークエリをレコードソースにしたフォームで、date型のフィールドの表示が
テキストボックスの書式が”yyyy/mm/dd”でも”yyyy-mm-dd”になってしまいます。
データソースで解決できればと思っていますが、解決方法はないでしょうか?
Access(365)からSqlserverのテーブルを参照するパススルークエリの接続について
NativeClientが非推奨のため、oledbのデータソースで接続する様にしたところ、
パススルークエリをレコードソースにしたフォームで、date型のフィールドの表示が
テキストボックスの書式が”yyyy/mm/dd”でも”yyyy-mm-dd”になってしまいます。
データソースで解決できればと思っていますが、解決方法はないでしょうか?
ちょっと良くわからないですが、どういう状態になったら解決なのでしょうか。
”yyyy-mm-dd”を”yyyy/mm/dd”にしたら解決だとした場合、SQL ServerのDate型は「2024-02-27」で保持されるので、そういうものです。
Accessで表示する際に変換する、などの対処方法で良いと思います。
※的外れだとすみません
すずやんさん、ありがとうございます。
保持されるのはおっしゃる通りなのですが、NativeClient接続では日付として扱えていたものが
テキストとして認識されることで、”-”で区切られた日付風の文字列は書式設定の通り表示さない様で困っています。
その日付のようなテキストをACCESSで日付として認識させたいのなら、データ型変換関数で変換してあげればいいんじゃないですかね
どこまでのことを望んでるのか分かりませんが、SQL Server側で、ということであればテキストで保存されているデータを数値データ(日付のシリアル値)に変換して受け取るとかになるんですかね
CAST および CONVERT (Transact-SQL)
hirotonさん、castするかdatetime型に変更するのは最後の手段にしたいです。
接続方法で回避は出来そうです。
SQL Server + Accessで開発する場合、SQL Serverでdate型は使っていません。
ご指摘のようなトラブルが発生するためです。
date (Transact-SQL)
下位クライアントの下位互換性
https://learn.microsoft.com/ja-jp/sql/t-sql/data-types/date-transact-sql?view=sql-server-ver16#backward-compatibility-for-down-level-clients
どうしても使う場合は、Accessへ渡す前にdatetime型に型変換しています。
SELECT Cast([日付] as datetime) AS 日付 FROM テーブル;
toneさん、貴重な情報ありがとうございます。
せめてMS社が提供している各接続方法の結果は統一して欲しいですね。
いろいろ試した結果
NativeClient 〇/oledb ×/microsoft odbc driver17 〇
理由は不明