Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / MS Query - Обновление не возможно. База данных доступна только для чтения. / 16 сообщений из 16, страница 1 из 1
30.04.2012, 13:11
    #37777375
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Коллеги, добрый день!

Добавил в книгу вот это:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Sub Макрос2()
'
' Макрос2 Макрос
'
CurrentFile = Left(ThisWorkbook.FullName, (InStrRev(ThisWorkbook.FullName, ".", -1, vbTextCompare) - 1))

CurrentFile2 = CurrentFile & ".xlsx"

CurrentFile3 = ActiveWorkbook.Path
'
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
        "ODBC;DSN=Excel Files;DBQ=" & CurrentFile & ".xslx;DefaultDir=" & CurrentFile3 & ";DriverId=1046;MaxBufferSize=2048" _
        ), Array(";PageTimeout=5;")), Destination:=Range("$A$1")).QueryTable
        .CommandText = Array( _
        "SELECT `Лист1$`.`Название 1`, `Лист1$`.`Название 2`" & Chr(13) & "" & Chr(10) & "FROM " & "`" & CurrentFile2 & "`"".`Лист1$` `Лист1$`")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "Таблица_Запрос_из_Excel_Files"
        .Refresh BackgroundQuery:=False
    End With
End Sub



Запрос делается из книги с расширением xlsm. Данные сидят в книге с тем же именем, но расширением xlsx.

Однако выдаётся ошибка - что "База данных доступна только для чтения". Где и чего не учёл? Может то, что задумал надо делать по-другому?

После ошибки - "База данных доступна только для чтения" вываливается окошко с выбором файла, откуда будут браться данные. Но потом на " .Refresh BackgroundQuery:=False" появляется другая.
...
Рейтинг: 0 / 0
30.04.2012, 13:19
    #37777380
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Есть и такой вариант:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Sub CreateQT()

    Dim sConn As String
    Dim sSql As String
    Dim oQt As QueryTable
    
CurrentFile = Left(ThisWorkbook.FullName, (InStrRev(ThisWorkbook.FullName, ".", -1, vbTextCompare) - 1))

CurrentFile2 = CurrentFile & ".xlsx"

CurrentFile3 = ActiveWorkbook.Path

    sConn = "ODBC;DSN=Excel Files;"
    sConn = sConn & "DBQ=" & CurrentFile & ".xslx"
   
    
    sConn = sConn & ";DefaultDir = " & CurrentFile3 & ";"""
    sConn = sConn & "DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

    sSql = "SELECT `Лист1$`.`Название 1`, `Лист1$`.`Название 2` "
   
    sSql = sSql & "FROM " & "`" & CurrentFile2 & "`"
    
    sSql = sSql & ".`Лист1$` `Лист1$`"
    
   

   Set oQt = ActiveSheet.QueryTables.Add( _
        Connection:=sConn, _
        Destination:=Range("a1"), _
        Sql:=sSql)

    oQt.Refresh
    
   

End Sub


Окошко всё равно появляется.
...
Рейтинг: 0 / 0
30.04.2012, 13:22
    #37777382
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Ко второму варианту.
...
Рейтинг: 0 / 0
30.04.2012, 13:35
    #37777391
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
1) Попробуйте использовать в качестве провайдера не ODBC DSN, а ACE OLEDB 12 http://connectionstrings.com/excel-2007
2) Попробуйте изменить SQL-запрос (хотя дело, может, и не в этом) на
Код: vbnet
1.
sSql = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a"

3) Попробуйте отказаться от QueryTable (тем более, по второму варианту вы там надобавляете запросов...), получая, например, RecordSet и сливая затем данные на лист, тем более, что .FillAdjacentFormulas = False
...
Рейтинг: 0 / 0
30.04.2012, 14:30
    #37777425
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTM3) Попробуйте отказаться от QueryTable (тем более, по второму варианту вы там надобавляете запросов...), получая, например, RecordSet и сливая затем данные на лист, тем более, что .FillAdjacentFormulas = False
это вот этот вариант? провайдера подставил, но не срабатывает. может опять чего не так?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Public Function ADO_R_Dmitry(ByVal StrSql$, ByVal FilePath$, ByVal OutputRange As Range, _
ByVal FieldsName As Boolean, ByVal OutputFieldsName As Boolean)
'==============================================================================
'*???????? ??????? : ?????????? ????? ??????? Recordset ? ?????? ?????? ??????,
'* ?????????? ?????????.
'*strSql - ??????????? SQL  ???????.
'* FilePath - ?????? ???? ? ????? ??????? ??? ? ??????????.
'* OutputRange - ????? ????? ? ??????? ?????????? ????? ??????.
'* FieldsName - ???????????? ??? ??? ????????? ???????? (True - False)
'* OutputFieldsName - ????? ?????? ? ??????????? ??? ??? (True - False), _
'==============================================================================
'* ????? R Dmitry (??????? ????? dg_rusak@mail.ru skype: RDG_Dmitry)          |
'* WM:_R269866874234 U144446690328                                            |
'==============================================================================
Dim sCon As String, FieldName As String
Dim rs As Object, cn  As Object
Set rs = CreateObject("ADODB.Recordset")
Set cn = CreateObject("ADODB.Connection")

