Как очистить таблицу в Access с VBA? - PullRequest
2 голосов
/ 18 апреля 2009

Я пытаюсь в V Excel использовать VBA для передачи данных в существующую таблицу Access. Я был в состоянии сделать это, но у меня один маленький сбой. Прежде чем нажать на данные для доступа, я хочу очистить текущие данные в таблице Access, поэтому при поступлении новых данных из Excel это единственные данные в таблице Access. Я действительно не знаю, как написать код для Access, так как класс был на VBA для Excel. Я пробовал несколько разных подходов, и каждый раз это не работает. Например, казалось, что код должен работать:

DoCmd.RunSQL "DELETE tblName.* FROM CoversheetTableFourthAttempt

но я получаю сообщение об ошибке при определении объекта.

Если бы вы могли помочь мне с этим, я бы действительно оценил это

Я поставил свой код ниже для справки.

Sub AccessFourthMonth()

Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long
    ' connect to the Access database
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source=C:\Users\Kent\Documents\MBA\Winter 2009 Semester\MBA 614\Final Project\shilded\testdatabase.mdb"


' open a recordset
Set rs = New ADODB.Recordset

rs.Open "CoversheetTableFourthAttempt", cn, adOpenKeyset, adLockOptimistic, adCmdTable
' all records in a table
r = 2 ' the start row in the worksheet

Do While Len(Range("A" & r).Formula) > 0
' repeat until first empty cell in column A
    With rs

        .AddNew ' create a new record
        ' add values to each field in the record
        .Fields("Project") = Range("A" & r).Value
        .Fields("Description") = Range("B" & r).Value
        .Fields("Amount") = Range("C" & r).Value
        .Fields("Date") = Range("D" & r).Value
        .Update ' stores the new record
    End With
    r = r + 1 ' next row
Loop
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub

Ответы [ 4 ]

11 голосов
/ 18 апреля 2009

Попробуйте

DoCmd.RunSQL "DELETE * FROM TableName"

Эта статья может представлять интерес: Выполнение операторов SQL в коде VBA

2 голосов
/ 21 апреля 2009

DoCmd является внутренним приложением Access и не распознается приложением Excel. Простой подход к вашей проблеме - запустить запрос на удаление из самого Excel.

Добавьте эту часть после cn.Open "Provider .. line

cn.Execute "DELETE * FROM CoversheetTableFourthAttempt"  

Это должно очистить таблицу перед следующей частью, которая заполняет данные.

2 голосов
/ 18 апреля 2009

Ваш DoCmd подход имеет две проблемы. Вы использовали кавычку, чтобы начать строку, но не включили заключительную кавычку. Но даже при правильном цитировании ваш DoCmd не будет работать, поскольку Excel не знает, что CoversheetTableFourthAttempt - это имя таблицы в базе данных Access.

Вы показали, что можете успешно создать соединение ADO с вашей базой данных Access. Поэтому я предлагаю использовать метод Execute объекта соединения для выполнения вашей SQL-оценки:

cn.Execute "DELETE FROM CoversheetTableFourthAttempt;"

Наконец, посетите Имена проблем и зарезервированные слова в Access , чтобы понять, почему Дата , Описание и Проект не являются хорошим выбором для имен полей доступа.

2 голосов
/ 18 апреля 2009

Попробуйте следующее из Excel:

dim cn as adodb.connection
dim cmd as adodb.command
set cn = new adodb.connection
cn.open "put your connection string here"
set cmd = new adodb.command
cmd.commandtype = adcmdtext
cmd.commandtext = "Delete * from myTable"
cmd.activeconnection = cn.connectionstring
cmd.execute
...