2016-02-16 2 views
0

Зачем нужно подключаться к базе данных MySQL с помощью excel VBA (через разъем ODBC, как показано в публичной функции, приведенной ниже), в записи INSERT как для операторов SELECT, но получать сообщение об ошибке при попытке и DELETE записи? Когда я подключаюсь к учетной записи Root, у меня все те же проблемы. Я новичок в MySQL и использую базу данных Sakila, которая появляется, когда вы устанавливаете программу.MySQL ODBC Connector w/Excel VBA - не удается УДАЛИТЬ записи

Что я могу пропустить?

Ниже перечислены мои функции, которые я использую для подключения к базе данных, а также образец кода, который работает для операторов INSERT и SELECT, а затем код, который имеет ошибку с моим оператором DELETE.

ПЕРЕСМОТР ...

Оказывается, это была просто ошеломляюще ошибка в моем заявлении MySQL, как указано в принятом ответе. Тем не менее, для тех, кто споткнется об этом в будущем, которые хотят подключиться к MySQL через Excel-VBA, вы можете найти достоинства в функциях connectDatabase() и closeDatabase(), поскольку большинство кода, на который я наткнулся на ODBC Connector, имеет пользователей создавая их соединение в менее чистом формате.

Public DBCONT As Object 

Public Function connectDatabase() 
    Set DBCONT = CreateObject("ADODB.Connection") 
    Dim Server_Name As String 
    Dim Database_Name As String 
    Dim User_ID As String 
    Dim Password As String 
    Dim sConn As String 

    Server_Name = "localhost" 
    Database_Name = "sakila" 
    User_ID = "admin" 
    Password = "password" 

    sConn = "Driver={MySQL ODBC 5.1 Driver};Server=" & _ 
      Server_Name & ";Database=" & Database_Name & _ 
      ";UID=" & User_ID & ";PWD=" & Password & ";Option=3;" 

    DBCONT.Open sConn 
    DBCONT.cursorlocation = 3 

End Function 



Public Function closeDatabase() 
    On Error Resume Next 
    DBCONT.Close 
    Set DBCONT = Nothing 
    On Error GoTo 0 
End Function 

Следующий код работает:

Private Sub Workbook_Open() 

    Dim rs As Object 
    Set rs = CreateObject("ADODB.Recordset")  
    Dim sqlstr As String 
    sqlstr = "SELECT * FROM Actor" 

    Call connectDatabase 
    rs.Open sqlstr, DBCONT 

    Dim actorfirstname As String 
    Dim actorlastname As String 
    Dim mysqlinsert As String 
    actorfirstname = InputBox("Enter first name") 
    actorlastname = InputBox("Enter last name") 
    mysqlinsert = "INSERT INTO Actor(first_name,last_name) VALUES ('" & actorfirstname & "','" & actorlastname & "')" 
    DBCONT.Execute mysqlinsert 

    If rs.RecordCount > 0 Then 
     For i = 1 To rs.RecordCount 
     For x = 1 To rs.Fields.Count 
      If i = 1 Then ThisWorkbook.Sheets("Sheet1").Cells(1, x).Value = rs.Fields(x - 1).Name 
      With ThisWorkbook.Sheets("Sheet1") 
       .Cells(i + 1, x).Value = rs(x - 1) 
      End With 
     Next x 
     rs.movenext 
     Next i 
    Else 
     MsgBox "No Records Found" 
    End If 
    rs.Close 
    Set rs = Nothing 
    Call closeDatabase 

End Sub  

Следующие коды не работают ... это ошибки на линии DBCONT.Execute sqlstrDelete с ошибкой времени выполнения «-2147217900 (80040E14) ': Ошибка автоматизации

Sub deleteRecord() 
    Dim sqlstrDelete As String 
    sqlstrDelete = "DELETE * FROM Actor WHERE last_name='TEST'" 

    Call connectDatabase 
    DBCONT.Execute sqlstrDelete 
    Call closeDatabase 
End Sub 
+0

Вы проверили это за пределами 'vba'? 'DELETE * FROM Actor WHERE last_name = 'TEST'' – whytheq

ответ

1

Вам нужна звезда? *

DELETE * FROM Actor WHERE last_name='TEST' 

Будет ли это выполнено?

DELETE FROM Actor WHERE last_name='TEST' 
+0

Я не могу поверить, что это была простая ошибка в моей инструкции DELETE. Это сводило меня с ума. –

+0

Пожалуйста, извините ошибку новобранец ... –

+0

@ColinStadig не беспокоится - за многие годы я сделал так много ошибок ado. Чувствовал, что у меня правильный ответ MySQL, поскольку я никогда не использовал его! – whytheq

Смежные вопросы