2010-08-23 2 views
1

첫 번째 Access 응용 프로그램에서 작업 중이며 Oracle 데이터베이스에 Access 데이터베이스의 레코드를 삽입하려고 할 때 문제가 있습니다. .ODBC 연결을 통해 Oracle 데이터베이스에 레코드를 삽입 할 때 런타임 오류 '3146'

첫 번째 레코드는 오류없이 삽입되지만 두 번째 레코드는 "런타임 오류 '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 

P.

아직 오류 처리 기능이 없다는 것을 알고 있습니다. VBA에서 어떻게 작동하는지 이해하면 추가 할 것입니다. 이에 대한 의견이 있으시면 게시 해주십시오.

답변

3

내가 디버그에 다음을 할 거라고 :

  1. 꺼내고 삽입을
  2. 캡처
  3. 는 SQL 클라이언트에서 모두 문을 실행 해, 제 1 및 제 2 삽입 문을 수행 문을 실행하고 Oracle에서 어떤 오류가 발생했는지 확인하십시오.
+0

감사합니다. 그것은 FOREIGN KEY 제약 조건으로 판명되었습니다. :-) –

관련 문제