C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: Windows7でVBからmdbが操作出来ない


(過去ログ 89 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■52668 / inTopicNo.1)  Windows7でVBからmdbが操作出来ない
  
□投稿者/ hs (197回)-(2010/08/19(Thu) 17:50:34)

分類:[VB.NET/VB2005 以降] 

いつもお世話になっております。

PCをVISTAから7に変えました。
現在使用しているアプリはVS2008-VBで作成。
データベースはAccess2003のmdbです。

作成したアプリを7のPCにインストールしmdbを操作するPGを実行すると、全てエラーとなってしまいます。
エラー内容は、クエリ式のエラー、構文エラーなど、SELECT、INSERT、UPDATEを実行時いずれもエラーになっています。
もちろんVISTAからは正常に動作しています。

VISTAのPCには、Access2003はインストールされています。
7のPCには、Access2003はインストールされていません。

mdbの操作のみであればAccessは必要ないと認識しています。
もちろんAccessがインストールされていないPCでも動作確認しております。

原因が分かりませんご教授よろしくお願いします。
引用返信 編集キー/
■52669 / inTopicNo.2)  Re[1]: Windows7でVBからmdbが操作出来ない
□投稿者/ なちゃ (462回)-(2010/08/19(Thu) 17:54:35)
64ビット版だったりしません?
引用返信 編集キー/
■52670 / inTopicNo.3)  Re[2]: Windows7でVBからmdbが操作出来ない
□投稿者/ hs (198回)-(2010/08/19(Thu) 18:00:19)
No52669 (なちゃ さん) に返信
> 64ビット版だったりしません?

32ビット版を使用しています。


引用返信 編集キー/
■52671 / inTopicNo.4)  Re[1]: Windows7でVBからmdbが操作出来ない
□投稿者/ 魔界の仮面弁士 (1757回)-(2010/08/19(Thu) 18:23:17)
2010/08/19(Thu) 18:56:56 編集(投稿者)

No52668 (hs さん) に返信
> SELECT、INSERT、UPDATEを実行時いずれもエラーになっています。

Windows 7 (32bit版)であれば、JET 4.0 Service Pack 8 よりも
後のバージョンの Jet がインストールされているはずなのですけれどね。

DML がエラーになるとの事ですが、接続まではできるという事でしょうか?
それとも、接続する段階でエラーになるのでしょうか?
接続方式は ADO.NET でしょうか?
エラーの内容は何でしょうか?

・Windows 7 において、DAO360.DLL のレジストリ参照が解除されてしまうという
 事例を何度か耳にしています(理由は不明)。regsvr32 で回復できるようです。

・mdb の照合順序を確認してみて下さい。実行環境で非サポートの collate が
 使われていると、下記のエラーを吐くことがあります。
 Selected Collating sequence not supported by the operation system
 一時的に他の設定(1033等)にしたmdbで検証するのも手かも知れません。

・mdb を配置したフォルダに対して、書き込み権限を有しているかどうかを
 確認してみて下さい。ldb の生成のために必要です。
引用返信 編集キー/
■52672 / inTopicNo.5)  Re[2]: Windows7でVBからmdbが操作出来ない
□投稿者/ hs (199回)-(2010/08/19(Thu) 18:57:29)
No52671 (魔界の仮面弁士 さん) に返信
> ■No52668 (hs さん) に返信

> 接続まではできるという事でしょうか?
> それとも、接続する段階でエラーになるのでしょうか?
> 接続方式は ADO.NET でしょうか?

接続までは確認出来ています。
接続方法は Dim Cn AS New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="○○○.mdb") です。

> ・実行環境に Microsoft.JET.OLEDB.4.0(もしくはそれ以降のバージョン)の
>  OLE DB プロバイダがインストールされているかを確認して下さい。
確認方法がわかりませんでした。m(__)m

> ・mdb を配置したフォルダに対して、書き込み権限を有しているかどうかを
>  確認してみて下さい。
アクセル許可はフルコントロールです。
引用返信 編集キー/
■52692 / inTopicNo.6)  Re[3]: Windows7でVBからmdbが操作出来ない
□投稿者/ hs (201回)-(2010/08/20(Fri) 17:58:49)
エラーが出ている原因が分かりました。
ただし、解決はできておりませんので、引き続きお力をお貸しください。