CurrentFile = Left(ThisWorkbook.FullName, (InStrRev(ThisWorkbook.FullName, ".", -1, vbTextCompare) - 1))

CurrentFile2 = CurrentFile & ".xlsx"
If FieldsName Then FieldName = "Yes" Else FieldName = "No"
Select Case Val(Application.Version)
    Case Is < 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentFile2 _
        & ";Extended Properties=""Excel 12.0 Xml;HDR=YES" & FieldName & ";IMEX=1"";"
    Case Is >= 12
        sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentFile2 _
        & ";Extended Properties=""Excel 12.0 Xml;HDR=YES" & FieldName & ";IMEX=1"";"
End Select

cn.Open sCon
If Not cn.State = 1 Then Exit Function
Set rs = cn.Execute(StrSql)
If Not FieldsName Then OutputFieldsName = False
 If OutputFieldsName Then
    For i = 0 To rs.Fields.Count - 1
    OutputRange.Offset(0, i) = rs.Fields(i).Name
    Next
    Set OutputRange = OutputRange.Offset(1, 0)
 End If
 DoEvents
OutputRange.CopyFromRecordset rs
rs.Close:  cn.Close
Set cn = Nothing: Set rs = Nothing
End Function

'=================?????? ?????????????=======================
Sub test()
Dim strSql2$
strSql2 = "select * from `&#203;&#232;&#241;&#242;1$`.`&#205;&#224;&#231;&#226;&#224;&#237;&#232;&#229; 1`, `&#203;&#232;&#241;&#242;1$`.`&#205;&#224;&#231;&#226;&#224;&#237;&#232;&#229; 2`"
Sheets(2).[a1].CurrentRegion.ClearContents
Call ADO_R_Dmitry(strSql2, ThisWorkbook.FullName, Sheets(2).[a1], True, True)
Sheets(2).Activate
End Sub
...
Рейтинг: 0 / 0
30.04.2012, 14:48
    #37777438
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTM1) Попробуйте использовать в качестве провайдера не ODBC DSN, а ACE OLEDB 12 http://connectionstrings.com/excel-2007
вот так?
...
Рейтинг: 0 / 0
30.04.2012, 14:49
    #37777439
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Sub CreateQT()

    Dim sConn As String
    Dim sSql As String
    Dim oQt As QueryTable
    
CurrentFile = Left(ThisWorkbook.FullName, (InStrRev(ThisWorkbook.FullName, ".", -1, vbTextCompare) - 1))

CurrentFile2 = CurrentFile & ".xlsx"

CurrentFile3 = ActiveWorkbook.Path

    sConn = "Provider=Microsoft.ACE.OLEDB.12.0;"
    sConn = sConn & "Data Source=" & CurrentFile & ".xslx"
    
    sConn = sConn & "Extended Properties=Excel 12.0 Xml;HDR=YES;"
    'sConn = sConn & "DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

    sSql = "SELECT `&#203;&#232;&#241;&#242;1$`.`&#205;&#224;&#231;&#226;&#224;&#237;&#232;&#229; 1`, `&#203;&#232;&#241;&#242;1$`.`&#205;&#224;&#231;&#226;&#224;&#237;&#232;&#229; 2` "
    
    sSql = sSql & "FROM " & "`" & CurrentFile2 & "`"
    
    sSql = sSql & ".`&#203;&#232;&#241;&#242;1$` `&#203;&#232;&#241;&#242;1$`"
    

   Set oQt = ActiveSheet.QueryTables.Add( _
        Connection:=sConn, _
        Destination:=Range("a1"), _
        Sql:=sSql)

    oQt.Refresh
    
   

