Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/ADO - класс для работы с данными Excel при помощи SQL - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » ADO - класс для работы с данными Excel при помощи SQL
ADO - класс для работы с данными Excel при помощи SQL
Michael_S Дата: Пятница, 13.12.2013, 14:11 | Сообщение № 21
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
Всем привет!
Такой вопрос - метод ADO работает быстрее, чем GetObject?

У меня есть файл (~300 000 тыс строк, более 40 столбцов, каждый день строки добавляются, до тыс в день)
Через GetObject открывается 30-45 сек; потом я использую данные из примерно 10 столбцов.
Будет ли работа через ADO быстрее?
 
Ответить
СообщениеВсем привет!
Такой вопрос - метод ADO работает быстрее, чем GetObject?

У меня есть файл (~300 000 тыс строк, более 40 столбцов, каждый день строки добавляются, до тыс в день)
Через GetObject открывается 30-45 сек; потом я использую данные из примерно 10 столбцов.
Будет ли работа через ADO быстрее?

Автор - Michael_S
Дата добавления - 13.12.2013 в 14:11
nerv Дата: Суббота, 14.12.2013, 14:24 | Сообщение № 22
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

При просмотре кода класса вдруг увидел "4.0" в том месте, где обычно вижу "8.0". Подозреваю, что опечатка. Возможно, даже невольно ограничивающая функционал по тому же количеству строк - ведь в Excel 4.0 их было всего 16K. Или это сознательный шаг?

не могу ответить, т.к. забыл :) Скорее всего это был копи-паст откуда то

Michael_S, насколько помню, ADO может работать с закрытыми книгами.


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
При просмотре кода класса вдруг увидел "4.0" в том месте, где обычно вижу "8.0". Подозреваю, что опечатка. Возможно, даже невольно ограничивающая функционал по тому же количеству строк - ведь в Excel 4.0 их было всего 16K. Или это сознательный шаг?

не могу ответить, т.к. забыл :) Скорее всего это был копи-паст откуда то

Michael_S, насколько помню, ADO может работать с закрытыми книгами.

Автор - nerv
Дата добавления - 14.12.2013 в 14:24
nilem Дата: Суббота, 14.12.2013, 18:55 | Сообщение № 23
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Будет ли работа через ADO быстрее?

По идее, GetObject д.б. быстрее, чем ADO, при первом запуске. А вот при последующих запусках - не факт. Михаил, можете проверить?
И заодно посмотрите такой вариант: [vba]
Код
Range("A1:C10").Value = "'С:\какие-то_папки\[файл.xlsx]Лист1'!A1:C10
[/vba]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Суббота, 14.12.2013, 18:56
 
Ответить
Сообщение
Будет ли работа через ADO быстрее?

По идее, GetObject д.б. быстрее, чем ADO, при первом запуске. А вот при последующих запусках - не факт. Михаил, можете проверить?
И заодно посмотрите такой вариант: [vba]
Код
Range("A1:C10").Value = "'С:\какие-то_папки\[файл.xlsx]Лист1'!A1:C10
[/vba]

