I am working on a form on Access. It is supposed to insert data into a table, but I keep getting error 3464.
I am a little new to Visual Basic. This was previously working, but no longer. I am using SQL Server as a back-end. The connection works and it was inserting new rows. I have looked online but have not found a comprehensive explanation of this error.
Private Sub mSubmitButton_Click()
CurrentDb.Execute "INSERT INTO dbo_Reporting_Table([Date], Vendor, Ordered_By, Picked_Up_By, Reported_By) " & _
" VALUES('" & Me.mDate & "','" & Me.mVendor & "','" & Me.mOrdered_By & "','" & _
Me.mPicked_Up_By & "','" & Me.mReported_By & "')"
CurrentDb.Execute "INSERT INTO dbo_Items_Table([PO#], [Item], [Price], [Equipment], [Quantity]) " & _
" VALUES(" & Me.mPONumber & ",'" & Me.mItemInput0 & "'," & Me.mPriceInput0 & ",'" & _
Me.mEquipmentInput0 & "'," & Me.mQuantityInput0 & ")"
Me.mItemInput0 = ""
Me.mPriceInput0 = ""
Me.mEquipmentInput0 = ""
Me.mQuantityInput0 = ""
Me.mDate = ""
Me.mVendor = ""
Me.mOrdered_By = ""
Me.mPicked_Up_By = ""
Me.Requery
Exit Sub
Error_PopupMessage:
'Response = MsgBox(Message, vbOKOnly + vbInformation, "Form Entry Hint", "help", "1000")
Exit Sub
End Sub
Any advice on what I might be doing wrong would be greatly appreciated.
Vladimir_prog 0 / 0 / 0 Регистрация: 14.07.2016 Сообщений: 2 |
||||
1 |
||||
14.07.2016, 23:33. Показов 4316. Ответов 2 Метки sql, запрос, ошибка, с (Все метки)
Всем доброго времени суток.
Буду очень благодарен за помощь, а то уже 2 дня с этим вожусь.
0 |
mobile 26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
15.07.2016, 00:27 |
2 |
|||
Сообщение было отмечено Vladimir_prog как решение РешениеVladimir_prog, дата не текст, дата в Access поле типа Double — числовое поле с плавающей запятой. К тому же дату в ВБА надо задавать по американскому формату: mm/dd/yyyy. И указатель типа даты это решетки «#». Следовательно выражение для Where надо переписать так:
Обратный слэш указывает, что следующий символ не системный
1 |
0 / 0 / 0 Регистрация: 14.07.2016 Сообщений: 2 |
|
15.07.2016, 01:25 [ТС] |
3 |
mobile, большое спасибо за столь быстрый и рассписаный ответ !
0 |
Номер ошибки: | Ошибка 3464 | |
Название ошибки: | Microsoft Access Error 3464 | |
Описание ошибки: | Data type mismatch in criteria expression. | |
Разработчик: | Microsoft Corporation | |
Программное обеспечение: | Microsoft Access | |
Относится к: | Windows XP, Vista, 7, 8, 10, 11 |
Сводка «Microsoft Access Error 3464
«Microsoft Access Error 3464» обычно называется формой «ошибки времени выполнения». Программисты, такие как Microsoft Corporation, стремятся создавать программное обеспечение, свободное от этих сбоев, пока оно не будет публично выпущено. К сожалению, такие проблемы, как ошибка 3464, могут быть пропущены, и программное обеспечение будет содержать эти проблемы при выпуске.
Ошибка 3464 может столкнуться с пользователями Microsoft Access, если они регулярно используют программу, также рассматривается как «Data type mismatch in criteria expression.». Когда появится ошибка, пользователи компьютеров смогут уведомить разработчика о наличии ошибки 3464 через отчеты об ошибках. Затем Microsoft Corporation будет иметь знания, чтобы исследовать, как и где устранить проблему. Если есть запрос на обновление Microsoft Access, это обычно обходной путь для устранения проблем, таких как ошибка 3464 и другие ошибки.
Что вызывает ошибку 3464 во время выполнения?
Наиболее распространенные вхождения «Microsoft Access Error 3464» проблемы при загрузке Microsoft Access. Мы можем определить, что ошибки во время выполнения ошибки 3464 происходят из:
Ошибка 3464 Crash — это очень популярная ошибка выполнения ошибки 3464, которая приводит к завершению работы всей программы. Как правило, это результат того, что Microsoft Access не понимает входные данные или не знает, что выводить в ответ.
Утечка памяти «Microsoft Access Error 3464» — при утечке памяти Microsoft Access это может привести к медленной работе устройства из-за нехватки системных ресурсов. Есть некоторые потенциальные проблемы, которые могут быть причиной получения проблем во время выполнения, с неправильным кодированием, приводящим к бесконечным циклам.
Ошибка 3464 Logic Error — Логическая ошибка возникает, когда ПК производит неправильный вывод, даже когда пользователь вводит правильный вход. Обычные причины этой проблемы связаны с ошибками в обработке данных.
Повреждение, отсутствие или удаление файлов Microsoft Access Error 3464 может привести к ошибкам Microsoft Access. Как правило, любую проблему, связанную с файлом Microsoft Corporation, можно решить посредством замены файла на новую копию. Кроме того, некоторые ошибки Microsoft Access Error 3464 могут возникать по причине наличия неправильных ссылок на реестр. По этой причине для очистки недействительных записей рекомендуется выполнить сканирование реестра.
Классические проблемы Microsoft Access Error 3464
Частичный список ошибок Microsoft Access Error 3464 Microsoft Access:
- «Ошибка приложения Microsoft Access Error 3464.»
- «Microsoft Access Error 3464 не является программой Win32. «
- «Microsoft Access Error 3464 должен быть закрыт. «
- «Не удается найти Microsoft Access Error 3464»
- «Microsoft Access Error 3464 не найден.»
- «Ошибка запуска программы: Microsoft Access Error 3464.»
- «Файл Microsoft Access Error 3464 не запущен.»
- «Ошибка Microsoft Access Error 3464. «
- «Неверный путь к приложению: Microsoft Access Error 3464.»
Эти сообщения об ошибках Microsoft Corporation могут появляться во время установки программы, в то время как программа, связанная с Microsoft Access Error 3464 (например, Microsoft Access) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Документирование проблем Microsoft Access Error 3464 в Microsoft Access является ключевым для определения причины проблем с электронной Windows и сообщения о них в Microsoft Corporation.
Создатели Microsoft Access Error 3464 Трудности
Проблемы Microsoft Access и Microsoft Access Error 3464 возникают из отсутствующих или поврежденных файлов, недействительных записей реестра Windows и вредоносных инфекций.
В основном, осложнения Microsoft Access Error 3464 связаны с:
- Поврежденная или недопустимая запись реестра Microsoft Access Error 3464.
- Зазаражение вредоносными программами повредил файл Microsoft Access Error 3464.
- Другая программа (не связанная с Microsoft Access) удалила Microsoft Access Error 3464 злонамеренно или по ошибке.
- Другая программа, конфликтующая с Microsoft Access Error 3464 или другой общей ссылкой Microsoft Access.
- Microsoft Access (Microsoft Access Error 3464) поврежден во время загрузки или установки.
Продукт Solvusoft
Загрузка
WinThruster 2023 — Проверьте свой компьютер на наличие ошибок.
Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11
Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление
I have a database that worked perfectly before, but today for some reason it has this error:
run time error 3464 data type mismatch
When I click debug, it pointed out the line that has the error:
Set rst = CurrentDb().OpenRecordset(strSQL)
How could I fix it? Thank you!!!!
Below is my code:
Function DmdQtyThruDate(ItemVar As String, DatePeg As Date) As Double
Dim rst As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT Sum(TotQty) AS TotTotQty "
strSQL = strSQL & "FROM ("
strSQL = strSQL & "SELECT DISTINCTROW Sum([dbo_apsplan].[qty]) AS TotQty "
strSQL = strSQL & "FROM [dbo_apsplan] LEFT JOIN [dbo_job_sch] ON (([dbo_apsplan].[ref_line_suf] = [dbo_job_sch].[suffix]) AND ([dbo_apsplan].[ref_num] = [dbo_job_sch].[job])) "
strSQL = strSQL & "WHERE ([dbo_apsplan].[item]='" & ItemVar & "' AND [dbo_apsplan].[is_demand]=1 AND DateValue(IIf([dbo_apsplan].[ref_type]='j',[dbo_job_sch].[start_date],[dbo_apsplan].[due_date]))<=DateValue(#" & DatePeg & "#)) "
strSQL = strSQL & "UNION ALL "
strSQL = strSQL & "SELECT Sum([qty_ordered]-[qty_shipped]) AS TotQty "
strSQL = strSQL & "FROM [dbo_coitem] "
strSQL = strSQL & "WHERE (([item]='" & ItemVar & "') AND ([ref_num]is null) AND ([stat]='o' Or [stat]='p') AND (DateValue([due_date])<=DateValue(#" & DatePeg & "#)))); "
Set rst = CurrentDb().OpenRecordset(strSQL)
If rst.EOF = False Then
DmdQtyThruDate = Nz(rst("TotTotQty"), 0)
Else
DmdQtyThruDate = 0
End If
rst.Close
Set rst = Nothing
End Function
Parzival
2,0014 gold badges13 silver badges28 bronze badges
asked Apr 16, 2021 at 19:36
4
Consider using parameterized stored queries which is more efficient than VBA run queries especially with JOIN
and UNION
since Access engine saves best execution plan. This also helps avoid concatenation of SQL and VBA, enhances readability and maintainability, and better aligns data types.
SQL (save as a stored query; PARAMETERS
clause is supported in Access SQL)
PARAMETERS prmItemVar Text, prmDatePeg Date;
SELECT SUM(TotQty) AS TotTotQty
FROM (
SELECT SUM(a.[qty]) AS TotQty
FROM [dbo_apsplan] a
LEFT JOIN [dbo_job_sch] j
ON ((a.[ref_line_suf] = j.[suffix])
AND (a.[ref_num] = j.[job]))
WHERE a.[item] = prmItemVar
AND a.[is_demand]=1
AND DateValue(IIf(a.[ref_type] = 'j', j.[start_date], a.[due_date])
) <= prmDatePeg
UNION ALL
SELECT SUM([qty_ordered] - [qty_shipped]) AS TotQty
FROM [dbo_coitem]
WHERE [item] = prmItemVar
AND [ref_num] IS NULL
AND ([stat]='o' OR [stat]='p')
AND DateValue([due_date]) <= prmDatePeg
);
VBA
Function DmdQtyThruDate(ItemVar As String, DatePeg As Date) As Double
Dim qDef As DAO.QueryDef
Dim rst As DAO.Recordset
Dim strSQL As String
' INITIALIZE QUERYDEF
Set qDef = CurrentDb.QueryDefs("mySavedQuery")
' BIND PARAMETERS
qDef!prmItemVar = ItemVar
qDef!prmDatePeg = DatePeg
' OPEN RECORDSET
Set rst = qDef.OpenRecordset()
If rst.EOF = False Then
DmdQtyThruDate = Nz(rst("TotTotQty"), 0)
Else
DmdQtyThruDate = 0
End If
rst.Close
Set rst = Nothing: Set qDef = Nothing
End Function
answered Apr 16, 2021 at 20:34
ParfaitParfait
104k17 gold badges93 silver badges124 bronze badges
- Remove From My Forums
-
Question
-
I am trying to print a report I am recieving an emrro Run-tim error 3464: Data type mismatch in criteria expresson. How can I debug this error so that I can be able the report in Access?
-
Moved by
Thursday, July 12, 2012 1:38 AM
moving to a more appropriate forum (From:Excel IT Pro Discussions)
-
Moved by
Answers
-
Hi,
As your code, I found that your SQL is a select statement, and based on my try, I think the CurrentDb.Execute
cannot run a “Select” SQL statement. Since the “dbFailOnError” means
Rolls back updates if an error occurs. A “select” SQL statement will not update any object. I think we can use DoCmd.RunSQL strSQL instead.About this method, please refer to the following link:
http://msdn.microsoft.com/en-us/library/ff194626.aspx
And in your code “strSQL = rs![Col1]”. This statement will change the strSQL statement, it will return the result of the select statement. Then use this result of the select statement
will cause an error.
Jaynet Zhang
TechNet Community Support
-
Marked as answer by
Jaynet Zhang
Thursday, July 19, 2012 3:03 AM
-
Marked as answer by