Ошибка времени выполнения «3146» при вставке записей в базу данных Oracle через соединение ODBC - PullRequest
1 голос
/ 23 августа 2010

Я работаю над своим первым приложением Access и у меня возникают проблемы при попытке вставить записи из базы данных Access в базу данных Oracle.

Первая запись вставляется без ошибок, но вторая запись вызывает сообщение об ошибке «Ошибка времени выполнения 3146».

Есть идеи?

Private Sub Command42_Click()


    Dim dbMyDatabase As DAO.Database
    Dim rsMyRecords As DAO.Recordset

    Dim qdMyParameters As DAO.QueryDef

    Dim qODBC           As DAO.QueryDef
    Dim sql             As String
    Dim sqODBC          As String
    Dim sConnectDAO     As String
    Dim sVariable       As String
    Dim qdfTimeTrack    As DAO.QueryDef
    Dim qdfLocal        As DAO.QueryDef

    Dim sWorkDate   As String
    Dim sHours      As String
    Dim sCreateDate As String
    Dim sCreateUserId As String
    Dim sWmDbId     As String
    Dim sCsubDbId   As String
    Dim sComments   As String

    Set dbMyDatabase = CurrentDb

    Set qdfTimeTrack = CurrentDb.QueryDefs("QADB-INSERT")
    sConnectDAO = "ODBC;DSN=QADB;DBQ=QADB ;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;BTD=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000;TLO=O;"
    qdfTimeTrack.Connect = sConnectDAO
    qdfTimeTrack.sql = "set role all;"

    qdfTimeTrack.Execute

    Set qdfLocal = dbMyDatabase.QueryDefs("UpdateLocal")

    Set qdMyParameters = dbMyDatabase.QueryDefs("TimeRecordsForExport")

    Set rsMyRecords = qdMyParameters.OpenRecordset()

    Do While Not rsMyRecords.EOF

        sql = "INSERT INTO DAILY_JOB_ACTIVITIES ( DB_ID, PER_PER_DB_ID, CNUM_DB_ID, WORK_DATE, HOURS, CREATE_DATE, CREATE_USER_ID, WM_DB_ID, CSUB_DB_ID, COMMENTS ) " + _
            " values " + _
            " ( " + _
            " NIMS.DJA_SQ.NEXTVAL " + _
            " , 600178038 " + _
            " , '" & rsMyRecords(2).Value & "'" + _
            " , nvl(to_date('" & rsMyRecords(3).Value & "', 'MM/DD/RRRR HH12:MI:SS PM'), SYSDATE)" + _
            " , '" & rsMyRecords(4).Value & "'" + _
            " , nvl(to_date('" & rsMyRecords(5).Value & "', 'MM/DD/RRRR HH12:MI:SS PM'), SYSDATE)" + _
            " , '" & rsMyRecords(6).Value & "'" + _
            " , '" & rsMyRecords(7).Value & "'" + _
            " , '" & rsMyRecords(8).Value & "'" + _
            " , '" & rsMyRecords(9).Value & "'" + _
            " ); "

        MsgBox sql

        qdfTimeTrack.sql = sql

        ' Update QADB
        qdfTimeTrack.Execute

        ' qdfLocal.sql = "update TimeTrack set EXPORTED_FLAG = '1' where DB_ID = " & rsMyRecords(0).Value
        ' qdfLocal.Execute

        rsMyRecords.MoveNext

    Loop

    MsgBox "Records exported.  Remember to update refresh the internal database!"

End Sub

приписка

Я понимаю, что у меня еще нет обработки ошибок. Я добавлю его, как только пойму, как это работает в VBA. Если у вас есть комментарии по этому поводу, пожалуйста, оставьте их.

1 Ответ

3 голосов
/ 23 августа 2010

Я бы сделал следующее для отладки:

  1. Извлеките оператор Execute, который выполняет вставку
  2. Захватите первый и второй оператор вставки
  3. Попробуйтезапустите оба оператора в клиенте SQL и посмотрите, какая ошибка выдается Oracle.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...