Question

ADODB Recordset Update with SQL Update on the same table causes error??

Asked by: etsherman

I have an A2K Front-End that connects to a Back-End which has been converted to MySQL.  I am changing the code to use ADODB and I ran into this problem.

Basically there are some functions where DoCmd.RunSQL "Update ...." and recordset processing are both used which for the most part the table is being updated from both.  After the DoCmd.RunSQL "Update ..." runs, the recordset update will error out saying you cannot update because you and someone else is trying to update the same information, etc.

I open the recordset as shown below ....and it's in a separate funtion.

Set rstaddit = New ADODB.Recordset
rstaddit.Open "CUSTSUMM", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

Any ideas will be appreciated.

ET

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-09-03 at 14:09:48ID24706113
Tags

Access 2000

,

VBA

,

ADODB Recordset

,

MySQL

Topics

Microsoft Access Database

,

Databases Miscellaneous

,

MySQL Server

Participating Experts
2
Points
500
Comments
10

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. ADODB Recordsets
    Hi, I'm using an ADODB Recordset(Microsoft ActiveX Data Objects 2.1) and am having problems with the .addnew method. When I try and add a new record passing the two neccesary arrays (fields and values) I get an error saying : "ADO could not find the object in the co...
  2. Edit data in an ADODB recordset
    For the life of me I cannot rember how to edit data in an ADODB recordset. The code so far is: Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset With rs Set .ActiveConnection = cn .Source = "S...
  3. ADODB RECORDSET schema
    How do i create my own adodb recordset with these 2 fields string (12) Date EMPLOYEE FIREDATE I want a recordset so I can add records manually. not from a database ( in memory). I have to use a recordset please help and once the recordset is created how do I a...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: DanielWilsonPosted on 2009-09-03 at 14:25:19ID: 25255113

Yes, that happens when you update the same data from 2 different directions ... at least with optimistic locking.

You might experiment with pessimistic locking, but I don't recall whether that helps.

Alternatively, you can make one set of code put in some indication about what records it has open and make the other code check that before doing an update.  It's cumbersome ... but you've got to break the concurrent update trap somehow.

 

by: etshermanPosted on 2009-09-03 at 15:46:01ID: 25255648

Thanks for the reply Daniel .... but I'm not trying to update the same record at the same time from two different directions ....

The SQL queries run first in another funtion.  Then the recordset is created later on in the process.  The more I test it I'm starting to believe that's not what's generating that error.

Even if I open a recordset in a function with no SQL query in it I still get that error when I try to update using the rst.Update command as shown below.

Dim rstaddit As ADODB.Recordset

Set rstaddit = New ADODB.Recordset
rstaddit.Open "SELECT * FROM CUSTSUMM", CurrentProject.Connection, adOpenKeyset, adLockOptimistic

If rstaddit.RecordCount <> 0 Then
    rstaddit.MoveFirst
    Do Until rstaddit.EOF
        If rstaddit!PD91_OVER < 10 Then
            rstaddit!PD61_90 = rstaddit!PD61_90 + rstaddit!PD91_OVER
            rstaddit!PD91_OVER = 0
            rstaddit.Update  <----------This generates the error
        End If
etc.
etc.



ET

 

by: LPurvisPosted on 2009-09-03 at 17:56:31ID: 25256242

There are surely two potential issues at play here then.

