Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

MS Access - Move record from one table to another on Button Click- VBA,SQL?

Posted on 2009-05-15
13
Medium Priority
?
2,007 Views
Last Modified: 2012-08-13
I have two tables, with the exact same columns (Open Tickets and Closed_Tickets). I want to be able to click a button on the Open Tickets form and move the active record to the Closed_Tickets table and delete the record from the Open Tickets table if the Insert was successful.

I know it would be easier to use a status field, but this is what the customer wants to do.

So far I have a Command button that executes the code in the code box below but I get the following error: "Syntax Error (missing operator) in query '[Open Tickets].TicketNumber=& Me![TicketNumber]'

Please see my code and help me expand it :)  Thanks!
Private Sub Command119_Click()
On Error GoTo Err_Command119_Click
 
DoCmd.RunSQL "Insert Into [Completed_Tickets] Select * from [Open Tickets] where [Open Tickets].[TicketNumber]=& Me![TicketNumber]"
 
Exit_Command119_Click:
    Exit Sub
 
Err_Command119_Click:
    MsgBox Err.Description
    Resume Exit_Command119_Click
    
End Sub

Open in new window

0
Comment
Question by:synapse88
  • 8
  • 3
  • 2
13 Comments
 
LVL 10

Accepted Solution

by:
therealmongoose earned 2000 total points
ID: 24396598
This should do it...

docmd.setwarnings false
DoCmd.RunSQL "Insert Into [Completed_Tickets] Select * from [Open Tickets] where [Open Tickets].[TicketNumber]= " & Me![TicketNumber] & ";"
 
docmd.runsql "Delete [Open Tickets].* from [Open Tickets] where [Open Tickets].[TicketNumber]= " & Me![TicketNumber] & ";"
docmd.setwarings true

Open in new window

0
 

Author Comment

by:synapse88
ID: 24396869
I'll run the code after lunch to check.

How can I ensure the Insert Command was successful?
0
 
LVL 10

Expert Comment

by:therealmongoose
ID: 24396992
You can leave the docmd.setwarnings false statement out until you have debugged and are happy that the insert works....
0
Transaction-level recovery for Oracle database

Veeam Explore for Oracle delivers low RTOs and RPOs with agentless transaction log backup and transaction-level recovery of Oracle databases. You can restore the database to a precise point in time, even to a specific transaction.

 

Author Comment

by:synapse88
ID: 24398028
When I run that Insert statement I get" Could Not Find Output table 'Completed_Tickets'" even though that table exists in the same database as the Open Tickets table...I see it listed right alongside Open Tickets. Do I need to qualify it with the database name or something?
0
 

Author Comment

by:synapse88
ID: 24398069
Ok scratch that, now it's "Data Type mismatch in criteria expression"
0
 

Author Comment

by:synapse88
ID: 24398096
I assume it has something to do with the where statement...but the Ticket Number field in the database is a Text type, and I assume anything in a Textbox is a Text value, so I'm not sure where the error is...
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 24398298
Has this got anything to do with MS SQL Server?
0
 

Author Comment

by:synapse88
ID: 24398570
No it's all in Access...but it uses SQL language.
0
 

Author Comment

by:synapse88
ID: 24399066
Oh I figured it out, just had to add in some single apostrophes.  Thanks therealmongoose:

Oh and for anyone reading this later I used a transaction to ensure the insert went ok.  Sample code below.



docmd.runsql "Delete [Open Tickets].* from [Open Tickets] where [Open Tickets].[TicketNumber]= '" & Me![TicketNumber] & "';"
docmd.setwarings true
 
 
 
 
 
Sub DoArchive()
On Error GoTo Err_DoArchive
  Dim ws As DAO.Workspace   'Current workspace (for transaction).
  Dim db As DAO.Database    'Inside the transaction.
  Dim bInTrans As Boolean   'Flag that transaction is active.
  Dim strSql As String      'Action query statements.
  Dim strMsg As String      'MsgBox message.
 
  'Step 1: Initialize database object inside a transaction.
  Set ws = DBEngine(0)
  ws.BeginTrans
  bInTrans = True
  Set db = ws(0)
 
  'Step 2: Execute the append.
  strSql = "INSERT INTO MyArchiveTable ( MyField, AnotherField, Field3 ) " & _
    "IN ""C:\My Documents\MyArchive.mdb"" " & _
    "SELECT SomeField, Field2, Field3 FROM MyTable WHERE (MyYesNoField = True);"
  db.Execute strSql, dbFailOnError
 
  'Step 3: Execute the delete.
  strSql = "DELETE FROM MyTable WHERE (MyYesNoField = True);"
  db.Execute strSql, dbFailOnError
 
  'Step 4: Get user confirmation to commit the change.
  strMsg = "Archive " & db.RecordsAffected & " record(s)?"
  If MsgBox(strMsg, vbOKCancel + vbQuestion, "Confirm") = vbOK Then
    ws.CommitTrans
    bInTrans = False
  End If
 
Exit_DoArchive:
  'Step 5: Clean up
  On Error Resume Next
  Set db = Nothing
  If bInTrans Then   'Rollback if the transaction is active.
    ws.Rollback
  End If
  Set ws = Nothing
Exit Sub
 
Err_DoArchive:
  MsgBox Err.Description, vbExclamation, "Archiving failed: Error " & Err.number
  Resume Exit_DoArchive
End Sub

Open in new window

0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 24400541
>>but it uses SQL language.<<
Then perhaps you should know that MS Access uses a diffrent SQL dialect to T-SQL (MS SQL Server) and PL/SQL (Oracle) and ... well you get the idea.

For example, the solution you posted in unusable in MS SQL Server.
0
 

Author Comment

by:synapse88
ID: 24403311
"Then perhaps you should know that MS Access uses a diffrent SQL dialect to T-SQL (MS SQL Server) and PL/SQL (Oracle) and ... well you get the idea."

I'm well aware the syntax is different between different versions of SQL language.

"For example, the solution you posted in unusable in MS SQL Server."

Well aware.  I work in SQL server every day and if I needed this functionality I'd just write a stored procedure :)
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 24403325
Fair enough.
0
 

Author Comment

by:synapse88
ID: 24403673
I just posted it in SQL Server singe you can select up to 3 zones and I figured most anyone who has worked in MS SQL Server has probably worked with Access as well.  Perhaps a VB/VBA section would have been better...
0

Featured Post

Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When you see single cell contains number and text, and you have to get any date out of it seems like cracking our heads.
When we develop an application in Ms Access 2016 we should also try to protect the queries, macros and table links. I know I may not have a permanent solution but for novice users, they will not manage to break your application. Below is the detail …
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…
Enter Foreign and Special Characters Enter characters you can't find on a keyboard using its ASCII code ... and learn how to make a handy reference for yourself using Excel ~ Use these codes in any Windows application! ... whether it is a Micr…

580 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question