Автор - nilem
Дата добавления - 14.12.2013 в 18:55
anvg Дата: Понедельник, 16.12.2013, 10:43 | Сообщение № 24
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Цитата
(~300 000 тыс строк, более 40 столбцов

Если использовать файл Excel с такими размерами таблицы, то испльзование ADO будет медленнее, причём заметно, достаточно сравнить время на открытие (медленнее будет из-за того, что ADO нужно будет проверять на "правильность" (соответствие определённому на этапе начала работы типу) каждое значение ячейки, плюс структура файла Excel мало приспособлена для оптимальной работы с таблицами.
Однозначно будет быстрее работать ADO, если данные загрузить в таблицу Access.


Сообщение отредактировал anvg - Понедельник, 16.12.2013, 10:43
 
Ответить
Сообщение
Цитата
(~300 000 тыс строк, более 40 столбцов

Если использовать файл Excel с такими размерами таблицы, то испльзование ADO будет медленнее, причём заметно, достаточно сравнить время на открытие (медленнее будет из-за того, что ADO нужно будет проверять на "правильность" (соответствие определённому на этапе начала работы типу) каждое значение ячейки, плюс структура файла Excel мало приспособлена для оптимальной работы с таблицами.
Однозначно будет быстрее работать ADO, если данные загрузить в таблицу Access.

Автор - anvg
Дата добавления - 16.12.2013 в 10:43
Michael_S Дата: Четверг, 19.12.2013, 19:33 | Сообщение № 25
Группа: Друзья
Ранг: Старожил
Сообщений: 2012
Репутация: 373 ±
Замечаний: 0% ±

Excel2016
anvg, спасибо за комментарий.
В зависимости от машины сейчас файл обрабатывается 40-65 сек, из них 20-45 сек уходит на открытие. Если файл уже открыт, то обрабатывается 25-30 сек.
Пробовал перевести данные в Access - получается дольше; из .cvs как текст - тоже дольше получается, правда в этих случаях не "вытягиваются" ненужные данные...
 
Ответить
Сообщениеanvg, спасибо за комментарий.
В зависимости от машины сейчас файл обрабатывается 40-65 сек, из них 20-45 сек уходит на открытие. Если файл уже открыт, то обрабатывается 25-30 сек.
Пробовал перевести данные в Access - получается дольше; из .cvs как текст - тоже дольше получается, правда в этих случаях не "вытягиваются" ненужные данные...

Автор - Michael_S
Дата добавления - 19.12.2013 в 19:33
anvg Дата: Пятница, 20.12.2013, 05:38 | Сообщение № 26
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Здравствуйте, Михаил.
Опишу несколько подробнее.
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов. Столбцы: 1 – числовой (номер строки), 2 – текстовый, 3 – дата и время, 4 – денежный, 5 – логический (кроме первого, остальные создавались случайным образом, текстовый до 32 символов), с 6 по 40 столбцы с аналогичным содержанием, плюс – верхняя строка заголовков столбцов. То есть использовались все типы, воспринимаемые ADO в Excel.
Соответственно, тестирование
1. Через GetObject, с загрузкой в массив 10 последовательных столбцов 9-11сек, почему такая разница с вами, не знаю, предполагаю либо разница в «железе» либо у вас в таблице есть ещё пересчитываемые при открытии формулы.
2. Через ADO, 60-90 секунд, также с выборкой в Recordset 10 столбцов, поэтому и написал, что будет дольше. Предполагаю, что такая долгая загрузка обусловлена проверкой типов данных, хранящихся в ячейках. Базы данных требуют, чтобы столбцы были строго типизированы. ADO определяет тип данных, по умолчанию, по первым 8 строкам, остальные, если не соответствуют требуемому типу, записываются как Null.
3. Эти же данные были загружены в таблицу Access, выборка в Recodrset 10 столбцов даже по сети около 2 секунд (сеть 1Гб). Но в этом случае требуется, чтобы данные всегда хранились в базе Access. Из Excel осуществляется: чтение, обновление, добавление данных, в этом случае будет быстро. Если данные каждый раз перегружать из Excel в Access, то естественно это будет долго. Я же проверял только скорость получения данных из таблицы базы Access в Recordset.
В общем, чтобы определяться, что лучше – нужно знать конкретную структуру данных и алгоритм обработки.
 
Ответить
СообщениеЗдравствуйте, Михаил.
Опишу несколько подробнее.
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов. Столбцы: 1 – числовой (номер строки), 2 – текстовый, 3 – дата и время, 4 – денежный, 5 – логический (кроме первого, остальные создавались случайным образом, текстовый до 32 символов), с 6 по 40 столбцы с аналогичным содержанием, плюс – верхняя строка заголовков столбцов. То есть использовались все типы, воспринимаемые ADO в Excel.
Соответственно, тестирование
1. Через GetObject, с загрузкой в массив 10 последовательных столбцов 9-11сек, почему такая разница с вами, не знаю, предполагаю либо разница в «железе» либо у вас в таблице есть ещё пересчитываемые при открытии формулы.
2. Через ADO, 60-90 секунд, также с выборкой в Recordset 10 столбцов, поэтому и написал, что будет дольше. Предполагаю, что такая долгая загрузка обусловлена проверкой типов данных, хранящихся в ячейках. Базы данных требуют, чтобы столбцы были строго типизированы. ADO определяет тип данных, по умолчанию, по первым 8 строкам, остальные, если не соответствуют требуемому типу, записываются как Null.
3. Эти же данные были загружены в таблицу Access, выборка в Recodrset 10 столбцов даже по сети около 2 секунд (сеть 1Гб). Но в этом случае требуется, чтобы данные всегда хранились в базе Access. Из Excel осуществляется: чтение, обновление, добавление данных, в этом случае будет быстро. Если данные каждый раз перегружать из Excel в Access, то естественно это будет долго. Я же проверял только скорость получения данных из таблицы базы Access в Recordset.
В общем, чтобы определяться, что лучше – нужно знать конкретную структуру данных и алгоритм обработки.

Автор - anvg
Дата добавления - 20.12.2013 в 05:38
SkyPro Дата: Пятница, 10.01.2014, 18:10 | Сообщение № 27
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Добрый вечер, а кто может сказать, почему у меня этот класс не хочет работать с более чем 65к строк?
Эксель 2010.

Два часа голову ломал, а оказалось, что ошибка в запросе..


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 10.01.2014, 18:19
 
Ответить
СообщениеДобрый вечер, а кто может сказать, почему у меня этот класс не хочет работать с более чем 65к строк?
Эксель 2010.

Два часа голову ломал, а оказалось, что ошибка в запросе..

Автор - SkyPro
Дата добавления - 10.01.2014 в 18:10
MerLen Дата: Воскресенье, 02.03.2014, 22:50 | Сообщение № 28
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!

Подскажите пожалуйста, возможно ли использовать INNER JOIN, а также Select в Select? Постоянно рунается на синтаксис. Файлик прикладываю. Первые 2 таблицы - исходные, третья результат, который должен быть.

Код:
ADO.Query ("Select City, sum(Number) from [A1:B9] as table1 INNER JOIN [D1:E5] as table2 ON Number=Number_city Group by City")
К сообщению приложен файл: Test_3.xlsm (19.9 Kb)
 
Ответить
СообщениеДобрый день!

Подскажите пожалуйста, возможно ли использовать INNER JOIN, а также Select в Select? Постоянно рунается на синтаксис. Файлик прикладываю. Первые 2 таблицы - исходные, третья результат, который должен быть.

Код:
ADO.Query ("Select City, sum(Number) from [A1:B9] as table1 INNER JOIN [D1:E5] as table2 ON Number=Number_city Group by City")

Автор - MerLen
Дата добавления - 02.03.2014 в 22:50
anvg Дата: Понедельник, 03.03.2014, 04:14 | Сообщение № 29
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Добрый день.
Файл не смотрел, однако в запросе у вас не указано название листа(ов) с которых берутся данные. Запрос должен выглядеть тогда так
"Select City, sum(Number) from [ИмяЛиста$A1:B9] as table1 INNER JOIN [ИмяЛиста$D1:E5] as table2 ON Number=Number_city Group by City"
Успехов.
 
Ответить
СообщениеДобрый день.
Файл не смотрел, однако в запросе у вас не указано название листа(ов) с которых берутся данные. Запрос должен выглядеть тогда так
"Select City, sum(Number) from [ИмяЛиста$A1:B9] as table1 INNER JOIN [ИмяЛиста$D1:E5] as table2 ON Number=Number_city Group by City"
Успехов.

Автор - anvg
Дата добавления - 03.03.2014 в 04:14
PowerBoy Дата: Понедельник, 03.03.2014, 07:18 | Сообщение № 30
Группа: Проверенные
Ранг: Участник
Сообщений: 100
Репутация: 31 ±
Замечаний: 0% ±

2003
Иннер джойн в этом запросе писать необязательно:

[vba]
Код
SELECT
d.City AS City,
SUM(a.Number) AS Num
FROM
[Исходные данные$a:b] AS a,[Исходные данные$d:e] AS d
WHERE
a.Number=d.Number_city
GROUP BY
d.City
[/vba]

Чтобы получить данные как требуется в примере:

[vba]
Код
SELECT
d.City AS City,
SUM(a.Number) AS Num
FROM
[Исходные данные$a:b] AS a
RIGHT JOIN [Исходные данные$d:e] AS d
ON a.Number=d.Number_city
GROUP BY
d.City
[/vba]


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)

Сообщение отредактировал Serge_007 - Четверг, 06.03.2014, 19:49
 
Ответить
СообщениеИннер джойн в этом запросе писать необязательно:

[vba]
Код
SELECT
d.City AS City,
SUM(a.Number) AS Num
FROM
[Исходные данные$a:b] AS a,[Исходные данные$d:e] AS d
WHERE
a.Number=d.Number_city
GROUP BY
d.City
[/vba]

Чтобы получить данные как требуется в примере:

[vba]
Код
SELECT
d.City AS City,
SUM(a.Number) AS Num
FROM
[Исходные данные$a:b] AS a
RIGHT JOIN [Исходные данные$d:e] AS d
ON a.Number=d.Number_city
GROUP BY
d.City
[/vba]

Автор - PowerBoy
Дата добавления - 03.03.2014 в 07:18
MerLen Дата: Понедельник, 03.03.2014, 16:07 | Сообщение № 31
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо большое за помощь! Все получилось! hands

У меня есть еще один вопросик :) возможно ли написать такой запрос, чтобы значения одного исходного столбца "превратились" в столбцы результирующего? Альтернативный результат с сводными, но не хочется их использовать :)
К сообщению приложен файл: Test.xlsx (11.0 Kb)
 
Ответить
СообщениеСпасибо большое за помощь! Все получилось! hands

У меня есть еще один вопросик :) возможно ли написать такой запрос, чтобы значения одного исходного столбца "превратились" в столбцы результирующего? Альтернативный результат с сводными, но не хочется их использовать :)