Firstly in the original question, it effectively is a separate user, well, from the perspective of the database the same user twice. (Same difference).
The methodologies used to access the data are different. It might not seem vital, but it amounts to the connections to the database being different. The connection Access is using (accessed via DoCmd.RunSQL) and the connection being established using ADO (upon referencing CurrentProject.Connection, although each instance of CurrentProject.Connection creates a new instance of a connection - it is still an instance of that ADO created connection, persisted through the Access' application instance... for the most part).

Executing the queries through CurrentProject.Connection.Execute "Update ...." would make more sense.

However, in your last post I'm not sure if you're saying that coming in to your application cold and running that procedure causes the error anyway - before another single data action has been performed. Is that accurate?
This could be a database issue. Not being a MySQL guy I can't say - but were this SQL Server then you'd be looking for floating point precision fields - or field that can't be represented exactly by Jet (i.e. a bit field which allows Null and has it as a default value). The SQL Server workaround is to include a TimeStamp field - or to remove/replace the Float or Real field types with fixed precision ones.

Would any of this seem consistent with the table you're opening the recordset upon?

Cheers.

 

by: etshermanPosted on 2009-09-03 at 18:34:51ID: 25256356

Thanks for the reply LPurvis ...  It's been a while!!!

I think you are on to something with the comments in your last paragraph.... it jogged my memory.  I was just about to go back through my notes but I think you may have hit it.  About 2 years ago I converted a large Access db to MySQL ... very good learning experience.  I kind of remember now the issues with bit fields and the TimeStamp field needing to be added to the tables in order to make updates.

I will give it a try in the morning and let you know.

Thanks a million!!!

ET

   

 

by: etshermanPosted on 2009-09-04 at 05:58:44ID: 25259072

Ok, I adjusted the MySQL tables to include the CREATED_DATE Timestamp field with a default value of Current_Timestamp and also set a Default value to the TinyBit fields plus removed the Not Null attribute.  This is what I had to do in the other application that was converted from Access to MySQL but the problem still exist.

I think I've isolated the problem but I'm not sure how to adjust for it since I thought I had made adjustments for it.  I will explain below.

The previous application that was converted to MySQL as well as this one with the recordset update problem both used a DSN to connect to the MySQL tables.  Therefore, in the linking function when the application starts up, the code simply used the DSN to connect as shown below.

DoCmd.TransferDatabase acLink, "ODBC Database", "ODBC;DSN=" & strMySQLDSN, acTable, "COMPANY", "COMPANY"

Now, this application is also being modified to NOT use a DSN, therefore the DSN parameters are being included in the new linking code as shown below.

'Build the MySQL Server Connection String
'add the values of the "option =  property" together to include multiple options
    'Access/VB = 3
    'Return Matching Rows = 2
    'Do Not Prompt Upon Connect = 16

strMySQLConn = "ODBC;Driver={MySQL ODBC 3.51 Driver};Server=" & strMySQLServerHost & ";Database=" & strMySQLDatabase & ";User=" & strMySQLLogin & ";Password=" & strMySQLPswd & ";Option=21;"

I think the problem is the Option=21 parameter in the connection string because if I manually connect the table to the front end using the DSN which has the Return Matching Rows and Do Not Prompt Upon Connect checked then the code works like it should.  When connected using the connection string then it throws the error as described above.... "You and another user are trying to update the same data, etc."

Somewhere I found on the net where you have to add the values of the Option= paramater as shown above but apparently that's not working.

Any ideas will be appreciated.

ET

 

by: LPurvisPosted on 2009-09-04 at 06:16:14ID: 25259284

Well, as I mentioned, not being familiar with MySQL isn't exactly an advantage here.
None the less I believe there is potential for the Options parameter (and the Return Matching Rows property too) to influence substantially the effectiveness of the ODBC communication with MySQL.

Have you looked at this recommended page on the subject of the ODBC parameters?

Have you tried to specify alternate values. The Options should be 3 or 35 for Access according to that link.
And AFAIK in the driver properties, Return Matching Rows should be set in preference to Return Affected Rows.

You could push your recordset client side to avoid certain dynamic issues too (though that's a fairly big decision depending on the amount of data you're working with at once in a recordset).

Set rstaddit = New ADODB.Recordset
rstaddit.CursorLocation = adUseClient
rstaddit.Open "CUSTSUMM", CurrentProject.Connection, adOpenStatic, adLockOptimistic

Cheers.

 

by: etshermanPosted on 2009-09-04 at 06:22:59ID: 25259352

Yes, that's the link I am working from.  

I'm a bit confused by your options example above as the comments said to include multiple options you must add them together.  How do you get to 35???

ET

 

by: etshermanPosted on 2009-09-04 at 06:24:43ID: 25259370

Ignore the previous question ....

You were referring to the recommended option settings table on that page.

I will try 35 and see what happens.

Et

 

by: etshermanPosted on 2009-09-21 at 12:32:52ID: 31624679

Thanks LPurvis and sorry for not getting back to this question earlier.

You actually answered the question in both of your replies.

1.) Once the Access server tables were migrated to MySQL, I needed to have the Timestamp field in each of the tables plus the TinyBit fields needed to be set to Not Null.

2.) On the Connection String Parameters for MySQL and Access  Option = 35 works.

Again,

Thanks for all your help.

ET

 

by: LPurvisPosted on 2009-09-21 at 15:21:02ID: 25388217

Cool. No problem.
Glad you're sorted.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...