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

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

Код: 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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777380
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть и такой вариант:

Код: 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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777382
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ко второму варианту.
...
Рейтинг: 0 / 0
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777391
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777425
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777438
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM1) Попробуйте использовать в качестве провайдера не ODBC DSN, а ACE OLEDB 12 http://connectionstrings.com/excel-2007
вот так?
...
Рейтинг: 0 / 0
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777439
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777442
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы там всё придумываете-то?
Код: vbnet
1.
strSql2 = "SELECT a.[Название 1], a.[Название 2] FROM " & "[" & CurrentFile2 & "]" & ".[Лист1$] a"


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


А что у вас вообще такое - "Название1", "Название 2"? Заголовки столбцов? А они действительно сейчас находятся в первой строке листа с именем "Лист1"?
...
Рейтинг: 0 / 0
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777488
Фотография Ivan33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
MS Query - Обновление не возможно. База данных доступна только для чтения.
    #37777518
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бли-и-ин.... Ну не нужен тогда не нужен CurrentFile2 в sSql , что неясно-то?

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


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