- ベストアンサー
ACCESSの型変換(日付型)について
- ACCESSの型変換に関する問題解決方法を教えてください。
- お客様からの作業依頼を受け、作業種別に応じた納品期限を関数で設定したいです。
- 現在、納品期限のテーブルのフィールドの型変換でエラーが発生しています。解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
「担当受付日時」の属性は何ですか? 日付型なら "#" & [担当受付日時] & "#" ではなく、[担当受付日時]と記述します。 文字型ならFunction 納品期限()の引数を文字型とし、関数内で、IsDate、CDate関数を 使ってチェックと変換を行うべきです。 あと、気になった点を少し直してみました。 Function 納品期限(ByVal 作業番号 As Integer, ByVal 受領日 As Date, ByVal 受領時間 As Date) As Variant Select Case 作業番号 Case 101: '当日17時30分までの納品 納品期限 = Format(受領日, "YYYY/MM/DD 17:30:00") Case 201: '翌日17時30分までの納品 納品期限 = Format(DateAdd("d", 1, 受領日), "YYYY/MM/DD 17:30:00") Case 301: 'お客様との調整 納品期限 = "お客様との調整" Case Else 納品期限 = "" End Select End Function (1)パラメータにByValキーワードを付けました。 (2)受領日の0時0分0秒を作る意味はないのでは? (3)受領時間は最終的に使用されないようです。 それと、SQLの中でユーザ関数を呼び出すと、遅いので、今回のように 4通りくらいならIif関数をネストしてみてはいかがでしょう。 =Iif(作業番号=101,Format(受領日,"YYYY/MM/DD 17:30:00") ,Iif(作業番号=201,Format(DateAdd("D",1,受領日),"YYYY/MM/DD 17:30:00") ,Iif(作業番号=301,"お客様との調整","")))
お礼
☆ 御礼 ☆ 御指導に基づく作業を行い、次のSQL文でフィールドデータを更新できました。 UPDATE Job_List SET tbl.納品期限 = 納品期限([作業番号],[受領時間]); これより、各種処理・画面の製作に移ります。 本当にありがとうございました。 <修正作業概要> 1 関数の修正 大変ありがとうございました。 特に、「Format(DateAdd("d", 1, 受領日), "YYYY/MM/DD 17:30:00")」の表現については全く未知のことでした。 2 テーブルの再作成 テーブルの設計による障害を避けるため、テーブルを再作成しました。 拝
補足
早速のご指導、まことにありがとうございました。 ご指摘の点について、記述誤り、表現不足がありましたことをお詫び申し上げます。 取り急ぎ御指導に基づき修正作業を行い、あらためて御礼を申し上げたく存じます。 よろしくお願いします。 <ご質問> 「担当受付日時」の属性は何ですか? <ご質問に対する回答> 下記に示すように、「受領日」の誤りであり、「受領日」は日付型としております。 <記述誤り> ----------誤り1---------- 【前提】 (1)テーブル「納品期限管理テーブル」 ----------修正1---------- (1)テーブル「Job_List」 ----------誤り2---------- 【これまでの試み】 (2)フィールド更新 データを更新するため次のSQL文を実行する。 「UPDATE Job_List SET Job_List.担当受付日時 = 納品期限([作業番号],"#" & [担当受付日時] & "#","#" & Format([担当受付日時],"HH:NN") & "#");」 ----------修正2---------- 「UPDATE Job_List SET Job_List.納品期限 = 納品期限([作業番号],"#" & [受領日] & "#","#" & Format([受領日],"HH:NN") & "#");」 <表現不足等> ・時間について 記述サンプルは簡略化してあり、午前中に作業依頼を受領したものは当日中に、午後のものは翌日に納品します。 よって、受領時間は必要な情報です。ただし、御指導により自分なりに考えた結果、「受領日」が日付と時間の情報をもっていたら、引数として組み込むことは不要と判断しますので、一から作り直します。 ・Iif関数について 有益な指導、ありがとうございます。ただ、作業種別は全部で39種あり、納品までの期限設定ルールは13種あります。また、営業日を勘案する処理を行う必要から、case文で処理したいと存じます。 以上