Автор - MerLen
Дата добавления - 03.03.2014 в 16:07
Gustav Дата: Четверг, 06.03.2014, 16:24 | Сообщение № 32
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2731
Репутация: 1132 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
возможно ли написать такой запрос, чтобы значения одного исходного столбца "превратились" в столбцы результирующего?

Можно. Подобный запрос "звучит" примерно так:

[vba]
Код
TRANSFORM Sum(Продажи)
SELECT Город, Продукт
FROM Лист1
GROUP BY Город, Продукт
PIVOT [Тип магазина]
[/vba]
Не бойтесь, я сам это тоже на память не помню - это мне Мастер запросов в MS Access помог, там это называется "перекрестный запрос".

Соответственно, применительно к листу Excel это как-то так:

[vba]
Код
Sub selectData()
                      
         Dim rst As Object
         Set rst = CreateObject("ADODB.Recordset")
                      
         rst.Open _
         "TRANSFORM Sum(Продажи) " & _
         "SELECT Город, Продукт " & _
         "FROM [Лист1$A2:D23] " & _
         "GROUP BY Город, Продукт " & _
         "PIVOT [Тип магазина]" _
         , _
         "Provider=Microsoft.ACE.OLEDB.12.0;" & _
         "Data Source=" & ThisWorkbook.FullName & ";" & _
         "Extended Properties='Excel 12.0;HDR=Yes'"
                      
         [Лист1!G15].CopyFromRecordset rst
                            
         'ЗАГОЛОВКИ
         Dim i As Integer
         Dim arrName() As Variant
         ReDim Preserve arrName(0 To rst.Fields.Count - 1)
         For i = 0 To rst.Fields.Count - 1
             arrName(i) = rst.Fields(i).Name
         Next i
         With Range("G14").Resize(1, rst.Fields.Count)
             .Value = arrName
             .Font.Bold = True
         End With

