View Full Version : Solved: How to run update query on Access table from Excel VBA
Philip Brown
12-10-2005, 02:39 PM
Hello,  
  
I want to run the following update query in Excel:  
  
UPDATE WTMData SET WTMData.HALOT = "myvariable", WTMData.BDB = "myvariable", WTMData.AlternateGloss = "myvariable", WTMData.GlosserInitials = "apb", WTMData.GlossDate = Date() & " " & Time(), WTMData.Parsing = "myvariable" 
WHERE (((WTMData.HALOT) Is Null) AND ((WTMData.BDB) Is Null) AND ((WTMData.AlternateGloss) Is Null) AND ((WTMData.GlosserInitials) Is Null) AND ((WTMData.GlossDate) Is Null) AND ((WTMData.Parsing)="myvariable") AND ((WTMData.Lemma)="myvariable") AND ((WTMData.WTMOccurrences)<100) AND ((WTMData.WTMParsing) Not Like "myvariable" And (WTMData.WTMParsing) Like "myvariable") AND ((WTMData.[H/A])="myvariable")); 
  
How would I run it from within Excel?  
Thanks!
Philip Brown
matthewspatrick
12-10-2005, 04:34 PM
One way would be to do it in code:
 
 Sub DoItInAccess()
 
    Dim acApp As Object
 
    Set acApp = CreateObject("Access.Application")
    With AcApp
        .OpenCurrentDatabase "c:\yourfolder\subfolder\file.mdb"
        .DoCmd.SetWarnings False
        .RunSQL "UPDATE WTMData SET WTMData.HALOT = " & _
            """myvariable"", WTMData.BDB = ""myvariable"", " & _
            "WTMData.AlternateGloss = ""myvariable"", " & _
            "WTMData.GlosserInitials = ""apb"", " & _
            "WTMData.GlossDate = Date() & "" "" & Time(), " & _
            "WTMData.Parsing = ""myvariable"" " & _
            "WHERE (((WTMData.HALOT) Is Null) AND " & _
            "((WTMData.BDB) Is Null) AND " & _
            "((WTMData.AlternateGloss) Is Null) AND " & _
            "((WTMData.GlosserInitials) Is Null) AND " & _
            "((WTMData.GlossDate) Is Null) AND " & _
            "((WTMData.Parsing)=""myvariable"") AND " & _
            "((WTMData.Lemma)=""myvariable"") AND " & _
            "((WTMData.WTMOccurrences)<100) AND " & _
            "((WTMData.WTMParsing) Not Like ""myvariable"" " & _
            "And (WTMData.WTMParsing) Like ""myvariable"") " & _
            "AND ((WTMData.[H/A])=""myvariable""));"
        .DoCmd.SetWarnings True
        .CurrentDB.Close
        .Quit
    End With
    Set acApp = Nothing
 
End Sub
Philip Brown
12-10-2005, 05:09 PM
It looks to me like .RunSQL is not an Excel VBA method. It is an Access VBA method.  When I try to run the code in Excel, I get a 438 error indicating that the .RunSQL method is not supported.
What is the equivalent to .RunSQL in Excel?
Thanks.
Philip
matthewspatrick
12-10-2005, 05:20 PM
It looks to me like .RunSQL is not an Excel VBA method. It is an Access VBA method. When I try to run the code in Excel, I get a 438 error indicating that the .RunSQL method is not supported.
 
What is the equivalent to .RunSQL in Excel?
 
Thanks.
Philip
 
Doh! :banghead: 
 
Should have been:
 
 
 
 
Sub DoItInAccess() 
Dim acApp As Object 
Set acApp = CreateObject("Access.Application") 
With AcApp 
.OpenCurrentDatabase "c:\yourfolder\subfolder\file.mdb" 
.DoCmd.SetWarnings False 
.DoCmd.RunSQL "UPDATE WTMData SET WTMData.HALOT = " & _ 
"""myvariable"", WTMData.BDB = ""myvariable"", " & _ 
"WTMData.AlternateGloss = ""myvariable"", " & _ 
"WTMData.GlosserInitials = ""apb"", " & _ 
"WTMData.GlossDate = Date() & "" "" & Time(), " & _ 
"WTMData.Parsing = ""myvariable"" " & _ 
"WHERE (((WTMData.HALOT) Is Null) AND " & _ 
"((WTMData.BDB) Is Null) AND " & _ 
"((WTMData.AlternateGloss) Is Null) AND " & _ 
"((WTMData.GlosserInitials) Is Null) AND " & _ 
"((WTMData.GlossDate) Is Null) AND " & _ 
"((WTMData.Parsing)=""myvariable"") AND " & _ 
"((WTMData.Lemma)=""myvariable"") AND " & _ 
"((WTMData.WTMOccurrences)<100) AND " & _ 
"((WTMData.WTMParsing) Not Like ""myvariable"" " & _ 
"And (WTMData.WTMParsing) Like ""myvariable"") " & _ 
"AND ((WTMData.[H/A])=""myvariable""));" 
.DoCmd.SetWarnings True 
.CurrentDB.Close 
.Quit 
End With 
Set acApp = Nothing 
End Sub
Philip Brown
12-10-2005, 06:37 PM
Thanks, Patrick.
Before I got your last post, I got this to work:
sqlString = _
"UPDATE WTMData SET WTMData.HALOT = " & sHALOTDef & ", " & _
"WTMData.BDB = " & sBDBDef & ", " & _
"WTMData.AlternateGloss = " & sAltDef & ", " & _
"WTMData.GlosserInitials = ""apb"", " & _
"WTMData.GlossDate = Date() & "" "" & Time() " & _
"WHERE (((WTMData.HALOT) Is Null) AND " & _
"((WTMData.BDB) Is Null) AND " & _
"((WTMData.AlternateGloss) Is Null) AND " & _
"((WTMData.GlosserInitials) Is Null) AND " & _
"((WTMData.GlossDate) Is Null) AND ((WTMData.Parsing) Is Null) AND " & _
"((WTMData.Lemma)=" & sLemma & ") AND " & _ "((WTMData.WTMOccurrences)<100) AND " & _
"((WTMData.WTMParsing) Not Like ""np*"") AND " "((WTMData.[H/A])=""H""));"
Set dbs = OpenDatabase("C:\mydatabase.mdb")
    With dbs
        .Execute sqlString, dbFailOnError
        .Close
    End With
Set dbs = Nothing
Any reason I shouldn't be doing it this way?
matthewspatrick
12-10-2005, 06:39 PM
No, jut an instance of there being more than one way of doing it :thumb
Philip Brown
12-10-2005, 06:41 PM
Thanks for taking the time to help!
Merry Christmas to you!
matthewspatrick
12-10-2005, 06:42 PM
You're welcome, and to you as well.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.