- ベストアンサー
アクセスのデータ型エラーについて
- 日付型のエラーについて質問があります。
- dateserial関数を使って8ケタ数字を日付に変換したのですが、クエリやフィルタでの抽出の時にエラーになってしまいます。
- 受付日は8ケタの数字型(長整数)になっています。isdate関数を見ると-1で日付としては認識しているとは思うのですが、何が原因かわかりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
SELECT DateSerial(Left([テーブル1]![UDATE],4),Mid([テーブル1]![UDATE],5,2),1) AS 式1 FROM テーブル1 WHERE (((DateSerial(Left([テーブル1]![UDATE],4),Mid([テーブル1]![UDATE],5,2),1))=#1/1/2011#)); 私のacc2000では上記のクエリは実行可能で該当レコードが選択されましたので、何らかの単純な記載間違いの可能性が高いと思います。
その他の回答 (3)
- DexMachina
- ベストアンサー率73% (1287/1744)
> #2011/1/1#等で抽出しようとすると型が一致しないエラーが > 出てしまいます。 クエリで、演算フィールドに抽出条件や並べ替えを指定したときに 型不一致エラーが出る場合、データが「Null」(空白)になっている レコードがある、というパターンが(私の場合は)多いです。 ですので、まずは「空白」のデータがないか確認してみることを お勧めします。 あった場合の対処法ですが・・・ a)「受付日」が空白のものを除外してよいなら、そのフィールドに 「Is Not Null」の抽出条件をつける b)除外しては問題がある場合は、IIF関数で場合分け: <一例> IIF(IsNull([受付日]), Null, DateSerial(Left([受付日],4),Mid([受付日],5,2)+1,1)) c)希望の結果を返すユーザー関数をVBAで定義しておいて、 クエリではそれを使用 ・・・といったところかと思います。 (「c」の利点は、IIF関数だと第1引数の結果に依らず、第3引数の 式が演算されるのに対して、ユーザー定義関数ならIf文の分岐を 使用することで、その演算自体を省略できる(はず)、と: 実際の処理時間に差が生じるかの確認は行っていないので、 事実誤認がありましたらご容赦願います(汗)) Public Function LongToDate(nDate As Variant) As Variant On Error Goto エラー処理 Dim Rsl As Variant If IsNull(nDate) Then Rsl = Null Else Rsl = DateSerial(Left([受付日],4),Mid([受付日],5,2)+1,1) End If 終了処理: LongToDate = Rsl Exit Function エラー処理: Rsl = "#エラー(" & Err.Number & ")" Resume 終了処理 End Function
お礼
返答ありがとうございます。 現在、nullは無いはずです。 受付日には条件でisnotnullで8ケタの数字のみ抽出しています。 他の原因を探しているのですがなかなかわかりません。
- shut0325
- ベストアンサー率40% (490/1207)
- kmetu
- ベストアンサー率41% (562/1346)
こちらでクエリーを作成して試してみましたがエラーにはなりませんでした。 再度作成しなおしてみてはいかがでしょう。
お礼
一度、やってみましたがエラーでした。 おそらくデータにミスがあると思われます。 皆様ありがとうございました。
お礼
回答ありがとうございます。 皆さんが出来ているのでやはり私のミスでしょう。 それがどこかがなかなか見つかりません・・・ ありがとうございました。