2016-04-18 5 views
0

Вот код. Поскольку я на самом деле просто пытаюсь заставить его работать на этом этапе, все это прямо в событии click. Я не получаю никаких ошибок. Он просто не полностью функционален:VBA-Access: некоторые из моих запросов вставки работают, другие - нет, и мой последний запрос на обновление также не работает. Что я делаю не так?

Private Sub cmdCreateTask_Click() 
    On Error GoTo ErrHandler 

    'open db and specify DAO methods 
    Dim dbs As DAO.Database 
    Set dbs = CurrentDb 'because the db is already open, don't need: OpenDatabase("FollowUp_Test.mdb") 

    'this will eventually be accessed a different way 
    Dim userId As Integer 
    userId = 1 

    'INSERT task and return id 
    Dim qryInsertTask As String 
    qryInsertTask = "INSERT INTO Task (applicant_info_id) VALUES (NULL);" 
    Dim qryTaskId As String 
    qryTaskId = "SELECT @@Identity" 
    Dim taskId As Integer 

    'INSERT applicant info row and return id 
    Dim qryInsertAppInfo As String 
    qryInsertAppInfo = "INSERT INTO ApplicantInfo " _ 
       & "(task_id, app_first_name, app_last_name, applicant_id_number, " _ 
       & "account_id_number, issue_id_number) VALUES " _ 
       & "('" & taskId & "', '" & txtAppFirstName.Value & "', '" & txtAppLastName.Value & "', " _ 
       & "" & txtAppId.Value & ", " & txtAcctId.Value & ", " & txtIssueId.Value & ");" 
    Dim qryAppInfoId As String 
    qryAppInfoId = "SELECT @@Identity" 
    Dim appInfoId As Integer 

    'INSERT owner row and return id 
    Dim qryInsertOwner As String 
    qryInsertOwner = "INSERT INTO Ownership " _ 
       & "(task_id, user_id, ownership_date, " _ 
       & "task_owned) VALUES (" & taskId & ", " & userId & ", " _ 
       & "#" & Format(Date, "mm/dd/yyyy") & "#, " & True & ");" 
    Dim qryOwnerId As String 
    qryOwnerId = "SELECT @@Identity" 
    Dim ownerId As Integer 

    'get values from comboboxes 
    Dim actionId As Integer 
    actionId = cboFolder.Value 
    Dim monTypeId As Integer 
    monTypeId = cboMonetaryType.Value 
    'MsgBox (actionId & ", " & monTypeId) 

    'INSERT schedule row and return id 
    Dim qryInsertSchedule As String 
    qryInsertSchedule = "INSERT INTO Schedule " _ 
       & "(task_id, due_date) VALUES " _ 
       & "(" & taskId & ", #" & Format(txtFollowUpDt.Value, "mm/dd/yyyy") & "#);" 
    Dim qryScheduleId As String 
    qryScheduleId = "SELECT @@Identity" 
    Dim scheduleId As Integer 

    'INSERT TaskHistory row and return id 
    Dim qryInsertTaskHistory As String 
    qryInsertTaskHistory = "INSERT INTO TaskHistory " _ 
       & "(task_id, create_user_id, create_date) VALUES " _ 
       & "(" & taskId & ", " & userId & ", #" & Format(Date, "mm/dd/yyyy") & "#);" 
    Dim qryTaskHistoryId As String 
    qryTaskHistoryId = "SELECT @@Identity" 
    Dim taskHistoryId As Integer 

    'INSERT comment row and return id 
    Dim qryInsertComment As String 
    qryInsertComment = "INSERT INTO Comments " _ 
       & "(comment_text) VALUES ('" & txtComment.Value & "');" 
    Dim qryCommentId As String 
    qryCommentId = "SELECT @@Identity" 
    Dim commentId As Integer 

    'INSERT EventLog row and return id 
    Dim qryInsertEventLog As String 
    qryInsertEventLog = "INSERT INTO EventLog " _ 
       & "(task_id, action_id, user_id, mon_type_id, comment_id, " _ 
       & "event_date) VALUES (" & taskId & ", " & actionId & ", " & userId & ", " & monTypeId & ", " _ 
       & "" & commentId & ", #" & Format(Date, "mm/dd/yyyy") & "#);" 
    Dim qryEventLogId As String 
    qryEventLogId = "SELECT @@Identity" 
    Dim eventLogId As Integer 

    'UPDATE task with all the id's created 
    Dim qryUpdateTask As String 
    qryUpdateTask = "UPDATE Task SET applicant_info_id = " & appInfoId & ", " _ 
       & "ownership_id = " & ownerId & ", action_id = " & actionId & ", mon_type_id = " & monTypeId & ", " _ 
       & "schedule_id = " & scheduleId & ", event_id = " & eventLogId & ", task_history_id = " & taskHistoryId & " " _ 
       & "WHERE task_id = " & taskId & ";" 

    'run the queries 
    dbs.Execute qryInsertTask 
    taskId = dbs.OpenRecordset(qryTaskId)(0) 
    MsgBox (taskId) 
    'MsgBox (taskId & ", " & txtAppFirstName.Value & ", " & txtAppLastName.Value & ", " _ 
    '   & txtAppId.Value & ", " & txtAcctId.Value & ", " & txtIssueId.Value) 
    dbs.Execute qryInsertAppInfo 
    appInfoId = dbs.OpenRecordset(qryAppInfoId)(0) 
    'MsgBox (appInfoId) 
    dbs.Execute qryInsertOwner 
    ownerId = dbs.OpenRecordset(qryOwnerId)(0) 
    dbs.Execute qryInsertSchedule 
    scheduleId = dbs.OpenRecordset(qryScheduleId)(0) 
    dbs.Execute qryInsertTaskHistory 
    taskHistoryId = dbs.OpenRecordset(qryTaskHistoryId)(0) 
    dbs.Execute qryInsertComment 
    commentId = dbs.OpenRecordset(qryCommentId)(0) 
    dbs.Execute qryInsertEventLog 
    eventLogId = dbs.OpenRecordset(qryEventLogId)(0) 
    MsgBox (appInfoId & ", " & ownerId & ", " & actionId & ", " & monTypeId & ", " & _ 
     & scheduleId & ", " & eventLogId & ", " & taskHistoryId & ", " & taskId) 
    dbs.Execute qryUpdateTask 

    'dereference and close 
    dbs.Close 
    Set dbs = Nothing 

