Я работаю над своим первым приложением 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. Если у вас есть комментарии по этому поводу, пожалуйста, оставьте их.