End Sub
[/vba]
О заголовках результата надо будет позаботиться самостоятельно, анализируя коллекцию rst.Fields (P.S. я добавил вывод заголовков в код).


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 06.03.2014, 17:06
 
Ответить
Сообщение
возможно ли написать такой запрос, чтобы значения одного исходного столбца "превратились" в столбцы результирующего?

Можно. Подобный запрос "звучит" примерно так:

[vba]
Код
TRANSFORM Sum(Продажи)
SELECT Город, Продукт
FROM Лист1
GROUP BY Город, Продукт
PIVOT [Тип магазина]
[/vba]
Не бойтесь, я сам это тоже на память не помню - это мне Мастер запросов в MS Access помог, там это называется "перекрестный запрос".

Соответственно, применительно к листу Excel это как-то так:

[vba]
Код
Sub selectData()
                      
         Dim rst As Object
         Set rst = CreateObject("ADODB.Recordset")
                      
         rst.Open _
         "TRANSFORM Sum(Продажи) " & _
         "SELECT Город, Продукт " & _
         "FROM [Лист1$A2:D23] " & _
         "GROUP BY Город, Продукт " & _
         "PIVOT [Тип магазина]" _
         , _
         "Provider=Microsoft.ACE.OLEDB.12.0;" & _
         "Data Source=" & ThisWorkbook.FullName & ";" & _
         "Extended Properties='Excel 12.0;HDR=Yes'"
                      
         [Лист1!G15].CopyFromRecordset rst
                            
         'ЗАГОЛОВКИ
         Dim i As Integer
         Dim arrName() As Variant
         ReDim Preserve arrName(0 To rst.Fields.Count - 1)
         For i = 0 To rst.Fields.Count - 1
             arrName(i) = rst.Fields(i).Name
         Next i
         With Range("G14").Resize(1, rst.Fields.Count)
             .Value = arrName
             .Font.Bold = True
         End With