WHEREつきのSELECT実行時
INSERT時にエラーになっている事が分かりました。
つまりJet4.0はインストール・動作している状況です。

そこで、どの部分でエラーになるかPGを作成し、テストしてみました。
日付型フィールドをWHEREに入っていたり、INSERTする際、に必ずエラーになってしまいます。
内容は、日付の構文エラーとなります。
この現象は、今回問題となっているWindows7のPCのみで、
ほかのWindows7やVISTAのPCでは、正常にデータの更新が確認できています。
PGは以下の通りです。

Cn.Open()
Dim SQL As String = "INSERT INTO T_Support(FURIGANA, SIMEI, SEINEN, SEIBETSU, NENREI) VALUES('サポート', 'サポート', #" & Now & "#, True, 30)"
Dim Cm As New OleDb.OleDbCommand(SQL, Cn)
Cm.ExecuteNonQuery()
Cn.Close

Windows7だと、日付を扱うには特殊な事が必要なのでしょうか?
見当もつかず困っております。
引用返信 編集キー/
■52693 / inTopicNo.7)  Re[4]: Windows7でVBからmdbが操作出来ない
□投稿者/ 魔界の仮面弁士 (1758回)-(2010/08/20(Fri) 18:17:10)
2010/08/20(Fri) 18:40:01 編集(投稿者)

No52692 (hs さん) に返信
> ただし、解決はできておりませんので、引き続きお力をお貸しください。
照合順序は何に設定されていましたか?
エラーの内容は何でしょうか?
(No52671 の繰り返しになってしまいますが、念のために確認させておいて下さい)


> Dim SQL As String = "INSERT INTO T_Support(FURIGANA, SIMEI, SEINEN, SEIBETSU, NENREI) VALUES('サポート', 'サポート', #" & Now & "#, True, 30)"
これは Win7 でなくとも NG です。
それでなくとも、Option Strict On でエラーになりますよね。


第一に、Now は日付型であって文字列型ではありません。
そのため、& 演算子で連結する前には、文字列へ変換する必要があります。
(もちろん、CStr で変換するのは NG です)

第二に、このコードでは日付書式がカルチャー設定に依存してしまいます。
(たとえば、OS の地域設定が和暦モードだと途端に破綻します)
JET の SQL において日付リテラルを使うのであれば、
 #12/31/1999#
 #12/31/1999 23:34:56#
 #12/31/1999 11:34:56 PM#
のいずれかの書式を利用してください。yyyy/MM/dd では無いので注意。
(実行環境によっては yyyy/MM/dd でも処理されますが、本来は MM/dd/yyyy です)


> Windows7だと、日付を扱うには特殊な事が必要なのでしょうか?
それ以外の突っ込みどころとしては、

・Now は、時刻部を含んだ値です。生年月日に時刻も必要ですか?
・そもそも、生年月日列に Now を突っ込むのは如何なものかと。
・パラメータクエリーの利用も検討を。これなら書式を気にせずに済みます。
引用返信 編集キー/
■52697 / inTopicNo.8)  Re[5]: Windows7でVBからmdbが操作出来ない
□投稿者/ hs (202回)-(2010/08/20(Fri) 19:04:47)
No52693 (魔界の仮面弁士 さん) に返信
> 2010/08/20(Fri) 18:36:16 編集(投稿者)
>
> 照合順序は何に設定されていましたか?
恥ずかしながらこの言葉を初めて耳にしました。
Access2003で言う、[ツール]→[オプション]→[全般タブの新規データベースの並び順]であるなら、「日本語」となっています。

>>Dim SQL As String = "INSERT INTO T_Support(FURIGANA, SIMEI, SEINEN, SEIBETSU, NENREI) VALUES('サポート', 'サポート', #" & Now & "#, True, 30)"
> これは Win7 でなくとも NG です。
> それでなくとも、Option Strict On でエラーになりますよね。
過去上記の記述でエラーが出た事はありません。
もちろんNo.52692記述の通り、正常にデータの更新が確認できています。