End Sub
...
Рейтинг: 0 / 0
30.04.2012, 14:49
    #37777442
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Что вы там всё придумываете-то?
Код: vbnet
1.
strSql2 = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a"


И, будьте добры, включайте русскую раскладку в VBE, когда копируете код...
...
Рейтинг: 0 / 0
30.04.2012, 15:01
    #37777446
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTMЧто вы там всё придумываете-то?
Код: vbnet
1.
strSql2 = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a"


И, будьте добры, включайте русскую раскладку в VBE, когда копируете код...
Раскладка включена. Не совсем до конца понимаю просто. Вот это
AndreTMstrSql2 = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a" к этому варианту?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Sub test()
Dim strSql2$
strSql2 = "SELECT a.[Название 1], a.[Название 2] FROM " & "`" & CurrentFile2 & "`" & ".[Лист1$] a"
Sheets(2).[a1].CurrentRegion.ClearContents
Call ADO_R_Dmitry(strSql2, ThisWorkbook.FullName, Sheets(2).[a1], True, True)
Sheets(2).Activate
End Sub

?

Пришлось снова поставить "`" пишет ошибки синтаксиса.
...
Рейтинг: 0 / 0
30.04.2012, 15:04
    #37777451
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Но в Тест6 всё равно ругается на ошибку AutomationError
...
Рейтинг: 0 / 0
30.04.2012, 15:17
    #37777460
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Ivan33Но в Тест6 всё равно ругается на ошибку AutomationError
добавил On Error Resume Next теперь ошибка: Объект "Название 1" не найден ядром базы данных... проверьте правильность пути.
...
Рейтинг: 0 / 0
30.04.2012, 15:34
    #37777477
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Так и не доходит до меня, что там у вас такое...
Ну вот зачем, если у вас в строке подключения ужке указан источник "Data Source=...", писАть затем в строке запроса имя файла-источника? Хватит и
Код: vbnet
1.
strSql2 = "SELECT [Название 1], [Название 2] FROM [Лист1$]"


А что у вас вообще такое - "Название1", "Название 2"? Заголовки столбцов? А они действительно сейчас находятся в первой строке листа с именем "Лист1"?
...
Рейтинг: 0 / 0
30.04.2012, 15:44
    #37777488
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTMА что у вас вообще такое - "Название1", "Название 2"? Заголовки столбцов? А они действительно сейчас находятся в первой строке листа с именем "Лист1"? да

какие-то глюки с экцелем у меня. вот пример самый первый. вставил "[". поменять провайдер не соображу как. пока его в комментарии поставил.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
sConn = "ODBC;DSN=Excel Files;"
    sConn = sConn & "DBQ=" & CurrentFile & ".xslx"
    
    'sCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & CurrentFile2 _
        & ";Extended Properties=""Excel 12.0 Xml;HDR=YES" & FieldName & ";IMEX=1"";"
    
    sConn = sConn & ";DefaultDir = " & CurrentFile3 & ";"""
    sConn = sConn & "DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"

    'sSql = "SELECT `Лист1$`.`Название 1`, `Лист1$`.`Название 2` "
    sSql = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a"
    
    'sSql = sSql & "FROM " & "`" & CurrentFile2 & "`"
    
    'sSql = sSql & ".`Лист1$` `Лист1$`"
...
Рейтинг: 0 / 0
30.04.2012, 16:27
    #37777518
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
Бли-и-ин.... Ну не нужен тогда не нужен CurrentFile2 в sSql , что неясно-то?

Или используете "DBQ=" без указания имени файла-источника в строке подключения, и тогда нужно указывать имя файла в FROM строки-запроса; или указываете имя файла-источника в DBQ=/DataSource=, и тогда не используете имя файла в FROM строки-запроса, ...
...
Рейтинг: 0 / 0
30.04.2012, 17:44
    #37777558
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTMБли-и-ин.... Доходчиво. Спасибо.
...
Рейтинг: 0 / 0
30.04.2012, 17:56
    #37777567
Ivan33
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS Query - Обновление не возможно. База данных доступна только для чтения.
AndreTMБли-и-ин....
для первого варианта использовал вот это только стили таблиц к этому не применить.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / MS Query - Обновление не возможно. База данных доступна только для чтения. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]