End Sub
[/vba]
О заголовках результата надо будет позаботиться самостоятельно, анализируя коллекцию rst.Fields (P.S. я добавил вывод заголовков в код).

Автор - Gustav
Дата добавления - 06.03.2014 в 16:24
MerLen Дата: Пятница, 07.03.2014, 01:32 | Сообщение № 33
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Огромное спасибо! hands
 
Ответить
СообщениеОгромное спасибо! hands

Автор - MerLen
Дата добавления - 07.03.2014 в 01:32
ikki Дата: Вторник, 11.03.2014, 16:15 | Сообщение № 34
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
то ли лыжи у меня не едут, то ли какие-нить настройки ADO по дефолту...
короче, не работает у меня метод ToArray() из версии 0.5

и начинает работать, только если в коде метода перед строкой
[vba]
Код
Data = Me.Recordset.GetRows()
[/vba]
добавить такую:
[vba]
Код
Me.Recordset.MoveFirst
[/vba]

внимание, вопрос к знатокам: а нужна ли такая "смазка для лыж" или правильнее поправить что-нибудь где-нибудь в строке соединения или настройках?
дополнительные вопросы для получения суперприза: что и где?

спасибо за внимание.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщението ли лыжи у меня не едут, то ли какие-нить настройки ADO по дефолту...
короче, не работает у меня метод ToArray() из версии 0.5

и начинает работать, только если в коде метода перед строкой
[vba]
Код
Data = Me.Recordset.GetRows()
[/vba]
добавить такую:
[vba]
Код
Me.Recordset.MoveFirst
[/vba]

внимание, вопрос к знатокам: а нужна ли такая "смазка для лыж" или правильнее поправить что-нибудь где-нибудь в строке соединения или настройках?
дополнительные вопросы для получения суперприза: что и где?

спасибо за внимание.

Автор - ikki
Дата добавления - 11.03.2014 в 16:15
MerLen Дата: Четверг, 13.03.2014, 22:03 | Сообщение № 35
Группа: Пользователи
Ранг: Прохожий
Сообщений: 4
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Добрый день!
Подскажите пожалуйста, где можно найти "корень зла". Сделала файлик с использованием ADO. При тестировании на разных компьютерах, получилось, что на части комьютеров все работает отлично, а на части нет (ошибок не выводит, но и данных тоже). Судя по всему в Recordset - не попадают данные. Может в настройках Excel какой блокатор стоит?
 
Ответить
СообщениеДобрый день!
Подскажите пожалуйста, где можно найти "корень зла". Сделала файлик с использованием ADO. При тестировании на разных компьютерах, получилось, что на части комьютеров все работает отлично, а на части нет (ошибок не выводит, но и данных тоже). Судя по всему в Recordset - не попадают данные. Может в настройках Excel какой блокатор стоит?

Автор - MerLen
Дата добавления - 13.03.2014 в 22:03
nerv Дата: Пятница, 14.03.2014, 01:02 | Сообщение № 36
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

