2015-02-12 4 views
0

Я пишу макрос, по которому хочу удалить несколько имен в столбце A листа 2 из таблицы сервера, называемой login.Удаление записей таблицы mysql с использованием макроса

Имя базы данных «my_db», а имя таблицы - это логин. Я вызываю соединение для подключения к серверной базе данных. Ниже приведен полный код: -

Dim cnt As ADODB.Connection 
Dim rst As ADODB.Recordset 
Dim Sql As String 
Sub Button1_Click() 
Dim Ws As Worksheet 
Dim Var As String 
Dim i As Integer 
i = 1 
Set Ws = Worksheets("Sheet2") 
Var = "login" 
Sql = "name" 
Call Connection 


Do 

Sql = " Delete From " & " " & Var & "" & " Where name" = "Ws.Cells(i, 1)" 





    Call Connection 
    i = i + 1 
    Loop Until Ws.Cells(i, 1) = "" 

    MsgBox "All entries deleted from login table" 


End Sub 

Dim strUserName As String 
Dim strPassword As String 
Dim ConnectString As String 
Set cnt = New ADODB.Connection 


strServerName = "localhost" 
strDatabaseName = "my_db" 
strUserName = "root" 
strPassword = "root1" 


ConnectString = "DRIVER={MySQL ODBC 5.1 Driver};" & _ 
       "SERVER=" & strServerName & _ 
       ";DATABASE=" & strDatabaseName & ";" & _ 
       "USER=" & strUserName & _ 
       ";PASSWORD=" & strPassword & _ 
       ";OPTION=3;" 



With cnt 
     .CursorLocation = adUseClient 
     .Open ConnectString 
     .CommandTimeout = 0 
     Set rst = .Execute(Sql) 
    End With 
    'rst.Close 
    'cnt.Close 

    Set rst = Nothing 
    Set cnt = Nothing 

End Sub 

Но записи не удаляются. В синтаксисе SQL есть ошибка, может ли кто-нибудь помочь мне с синтаксисом sql?

+0

Красивый код. И в чем ваш вопрос? –

+0

Я не получаю никаких ошибок, но записи в таблице не удаляются. Вы хотите, чтобы я опубликовал сообщение? –

+0

Да, что вызывает соединение? И куда вы отправляете запрос? –

ответ

1
Sql = "delete From " & Var & " where name ='" & Ws.Cells(i, 1).Value & "'" 

, но было бы лучше, чтобы открыть соединение только один раз, запускай все удалений, а затем закрыть соединение.

Также вам не нужно здесь записей (так как вы не возвращает никаких записей), так что вы можете игнорировать возвращаемое значение из cnt.Execute

+0

Спасибо! Мне не хватало синтаксиса !! –

1

Так как вы вставили код только частично, я могу только догадываться.

Do 
Sql = " Delete From " & Var & " Where name" = "Ws.Cells(i, 1)" 
Call Connection (Sql) 
i = i + 1 
Loop Until Ws.Cells(i, 1) = "" 

Очистите ваш запрос. И более важно передать его как параметр для подключения.

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