Link to home
Start Free TrialLog in
Avatar of mkelly2384
mkelly2384Flag for United States of America

asked on

Error 3078 can't find table

When I run the code below I get a 3078 error that it can't find the table or query.  It is happening at this line:
                strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES (Me.CLIENT_ID)"
                CurrentDb.Execute strSQL1, dbFailOnError

If the answer to the msgbox is yes, than I want it to create a new record in tbl_HISTORY and then display CLI_HISTORY_subform using that new record.  Can anyone tell me why I'm getting this error?
Dim strSQL As String
 
 DoCmd.Hourglass True
 Application.Echo False, "Processing ..."
 With Me
   Select Case tabClients
     Case 0    ' First TabPage (General)
       ' Do nothing. SourceObject loaded.

     Case 1     ' Second TabPage (Academic)
        'Load source objects on Academic tab
        If .stuSchedule_subform.SourceObject <> "frm_STU_SCHEDULE" Then
          .stuSchedule_subform.SourceObject = "frm_STU_SCHEDULE"
        End If
        If .academics_subform.SourceObject <> "frm_STU_ACAD" Then
          .academics_subform.SourceObject = "frm_STU_ACAD"
        End If

     Case 2    ' Third TabPage (History)
        'Find client history.
        If DLookup("CLIENT_ID", "tbl_HISTORY", "CLIENT_ID = " & Me.CLIENT_ID) Then
           .CLI_HISTORY_subform.SourceObject = "frm_CLI_HISTORY"
        Else
           'If no history is available, prompt user to add client history.
           If MsgBox("No client history available.  Would you like to add it now?", vbYesNo) = vbYes Then
                'Insert a new record into in tbl_CLI_HISTORY
                strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES (Me.CLIENT_ID)"
                CurrentDb.Execute strSQL1, dbFailOnError
                'Find new record and display as subform
                If DLookup("CLIENT_ID", "tbl_HISTORY", "CLIENT_ID = " & Me.CLIENT_ID) Then
                   .CLI_HISTORY_subform.SourceObject = "frm_CLI_HISTORY"
                End If
           End If
        End If
     Case 3
         ' ...
     Case 4
         ' ...
         ' ...
   End Select
 End With
 DoCmd.Hourglass False

Open in new window

SOLUTION
Avatar of Patrick Matthews
Patrick Matthews
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
if client_ID is Number

strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES (" & Me.CLIENT_ID & ")"


if client_ID is Text

strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES ('" & Me.CLIENT_ID & "')"
Assuming a numeric ID, Give this a try:

strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES (" & Me.CLIENT_ID & ")"
                CurrentDb.Execute strSQL1, dbFailOnError
Avatar of mkelly2384

ASKER

I corrected the syntax of the INSERT INTO statement, but I still get the same error message.
and make sure that the name of table and field names are correct ( do they really have underscore on the name?)

if not you have to enclosed them in square brackets []
Table name and field names are correct.

It says it can't find the input table ".  It's like it's not even reading the table name for some reason.
Your comment suggests you have the table name wrong in the SQL statement

                'Insert a new record into in tbl_CLI_HISTORY
                strSQL = "INSERT INTO tbl_HISTORY( CLIENT_ID ) VALUES (Me.CLIENT_ID)"

OM Gang
The comment is wrong--I've quadruple-checked the table name in the code. "tbl_HISTORY" is correct.
mkelly2384,As cap1 mentioned, the table/column names must match exactly.  For example, a stray leading or trailing space in a name can muck things up.Also, please post the exact syntax you tried to use, and confirm whether CLIENT_ID is numeric or text.  It would not shock me if the lack of a space between your table name and the open parenthesis for your column list upsets Access, which is why I included a space there.  (SQL Server would not have "cared" about that.)Patrick
do a compact and repair
tools > database utilities > compact and repair database

then, from VBA window do
Debug > Compile

correct any errors raised

post back the result
I've checked the names of the table and fields 5 times now...

Shouldn't it say "Cannot find the input table "tbl_HISTORY""  instead of Cannot find the input table "  (with one set of quotes only)

I did a compact and repair, but still getting the same error.
mkelly2384,As I asked in my last previous post:>>Also, please post the exact syntax you tried to use, and confirm whether CLIENT_ID is numeric or text.Patrick
how about the DEBUG > CoMPILE?
the CLIENT_ID is number from the codes above

       If DLookup("CLIENT_ID", "tbl_HISTORY", "CLIENT_ID = " & Me.CLIENT_ID) Then
           .CLI_HISTORY_subform.SourceObject = "frm_CLI_HISTORY"
        Else
Oh sorry...CLIENT_ID is numeric.

Is there a better way to do this?
Private Sub tabClients_Change()

On Error GoTo tabClients_Change_Err
 Dim strSQL As String
 
 DoCmd.Hourglass True
 Application.Echo False, "Processing ..."
 With Me
   Select Case tabClients
     Case 0    ' First TabPage (General)
       ' Do nothing. SourceObject loaded.

     Case 1     ' Second TabPage (Academic)
        'Load source objects on Academic tab
        If .stuSchedule_subform.SourceObject <> "frm_STU_SCHEDULE" Then
          .stuSchedule_subform.SourceObject = "frm_STU_SCHEDULE"
        End If
        If .academics_subform.SourceObject <> "frm_STU_ACAD" Then
          .academics_subform.SourceObject = "frm_STU_ACAD"
        End If

     Case 2    ' Third TabPage (History)
        'Find client history.
        If DLookup("CLIENT_ID", "tbl_HISTORY", "CLIENT_ID = " & Me.CLIENT_ID) Then
           .CLI_HISTORY_subform.SourceObject = "frm_CLI_HISTORY"
        Else
           'If no history is available, prompt user to add client history.
           If MsgBox("No client history available.  Would you like to add it now?", vbYesNo) = vbYes Then
                'Insert a new record into in tbl_HISTORY
                strSQL = "INSERT INTO tbl_HISTORY (CLIENT_ID) VALUES (" & Me.CLIENT_ID & ")"
                CurrentDb.Execute strSQL1, dbFailOnError
                'Find new record and display as subform
                If DLookup("CLIENT_ID", "tbl_HISTORY", "CLIENT_ID = " & Me.CLIENT_ID) Then
                   .CLI_HISTORY_subform.SourceObject = "frm_CLI_HISTORY"
                End If
           End If
        End If
     Case 3
         ' ...
     Case 4
         ' ...
         ' ...
   End Select
 End With
 DoCmd.Hourglass False

Open in new window

ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Decompile shows no errors.

Rather than inserting, I first tried to do something like this:
DoCmd.SelectObject "CLI_HISTORY_subform"
DoCmd.GoToRecord acActiveDataObject, , acNewRec

but that didn't work.  Didn't know if I could create a new record in a subform anyway.  Would that be better than inserting if it was done right?
Yay--capricorn1--you're a genius!  Thanks so much--worked perfectly.
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
oh, yeah, I didn't catch that strSQL1 issue.  Thanks!


             
               with currentdb.openrecordset("tbl_History")
                    .addnew
                    !Client_ID=Me.Client_ID
                    .update
                   
                    .close  'Add this line

               end with
done. thanks.