> 第一に、Now は日付型であって文字列型ではありません。
> そのため、& 演算子で連結する前には、文字列へ変換する必要があります。
> (もちろん、CStr で変換するのは NG です)
この部分も過去に色々記述を試しており、 "#" & Now & "#" や "#" & Now.Date & "#" としてもエラーが出る事がありませんでした。
日付の扱いを軽視しておりました、すべてのソースを修正することにします。

> それ以外の突っ込みどころとしては、
> ・Now は、時刻部を含んだ値です。生年月日に時刻も必要ですか?
> ・そもそも、生年月日列に Now を突っ込むのは如何なものかと。
これはテスト用のPGなので、日付型と分かるSEINEN(生年月日)と付けておきました。
Nowだと簡単に日付をセット出来るのでこのようになっております。

> ・パラメータクエリーの利用も検討を。これなら書式を気にせずに済みます。
これについては、修正時に検討しようと思っております。



引用返信 編集キー/
■52698 / inTopicNo.9)  Re[6]: Windows7でVBからmdbが操作出来ない
□投稿者/ 魔界の仮面弁士 (1760回)-(2010/08/20(Fri) 20:20:36)
2010/08/20(Fri) 20:21:49 編集(投稿者)

No52697 (hs さん) に返信
>>それでなくとも、Option Strict On でエラーになりますよね。
失礼しました、エラーにはなりませんね。
(いずれにせよ、書式指定無しに連結すべきではないですが)

> 過去上記の記述でエラーが出た事はありません。
運が良かったという事で、これを機に修正しておきましょう。(^^;

ただし、Windows 7 でエラーになったという件と関係あるかどうかは分かりません。
(発生した例外の内容を教えてもらえれば、何か分かるかもしれませんが)


> もちろんNo.52692記述の通り、正常にデータの更新が確認できています。
この手のカルチャ依存の問題発覚を早めるため、当方の検証用環境においては、
OS 設定を意図的に「和暦」「日付区切"-"」に変更してあります。
(和暦設定を好むユーザーもいますので…)

この場合、先のコードでは #22-08-20 18:30:25# というリテラルが生成されますが、
実際に mdb に記録される値は『2022年』の8月20日午後6時30分25秒 でした。

また、扱う日付が仮に 1999 年であったなら、#11-08-20 18:30:25# といった
リテラルが生成されます。この場合は、1999年でも2011年でもなく、
『2020年11月8日』として扱われる事になってしまいます。

この JET の日付仕様は、Y2K 問題で有名になった部分でもあるのですが、
VB6/VBA では、和暦環境でも Year(Now) や CStr(Now) が西暦で返されのに対し、
VB.NET では和暦で返してくるため、問題になりやすい箇所でもあります。


> 日付の扱いを軽視しておりました、すべてのソースを修正することにします。
# 日付以外にも OS 依存に陥りやすい箇所は多々あったり…。
引用返信 編集キー/
■52792 / inTopicNo.10)  Re[7]: Windows7でVBからmdbが操作出来ない
□投稿者/ hs (203回)-(2010/08/24(Tue) 16:19:49)
No52698 (魔界の仮面弁士 さん) に返信

今回はmdbにある全日付型のフィールドをテキスト型に統一。
また、日付を扱う際にはFormat関数で yyyy/MM/dd hh:mm:ss で統一することで、無事に解決致しました。

ありがとうございました。
解決済み
引用返信 編集キー/
■52807 / inTopicNo.11)  Re[8]: Windows7でVBからmdbが操作出来ない
□投稿者/ 魔界の仮面弁士 (1769回)-(2010/08/24(Tue) 18:27:40)
No52792 (hs さん) に返信
> 今回はmdbにある全日付型のフィールドをテキスト型に統一。
おぉ。(^_^;)


> また、日付を扱う際にはFormat関数で yyyy/MM/dd hh:mm:ss で統一することで、無事に解決致しました。
「yyyy/MM/dd hh:mm:ss」ですか?

"hh" は 12時間法での書式ですし、"/" や ":" は
コントロールパネルの地域設定の影響を受ける記法ですが、
本当に大丈夫でしょうか?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -