Доступ к QueryDef vs Recordset для вложений [dубликат]

У меня есть сохраненный запрос вставки, чтобы добавить запись в таблицу. Параметры запроса выводятся из несвязанной формы. 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), он работает точно так, как должен.

1
задан 23 August 2016 в 21:04

1 ответ

Вероятно, вы должны добавить больше отслеживания ошибок и проверки нулевых значений в полях формы, прежде чем назначать их таблице. Говоря о том, что это исправление может исправить вашу непосредственную проблему.

Я предполагаю, что ваши поля 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
0
ответ дан 15 August 2018 в 15:44

Другие вопросы по тегам:

Похожие вопросы: