문제

First time asker, usually I can find the answer by searching, but my google-fu seems weak today.

I have an excel workbook connecting to an access 2003 database to insert usage records

The code i'm using is:

sdbpath = ThisWorkbook.Path & "\Data.mdb"
sCommand = "INSERT INTO Usage VALUES('" & Environ("Username") & "',#" & Now() & "#)"

Dim dbCon As New ADODB.Connection
Dim dbCommand As New ADODB.Command

dbCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sdbpath & "; Jet OLEDB:Database Password=TestPass;"
dbCommand.ActiveConnection = dbCon

dbCommand.CommandText = sCommand
dbCommand.Execute

dbCon.Close

The code fails on the line dbCommand.Execute with run-time error '-2147217900 (80040e14)' : Automation error.

The database its trying to insert the record into contains one table, usage, with two columns - UserID and AccessDate, formatted as text and DateTime respectively.

The odd part is the connection string seems OK, since it fails after the connection is already open, yet if I take the sCommand value before the execute is run, then paste it into a query in access and execute that - it runs fine!

In case it was access struggling with the datetime format i've tried switching it to text (and the hashtags in the code) but that still fails. I've also tried specifying the column names too.

Can anyone shed some light on what i'm doing wrong? I've never had so much trouble with a very simple bit of SQL.

Thanks in advance!

도움이 되었습니까?

해결책

In Access we need to specify the field-names. Even so, I found that I needed to wrap the table-name in square brackets before it would insert:

sCommand = "INSERT INTO [Usage] (UName, SomeDate) VALUES ('" & Environ("Username") _
    & "',#" & Now() & "#)"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top