Я построил этот код как тест для удаления диапазона записей из базы данных Access 2013 на основе ряда дат. Я получаю недостающую ошибку оператора в выражении запроса «START_DATE> = ..... и т. Д. Я также попробовал выражение select с апострофами.Что такое недостающий оператор в этом коде VBA?
ПРИМЕЧАНИЕ: линия CALL - это одна строка в действительном коде. Кроме того, если я запустил линию CALL с помощью параметра «Между/И», а не «=» = < =, код завершается без ошибок, но ничего не выполняет. Он не находит и не удаляет строки.
Function Delete_Range()
Dim begdt As Date
Dim enddt As Date
'user inputs date range
begdt = InputBox("Enter beginning date as mm/01/yyyy", "BEGINNING DATE")
enddt = InputBox("Enter ending date as mm/01/yyyy", "ENDING DATE")
Dim objectrecordset As ADODB.Recordset
Set objectrecordset = New ADODB.Recordset
'initiate recordset object
objectrecordset.ActiveConnection = CurrentProject.Connection
Call objectrecordset.Open("select START_DATE
from TEMP_DATE_RANGE where START_DATE IS >= "
& begdt & " AND <= " & enddt, , , adLockBatchOptimistic)
While objectrecordset.EOF = False
'delete record
objectrecordset.Delete
objectrecordset.UpdateBatch
'move to next record
objectrecordset.MoveNext
Wend
End Function
Благодарим всех вас за помощь. Вот код, который сработал.
DoCmd.SetWarnings (warningsoff)
'Declare variables
Dim begdt As String
Dim enddt As String
'User inputs variables
begdt = InputBox("Enter beginning date as mm/01/yyyy", "BEGINNING DATE")
enddt = InputBox("Enter ending date as mm/01/yyyy", "ENDING DATE")
'Format variable as date and error handling
If Not (IsDate(begdt) And IsDate(enddt)) Then
MsgBox "Please enter a date using a the date format", vbOKOnly
GoTo Finished
Else
begdt = Format(begdt, "\#yyyy\/mm\/dd\#")
enddt = Format(enddt, "\#yyyy\/mm\/dd\#")
End If
'Delete records from tables based upon user input date range
Dim SQL As String
Dim SQL2 As String
Dim SQL3 As String
SQL = "DELETE * FROM TEST_TBL_1 WHERE START_DATE BETWEEN " & begdt & " AND " & enddt & ""
SQL2 = "DELETE * FROM TEST_TBL_2 WHERE START_DATE BETWEEN " & begdt & " AND " & enddt & ""
SQL3 = "DELETE * FROM TEST_TBL_3 WHERE START_DATE BETWEEN " & begdt & " AND " & enddt & ""
DoCmd.RunSQL SQL
DoCmd.RunSQL SQL2
DoCmd.RunSQL SQL3
'Close form and show process complete page
DoCmd.SetWarnings (warningson)
DoCmd.Close acForm, "DELETE HISTORY", acSaveNo
DoCmd.OpenForm "COMPLETE", acNormal, "", "", , acNormal
Finished:
End Function
не было бы проще использовать что-то вроде следующего ' db.execute ("DELETE * FROM TEMP_DATE_RANGE WHERE START_DATE BETWEEN #" & begdt & "# AND #" & enddt & "#") 'или я что-то упустил? зачем вам нужно выбирать и звонить? – LiamH