先週、if 条件で奇妙な振る舞いをしました。何が起こったのか知っている人に感謝します。私は回避策を見つけましたが、影にいるのは好きではありません。
説明させてください。
シナリオ 0 (これはすべてが爆発する前に機能していた)
言語: Visual Basic
Net Fwk : 3.5
クライアント: XP (x86) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: Jet OleBD
Office : 2007 x86
アクセスする理由
低コストで、ユーザーは MS Access を利用でき、必要なものはすべて揃っています。
そしてある日、Win7が登場しました:
シナリオ 1 (すべてが機能しなくなった場合)
言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86
この新しいシナリオでは、アプリケーションが正しく動作しなくなりました。
そして始まるオデッセイ。
最初に、開発マシンでアプリケーションをテストしました。シナリオはシナリオ 0 に似ていたので、すべて問題なく動作しました。
次に、Win7 テスト マシンを起動し、どこに問題があるかを突き止めようとしました。
シナリオ 2
言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: ローカル フォルダーへのアクセス
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86
アプリケーションをテストすると、すべて正常に動作します。
赤ちゃんのように 2 ~ 3 分間泣いた後、Win7 テスト マシンを使用してインターネット経由で顧客のサーバーに接続することにしました。
シナリオ 3
言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86
ローカル DB に対して実行した同じアプリケーションがリモート DB に対して失敗したことに驚きました (構成ファイルの接続文字列を変更しただけです)。
アプリケーションにデバッグ ステートメントを追加し始め、何度もテストしたので、期待どおりに動作しない理由を見つけることができました。
最後に、私はその声明を見つけました
If FinalDate.Subtract(StartingDate).TotalDays + 1 = 7 Then
シナリオ 1 と 3 では常にFalseを返します(常に!)。そして、シナリオ 0 と 2 のTrueまたはFalse 。
私はトールをののしり、ステートメントへのこの変更をテストしました
Dim totalDays As Integer = CInt(FinalDate.Subtract(StartingDate).TotalDays)
If totalDays + 1 = 7 Then
ご想像のとおり、これはうまく機能します。
しかし、問題は「なぜ?」です。
どうして????!!!!
何か案が?