Проблема с несколькими вставками - PullRequest
0 голосов
/ 14 июля 2009

Я делаю множественную вставку в запросе доступа vba, как показано ниже:

Private Sub btnSubmit_Enter()
DoCmd.RunSQL ("insert into tblAutonumber (Dummy)values ('DummyValue')")
Dim lastAutonumber As Long
lastAutonumber = DMax("Autonumber", "tblAutonumber")
txtAutoNumber.Value = lastAutonumber
DoCmd.RunSQL ("insert into tbltesting " & _ 
    "(Empid, TestScenario, testid, owner, event, version, " & _ 
    "expresult, variation, status, homestore) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtTestScenario.Value & "','" & _
        Me.txtAutoNumber.Value & " ' ,'" & _
        Me.txtOwner.Value & "','" & _
        Me.txtEvent.Value & "', '" & _
        Me.txtVersion.Value & "','" & _
        Me.txtExpectedResult.Value & "', '" & _
        Me.txtVariation.Value & "', '" & _
        Me.txtStatus.Value & "','" & _
        Me.txtHomeStore.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2 ) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Sunday ','" & _
        Me.txtContSunStart1.Value & "', '" & _
        Me.txtContSunFinish1.Value & "','" & _
        Me.txtContSunStore1.Value & "','" & _
        Me.txtContSunStart2.Value & "', '" & _
        Me.txtContSunFinish2.Value & "','" & _
        Me.txtContSunStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1, " & _ 
    "Start2, Finish2, Store2 ) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Monday ','" & _
        Me.txtContMonStart1.Value & "', '" & _
        Me.txtContMonFinish1.Value & "','" & _
        Me.txtContMonStore1.Value & "','" & _
        Me.txtContMonStart2.Value & "', '" & _
        Me.txtContMonFinish2.Value & "','" & _
        Me.txtContMonStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2 ) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Tuesday','" & _
        Me.txtContTueStart1.Value & "', '" & _
        Me.txtContTueFinish1.Value & "','" & _
        Me.txtContTueStore1.Value & "','" & _
        Me.txtContTueStart2.Value & "', '" & _
        Me.txtContTueFinish2.Value & "','" & _
        Me.txtContTueStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1, " & _ 
    "Start2, Finish2, Store2 ) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Wednesday','" & _
        Me.txtContWedStart1.Value & "', '" & _
        Me.txtContWedFinish1.Value & "','" & _
        Me.txtContWedStore1.Value & "','" & _
        Me.txtContWedStart2.Value & "', '" & _
        Me.txtContWedFinish2.Value & "','" & _
        Me.txtContWedStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2 ) values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Thursday','" & _
        Me.txtContThuStart1.Value & "', '" & _
        Me.txtContThuFinish1.Value & "','" & _
        Me.txtContThuStore1.Value & "','" & _
        Me.txtContThuStart2.Value & "', '" & _
        Me.txtContThuFinish2.Value & "','" & _
        Me.txtContThuStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2 )values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Friday','" & _
        Me.txtContFriStart1.Value & "', '" & _
        Me.txtContFriFinish1.Value & "','" & _
        Me.txtContFriStore1.Value & "','" & _
        Me.txtContFriStart2.Value & "', '" & _
        Me.txtContFriFinsh2.Value & "','" & _
        Me.txtContFriStore2.Value & "')")

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2 )values ('" & _
        Me.txtEmpNo.Value & "','" & _
        Me.txtAutoNumber.Value & "','Saturday','" & _
        Me.txtContSatStart1.Value & "', '" & _
        Me.txtContSatFinish1.Value & "','" & _
        Me.txtContSatiStore1.Value & "','" & _
        Me.txtContSatStart2.Value & "', '" & _
        Me.txtContSatFinish2.Value & "','" & _
        Me.txtContSatStore2.Value & "')")

End Sub

Первые два запроса работают нормально (т.е. до воскресенья)

Но с понедельника исполнение прекращается

Я проверил все переменные в запросе, там нет нулей

Ответы [ 5 ]

1 голос
/ 14 июля 2009

Если ваш запрос «ломается», переходя в окно кода с желтой линией и стрелкой, но не выдает сообщения об ошибке, это хороший признак того, что скомпилированный код несколько поврежден.

Если это ваш симптом, декомпиляция и перекомпиляция, вероятно, исправят вашу проблему.

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

"c:\Program Files\Microsoft office\office\msaccess.exe" 
                                  /decompile "c:\My Documents\MyDatabase.mdb"

И перекомпилируйте, перейдя в окна кода в Access и используя меню Debug-> Compile ...

1 голос
/ 14 июля 2009

распечатайте свои конкатенации, готов поспорить, что вы увидите свою ошибку ...

0 голосов
/ 11 августа 2009

Когда вы находитесь в режиме прерывания, нажмите Ctl + G, чтобы открыть окно отладки, и введите:

? txtContTueStart1, txtContTueFinish1

и т. Д., Чтобы убедиться, что эти значения в порядке.

0 голосов
/ 14 июля 2009

Как было сказано выше Колином Маккеем, ваша конкретная проблема, скорее всего, является неверным запросом в группе.

Очистите это с помощью ... Сделайте это видимым и повторяемым ..., а затем перенесите диагностику в msaccess с помощью ....

Построение ваших запросов в переменной, чтобы вы могли легко их выгружать ...

Вы столкнетесь с проблемой:

  1. Вывести текст запроса ... (cntrl-g, затем введите? sqltxt )
  2. Используйте сам доступ для диагностики. Для этого просто скопируйте текст запроса в новый запрос (представление sql) и либо переключитесь в режим разработки, либо попытайтесь запустить запрос ... Access будет жаловаться и, как правило, дает вам достаточно подсказки, чтобы исправить запрос ...

В будущем рассмотрите возможность добавления соответствующей обработки ошибок для каждого запроса.

Также рассмотрите возможность использования currentdb.execute вместо docmd, потому что для последнего вам, возможно, придется сделать дополнительный шаг по подавлению полей подтверждения (согласно моей туманной памяти msaccess2k)

Также dlookup и dmax (+1) для текущей функции удобны для получения уникального ключа без необходимости прибегать к автономному номеру. Я говорю это только потому, что кажется, что вы используете таблицу для генерации ключей ...

Удачи!

0 голосов
/ 14 июля 2009

Не зная больше о том, как программа «ломается», я предполагаю, что одно из значений понедельника содержит символы, которые SQL Server интерпретирует как синтаксические элементы. Другими словами, вы вводите неэкранированные строки в строку запроса. (Между прочим, это является причиной атак SQL-инъекций). Если возможно, вы должны предпочесть параметры, а не создавать запросы, подобные этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...