VB script 型が一致しません。: 'cdate'

このQ&Aのポイント
  • Microsoft VBScript 実行時エラー エラー '800a000d' 型が一致しません。: 'cdate' というエラーが出てコンパイルができません。
  • CDATEの使い方を調べてもうまくできませんでした。初歩的な質問ですが、ご回答いただけるとうれしく思います。
  • 提供されたコードにおいて、oRec_Q_Reg1Data.Fields("D_time")とCDate( w_jyukobistart & "0:0:0")の型が一致していないためエラーが発生しています。
回答を見る
  • ベストアンサー

VB script 型が一致しません。: 'cdate'

Microsoft VBScript 実行時エラー エラー '800a000d' 型が一致しません。: 'cdate' というエラーが出てコンパイルができません。 いろんなサイトでCDATEの使い方を調べたのですが、うまく できませんでした。 初歩的な質問ですが、ご回答いただけるとうれしく思います。 以下コードになります。 if (oRec_Q_Reg1Data.Fields("D_time") >= CDate( w_jyukobistart & "0:0:0")) Then do while not oRec_Q_W_Reg2Data.EOF oRec_Q_W_RegWData.addnew    oRec_Q_W_RegWData.Fields("Hantei") =  oRec_Q_W_Reg2Data.Fields("Hantei") end if oRec_Q_W_Reg1Data.Update    oRec_Q_W_Reg2Data.Movenext loop

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

CDate関数に渡す引数が、日付型として認識できていないのだと思います。「w_jyukobistart」の中身がCDateで認識可能な日付になっているか確認してみてください。 > CDate(w_jyukobistart & "0:0:0") また、仮にw_jyukobistartが"2009/06/02"という日付をあらわす文字列の場合、このままだとCDateに渡されるのは "2009/06/020:0:0" という文字列になり、認識不可能になります。 CDate(w_jyukobistart & " 00:00:00") このように日付と時刻の境界に半角のスペースを一個入れればよいかと。 CDate(w_jyukobistart) これだけでもよいと思いますけどね。 それと気になったことがひとつ。 oRec_Q_Reg1Data.Fields("D_time") こっちはDate型に変換されていませんが大丈夫ですか? さらに追加。 If~End IfとDo~Loopの範囲が交差してしまっています。 コードの写し間違いかもしれませんが念のため。

boojar
質問者

補足

回答ありがとうございます。早速コーディングしてみると、 CDate(w_jyukobistart & " 00:00:00") で半角を入れました。 そうすると、「ADODB.Recordset エラー '800a0bcd' BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。」 というエラーが出ました。 今回のエラー部とはまた違うエラーなのでしょうか? すいませんが、分かったら、返信お願いいたします。 >>oRec_Q_Reg1Data.Fields("D_time") こっちはDate型に変換されていませんが大丈夫ですか? はDate型にしないとだめでしょうか? もしする場合は CDate(oRec_Q_Reg1Data.Fields("D_time"))でよろしいのでしょうか? >>If~End IfとDo~Loopの範囲が交差してしまっています。 私のタイプミスです。指摘ありがとうございます。 回答いただけてありがとうございます。 もしよろしければ、再度ご回答下さい。

その他の回答 (1)

回答No.2

oRec_Q_Reg1Data.Fields("D_time") これ自体が日付型になっていればCDateしなくても大丈夫です。 MsgBox TypeName(oRec_Q_Reg1Data.Fields("D_time")) とでもして、Date型になっているか確認してみてください。 > 今回のエラー部とはまた違うエラーなのでしょうか? そうだと思います。エラーメッセージにエラーが発生している行数が表示されていませんか? コードを見ると、レコードセットが3種類ありますね。 oRec_Q_W_Reg1Data oRec_Q_W_Reg2Data oRec_Q_W_RegWData (これはoRec_Q_W_Reg1Dataの打ち間違え?) oRec_Q_W_Reg1Dataについては、EOFなどで調査しないでFieldsプロパティにアクセスしていますが、これがレコードの範囲を超過していたりしていませんか?

boojar
質問者

お礼

日付型になっていたのでCDateしなくてもよくなりました。 今回のレコードセットでは、データのもってき方自体が違っており、 今回のエラーメッセージとは別の問題が発生しました。 今回の質問は今回で打ち切らせていただきたいと思います。 ただ非常に参考になる意見をご教授いただき緩瀉しております。