ExitSub: 
    'rs.Close 
    Exit Sub 
    Set dbs = Nothing 

ErrHandler: 

    MsgBox "Something's wrong: " & vbCrLf & vbCrLf & "Make sure all entries are in the correct format." & vbCrLf & vbCrLf _ 
    & "Error", , "Validation Error" 
    'dereference and close on error 
    dbs.Close 
    Set dbs = Nothing 
    Resume ExitSub 
    Resume 
    End Sub 

Я включил пару msgboxes, что все присутствующие нужную информацию из того, что я сохранил в различных переменных, так что я не знаю, почему это не работает, когда Я, по крайней мере, запускаю запрос на обновление. Я довольно новичок в заполнении базы данных из VBA, поэтому я предполагаю, что это связано с тем, как я использую доступ к базе данных. Я также подозреваю, что мои даты - проблема, но я не могу понять, почему. Любая помощь будет оценена по достоинству.

+1

Включите опцию 'dbFailOnError' при выполнении этих заявлений, как это : 'dbs.Execute qryInsertOwner, dbFailOnError' В некоторых ситуациях этот параметр даст вам лучшую информацию, когда сбой инструкции. – HansUp

+0

Благодарим вас за то, что в этом есть проблема с поиском ряда проблем, требующих изменений в базе данных. –

ответ

0

Я, наконец, получил его. Мне просто пришлось использовать коллекцию TempVars. Я не понимаю, почему это было необходимо, но, видимо, это способ доступа к переменным, хранящимся в значениях идентификации из вставок.

я смог сохранить переменную как это:

TempVars("tempTaskId").Value = taskId 

А затем получить доступ к нему в запросе, как это:

TempVars!tempTaskId.Value 
0
"SELECT @@Identity" 

не Access SQL, так что заменить с некоторым значением, или удалить его полностью, если поле является AutoNumber.

+2

[SELECT @@ Identity в MS Access] (http://stackoverflow.com/search?q=%5Bms-access%5D+SELECT+%40%40Identity) – HansUp

+0

Я не уверен, что понимаю. Я согласен с тем, что теперь моя проблема связана с @@ Identity. Дело в том, что я вижу, что он получает значения различных идентификаторов автонабора и генерирует их в переменных, которые я создал для них. Затем, когда я пытаюсь использовать эти переменные в нескольких моих вставках и в своем последнем обновлении, это похоже на то, что они не существуют. –