У меня есть сохраненный запрос вставки, чтобы добавить запись в таблицу. Параметры запроса выводятся из несвязанной формы. 2 полей для таблицы относятся к типу данных да / нет. Элемент управления формой для этих полей является флажком.
Вот сохраненный запрос «qryInsertLog»
PARAMETERS UserPar Text ( 255 ), ApprovedByPar Text ( 255 ), CCedByPar Text ( 255 ),
UnitIdPar Short, NotePar LongText, Z3Par Bit, Z5Par Bit, FollowupNotesPar LongText;
INSERT INTO tblLogBook ( [User], ApprovedBy, CCedBy, UnitID, Notes, Z3, Z5, FollowupNotes )
SELECT [UserPAR] AS Expr1, [ApprovedByPar] AS Expr2, [CCedByPar] AS Expr3,
[UnitIDPar] AS Expr4, [NotePar] AS Expr5, [Z3Par] AS Expr6, [Z5Par] AS Expr7,
[FollowupNotesPar] AS Expr10;
Вот мой код VBA, привязанный к кнопке сохранения в моей форме: [ ! d2]
Private Sub cmdSaveandNew_Click()
Dim db As DAO.Database
Dim qdf1 As DAO.QueryDef
Set db = CurrentDb
Set qdf1 = db.QueryDefs("qryInsertLog")
'put form parameters into insert query
qdf1.Parameters(0).Value = Me.cboUser.Value
qdf1.Parameters(1).Value = Me.cboApprover.Value
qdf1.Parameters(2).Value = Me.cboCCer.Value
qdf1.Parameters(3).Value = Me.cboUnit.Value
qdf1.Parameters(4).Value = Me.txtNotes.Value
qdf1.Parameters(5).Value = Me.chkZ3.Value
qdf1.Parameters(6).Value = Me.chkz5.Value
qdf1.Parameters(7).Value = Me.txtFollowup.Value
qdf1.Execute
Set qdf1 = Nothing
Call resetForm
End Sub
«resetForm» - это процедура, которая просто возвращает элементы управления формы к их значениям по умолчанию.
Когда я нажимаю кнопку «Сохранить», иногда запись добавляется, но без получения правильные значения для Me.chkZ3.Value и Me.chkZ5.Value (что означает, что если бы я их проверил, запись вводится с этими значениями как ложные). Несколько раз нажав кнопку сохранения, я начинаю получать следующую ошибку:
Run-time error '3000':
Reserved error (-3033); there is no message for this error.
. Однако наиболее интересная часть этого вопроса заключается в том, что когда я изменяю свой запрос, чтобы включить только 1 поле «да / нет» , Я не получаю ошибок и записи обновлены правильно.
Что здесь происходит?
edit: Я забыл упомянуть, что когда я запускаю запрос из окна Access Objects (в отличие от VBA), он работает точно так, как должен.
Вероятно, вы должны добавить больше отслеживания ошибок и проверки нулевых значений в полях формы, прежде чем назначать их таблице. Говоря о том, что это исправление может исправить вашу непосредственную проблему.
Я предполагаю, что ваши поля Z3 и Z5 являются битовыми полями - видя, что именно так вы объявили соответствующие типы параметров.
Если это поэтому вы, вероятно, должны ухватиться за флажки «Нуль» и преобразовать true (-1) в 1
' Set to 0 if checkbox is Null, Set to 1 if checked=true
' Bit fields can't take -1 values
qdf1.Parameters(5).Value = IIf(Nz(Me.chkZ3.Value, 0), 1, 0)
qdf1.Parameters(6).Value = IIf(Nz(Me.chkz5.Value, 0), 1, 0)
. В качестве побочного элемента я бы также предложил использовать именованные параметры вместо числовых индексов в случае, если порядок этих (d4)
qdf1.Parameters(0).Value = Me.cboUser.Value
Используйте
qdf1.Parameters("UserPar").Value = Me.cboUser.Value