関連するQ&A

  • ACCESSでデータの書き込みが最終行のみできない

    ACCESS2000を言語(ASP,VBS)でテーブルのデータをもう一つのテーブルに書き込む処理を行っています。以下のコードで処理を行って いますが、どうしても最後の行だけ書き込むことができません。 他のサイトで調べたところ、テーブルに書き込み処理を行った 後に、Excelで出力しているため、書き込み処理を行なう前に 次の処理が走ってしまうとの記事がありました。 そこで、sleepを書き込み処理後に書いたのですがどうやら関係 ないようです。 基本的な質問かもしれませんが、ご教授いただけると助かります。 以下コード do while not oRec_Q_W_Reg2Data.EOF oRec_Q_W_RegWData.addnew   oRec_Q_W_RegWData.Fields("Hantei") =  oRec_Q_W_Reg2Data.Fields("Hantei")   oRec_Q_W_Reg2Data.Movenext loop bobj.Sleep 10 Response.Write("このメッセージは10秒後に出力されます")↓

  • VB6.0DataGridでのUpdate文で疑問?

    ADOの勉強したばっかりで、あまり詳しくありませんのでよろしくお願いします。 DataGridを使ってある条件で抽出しています。その抽出したものを更新したいのですが、 Do rs!分類ID = text1 rs.Update rs.MoveNext Loop Until rs.EOF という命令を書くと、いいような気がするのですが、なぜか抽出したデータが一個おきに書き換わります。 でも、 Do rs!分類ID = text1 rs.Update rs.MoveNext  if rs.EOF then rs.Previous END IF Loop Until rs.EOF と命令するとすべてのデータが書き換わります。 なぜなんでしょうか?疑問です。 VB6.0、ACCESS2000です。

  • windows2000server とSQL2000 でASP関連プロ

    windows2000server とSQL2000 でASP関連プログラムを実行したところ、下記 エラーが表示されます。このプログラムはtest環境WEBサーバー(windows2000)で実行 したところ下記エラーは表示されず、本番系環境WEBサーバー(windows2000でサーバー環境には 変更がないように思える)にaspのプログラムを載せ替え実行した時にエラーが発生してしまいました。 このエラーがなぜ起こってるのか早急に知りたく質問いたしました。 詳しい方、経験のある方返事を早めにいただけると非常にうれしいです。 【PG】 For n = 0 To (w_filecount - 1) '実績テーブル(重複処理する用)からの参照 RecordSet strSQL5 = "SELECT * FROM W_Reg1Data WHERE (fileNo = '" & w_delfilenm(n) & "');" set oRec_Q_W_Reg1Data = createobject("ADODB.Recordset") oRec_Q_W_Reg1Data.open strSQL5,oDB_MK_Scores,3,3 'Q_W_Reg1Dataのレコードがなくなるまで処理を繰り返す do while not oRec_Q_W_Reg1Data.EOF '削除登録 oRec_Q_W_Reg1Data.delete '次レコードへ移動 oRec_Q_W_Reg1Data.Movenext loop oRec_Q_W_Reg1Data.close Next 【エラーメッセージ】 Microsoft OLE DB Provider for ODBC Drivers エラー '80040e37' [Microsoft][ODBC Microsoft Access Driver] 入力テーブルまたはクエリ 'W_Reg1Data' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

  • カレント行取得

    Do While Not rs.EOF  If Text1(0).Text <> rs.Fields(1) Then   /*--*--*/   rs.MoveNext     Else   msg = "コードが重複しています."   MsgBox msg, vbOKOnly, "重複チェック"   Text1(0).Text = ""   Text1(0).SetFocus  End If Loop *------ text1(1) = rs.fields(1) text1(2) = rs.fields(2) -------* データベース(Access)にデータが3件入っていて、例えば、1件目のデータを更新したいのですが今のソースでは、/*--*--*/でデータベースを次々読んでいるので、3件読み終えたときにカレント行が4件目にあると思うので、それを”任意”の行にしたいのですが教えてください。

  • 【VB】コンボボックスにデータベースから取り出した値を入れたい

    VB2005です。 表題の通りですがやり方がよくわかりません。 データベースに接続し、 SQLで重複しない値を取り出すところまではできています。 SQL=SELECT DISTINCT FieldName FROM TableName VB6の時はこんなソースでした Do Until rs.EOF    Combo1.AddItem.Fields("FieldName")    rs.MoveNext Loop VB2005ではどう書くのでしょう? よろしくご教授ください。

  • リストボックス

    Do While Not rs.EOF   'データがある場合 Form2.List1.AddItem rs.Fields("顧客番号") & " " & rs.Fields("得意先名") rs.MoveNext Loop こうしたら、いちらんには 顧客番号  得意先名 111111111111   ああああ 11111111111   いいい と入っていて、得意先名をきちんと”ああああ”にそれえたいのですけどできるでしょうか? 桁数の指定とかできるでしょうか?

  • Access2010 「型が一致しません。」エラー

    お世話になっております。 テキストファイルからデータを取り込んで、テーブルにあるデータと同じデータのみを表示させるプログラムがあります。 コードが「001」のように整数の場合は問題ないのですが、「A001」のように英数のデータの場合は、このエラーが出てしまいます。 「実行時エラー13 型が一致しません。」 デバッグをクリックすると、下記の部分が黄色に反転します。 「If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then」 テキストファイルのデータがテーブルにない場合はエラーが出ませんので、一致したデータがある場合のみエラーが出ます。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub Form_Load() Dim dbs As Database Dim rst As Recordset Dim strImportDir As String Dim strFile As String Dim lngFileNum As Long Dim strData As String Dim avarFldData As Variant Dim iintLoop As Integer DoCmd.Hourglass True strImportDir = Application.CurrentProject.Path & "\" strFile = strImportDir & "File.TXT" Set dbs = CurrentDb GoSub ReadFile Me.Requery DoCmd.Hourglass False Exit Sub ReadFile: Set rst = dbs.OpenRecordset("履歴", dbOpenDynaset, dbAppendOnly) lngFileNum = FreeFile() Open strFile For Input As #lngFileNum Do Until EOF(lngFileNum) Line Input #lngFileNum, strData avarFldData = Split(strData, ",", , vbTextCompare) For iintLoop = 0 To UBound(avarFldData) avarFldData(iintLoop) = Trim$(avarFldData(iintLoop)) Next iintLoop If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then With rst .AddNew !コード = avarFldData(0) .Update End With End If ' End If Loop Close #lngFileNum rst.Close Kill strFile Return End Sub

  • 特定行の背景色を変えたいのですが

    vb6で組んでおりますがformの明細行はListView1です。 If ds.RecordCount > 0 Then Do Until ds.EOF Set oListItem = ListView1.ListItems.Add() oListItem.Text = ds.Fields("商品コード").Value oListItem.SubItems(1) = ds.Fields("JANコード").Value oListItem.SubItems(2) = ds.Fields("商品名").Value oListItem.SubItems(3) = ds.Fields("規格").Value if oListItem.SubItems(1) = '' then oListItem.ForeColor = RGB(250, 250, 250) oListItem.BackColor = RGB(250, 180, 180)-->(1)コンパイルエラー endif     ds.MoveNext Loop (1)コンパイルエラー⇒メソットが見つかりません。 がどうしても解消できません・・・初心者です。 ご教示のほどよろしくお願いします。

  • データベースから呼び出して、エクセルのシートに素早く転記したい。

    データベースから呼び出して、エクセルのシートに素早く転記したい。 オラクルのデータベースから呼び出して、エクセルのシートに転記しているのですが、 1項目ずつなので、1000行で1分くらい掛かります。 配列が良いと聞きますが、さっぱり分かりません。 何か良い方法があれば、御教授願えませんでしょうか? If (OraDset.EOF = False) Then Do Until (OraDset.EOF) Line_Cnt = Line_Cnt + 1 Range("C" & Line_Cnt).Value = OraDset.Fields("BBB").Value Range("D" & Line_Cnt).Value = OraDset.Fields("CCC").Value Range("E" & Line_Cnt).Value = OraDset.Fields("DDD").Value Range("F" & Line_Cnt).Value = OraDset.Fields("EEE").Value Range("G" & Line_Cnt).Value = OraDset.Fields("FFF").Value OraDset.MoveNext DoEvents Loop End If