Страницы: 1
RSS
Error 1004 на строке QueryTables
 
Никогда не работал с базами, а тут надо ...
Запрос рабочий, база есть, доступ тоже, логин-пароль верные ...
Код
Sub SQLQuery_1()
    Dim varConn As String
    Dim varSQL As String
    Range("A1").CurrentRegion.ClearContents
   
 varConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User 
ID=****;Password=*****;Initial Catalog=Orion050914;Data 
Source=192.168.30.82\SQLSERVER2008;Use Procedure for Prepare=1;Auto 
Translate=True;Packet Size=4096;Workstation ID=WS-25-2;Use Encryption 
for Data=False;Tag with column collation when possible=False"
    
varSQL = "SELECT Person.ID as ID, Person.Name + ' ' +Person.FirstName + '
 ' +Person.MidName as FIO FROM  pList as Person ORDER BY ID ASC"
      
    
    With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))
        .Name = "Q10"
        .CommandText = varSQL
        .CommandType = xlCmdSql
        .Refresh BackgroundQuery:=False
        .RefreshStyle = xlOverwriteCells
        .Refresh
    End With
End Sub

Выдаёт на строке "    With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Range("A1"))"  Runtime error 1004,никак не могу понять почему...
Помогите плз...
Изменено: Ironweed - 22.01.2016 12:58:05
 
Ну, тогда либо нет активного листа (откуда запускаете макрос? попробуйте Sheets("ИмяЛист") вместо ActiveSheet), либо ... еще что-то О_о
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Доброе время суток
Просто нужно указать какой тип драйвера OLEDB или ODBC используется. В вашем случае OLEDB
Код
varConn = "OLEDB;Provider=SQLOLEDB.1;Persist Security Info=True;"

Всю строку подключения дальше не прописывал, остальное всё то же, что и у вас.
Range("A1").CurrentRegion.ClearContents - этого может не хватить. Если на листе уже есть QueryTables, то лучше пробегите по этой коллекции листа и удалите QueryTable лежащие в области окружения ячейки A1.
Успехов.
 
Цитата
Михаил Лебедев написал:
Ну, тогда либо нет активного листа (откуда запускаете макрос? попробуйте Sheets("ИмяЛист") вместо ActiveSheet), либо ... еще что-то О_о
Лист есть, макрос запускаю с листа, это первое что пришло в голову, но к сожалению - лист есть.
 
Цитата
Андрей VG написал:
Просто нужно указать какой тип драйвера OLEDB или ODBC используется. В вашем случае OLEDB
Спс, за идею, но проверить сейчас уже не получится, тока завтра !
Изменено: Ironweed - 22.01.2016 21:14:14
 
Подумал и решил сделать так ...
Код
Sub SQLQuery_2()
    Dim vWorkbook As Workbook
    Dim vWorksheet As Worksheet
    
    Dim vSQL As String
    
    Dim cn As New ADODB.Connection
    Dim rstRes As New ADODB.Recordset
    Dim rstCom As New ADODB.Command
    
    cn.Open "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=****;Password=*****;Initial Catalog=Orion050914;Data Source=192.168.30.82\SQLSERVER2008;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=WS-25-2;Use Encryption for Data=False;Tag with column collation when possible=False"
    Set rstCom.ActiveConnection = cn
    
    Set vWorkbook = ActiveWorkbook
    vSQL = "SELECT Person.ID as ID, Person.Name + ' ' +Person.FirstName + ' ' +Person.MidName as FIO FROM  pList as Person ORDER BY ID ASC"
    
    rstCom.CommandText = vSQL
    Set rstRes = rstCom.Execute
    
    ActiveSheet.Range("A2").CopyFromRecordset rstRes
    
End Sub
Работает!
Страницы: 1
Читают тему
Наверх