короче, не работает у меня метод ToArray() из версии 0.5

видимо потому, что уже как 10 месяцев на гитхабе лежит версия 0.7 =)

https://github.com/nervgh....ls#L122


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
короче, не работает у меня метод ToArray() из версии 0.5

видимо потому, что уже как 10 месяцев на гитхабе лежит версия 0.7 =)

https://github.com/nervgh....ls#L122

Автор - nerv
Дата добавления - 14.03.2014 в 01:02
ikki Дата: Суббота, 15.03.2014, 21:48 | Сообщение № 37
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
угум, спасибо, Саша.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеугум, спасибо, Саша.

Автор - ikki
Дата добавления - 15.03.2014 в 21:48
Gamma754 Дата: Среда, 09.04.2014, 21:34 | Сообщение № 38
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 2 ±
Замечаний: 0% ±

Excel 2007
Всем привет!

При использовании обсуждаемого класса на указанной на картинке таблице
с запросом на обновление вылезает ошибка 'В операции должен использоваться обновляемый запрос'.

(книга открыта для редактирования, макросы включены и т.п.)

Это значит:
а) у ADO нет права записи в книгу
б) ... ?

что в этой ситуации можно сделать?
селекты работают отлично.

Запрос на удаление выдает 'невозможно удаление записей из указанных таблиц'

Т.е. у ADO нет права изменять книгу.
Где это можно включить? Я не указал какой-то параметр ADO?

подскажите плз, кто знает! ))
К сообщению приложен файл: 6944328.png (37.7 Kb)


Сообщение отредактировал Gamma754 - Среда, 09.04.2014, 21:42
 
Ответить
СообщениеВсем привет!

При использовании обсуждаемого класса на указанной на картинке таблице
с запросом на обновление вылезает ошибка 'В операции должен использоваться обновляемый запрос'.

(книга открыта для редактирования, макросы включены и т.п.)

Это значит:
а) у ADO нет права записи в книгу
б) ... ?

что в этой ситуации можно сделать?
селекты работают отлично.

Запрос на удаление выдает 'невозможно удаление записей из указанных таблиц'

Т.е. у ADO нет права изменять книгу.
Где это можно включить? Я не указал какой-то параметр ADO?

подскажите плз, кто знает! ))

Автор - Gamma754
Дата добавления - 09.04.2014 в 21:34
ikki Дата: Среда, 09.04.2014, 22:32 | Сообщение № 39
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
В Excel нельзя удалять записи (с помощью ADO)
обсуждалось здесь: http://www.planetaexcel.ru/forum....e388388
там же есть ссылка на первоисточник.


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
СообщениеВ Excel нельзя удалять записи (с помощью ADO)
обсуждалось здесь: http://www.planetaexcel.ru/forum....e388388
там же есть ссылка на первоисточник.

Автор - ikki
Дата добавления - 09.04.2014 в 22:32
anvg Дата: Четверг, 10.04.2014, 07:03 | Сообщение № 40
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Цитата
с запросом на обновление вылезает ошибка

Такого можно добиться при обновлении, если, например, подключение у вас только на чтение. Маловато информации для точного ответа.
Для этого случая проверьте Connection.Mode - нужно, чтобы было 16 или 3 (можно прописать в строке подключения Mode=16).
P. S. А зачем вам синтаксис для таблицы [test1$A:C]? Вполне же достаточно просто [test1$] или у вас там ещё какие-то данные сбоку?


Сообщение отредактировал anvg - Четверг, 10.04.2014, 07:03
 
Ответить
Сообщение
Цитата
с запросом на обновление вылезает ошибка

Такого можно добиться при обновлении, если, например, подключение у вас только на чтение. Маловато информации для точного ответа.
Для этого случая проверьте Connection.Mode - нужно, чтобы было 16 или 3 (можно прописать в строке подключения Mode=16).
P. S. А зачем вам синтаксис для таблицы [test1$A:C]? Вполне же достаточно просто [test1$] или у вас там ещё какие-то данные сбоку?

Автор - anvg
Дата добавления - 10.04.2014 в 07:03
Мир MS Excel » Вопросы и решения » Готовые решения » ADO - класс для работы с данными Excel при помощи SQL
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!