Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) ODBCRecordSet + Excel (число прочтений - 24996 )
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
ODBCRecordSet + Excel
15. Ноября 2006 :: 10:20
Печать  
Блин, вы прикиньте, я совершил прорыв.
Впервые за все это время и загрузил файл Excel через ODBCRecordSet - и мне это понравилось.

А ведь еще можно делать наоборот - экспортировать в Excel через ODBCRecordSet.
Обалдеть. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #1 - 15. Ноября 2006 :: 10:47
Печать  
в свое время я подобным образом радовался тому, что подключил Excel через OLE - оказалось, что для функций запроса к данным (по крайней мере) - это далеко не самый выдающийся способ...  Подмигивание
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #2 - 15. Ноября 2006 :: 11:04
Печать  
драйвер какой используешь?
я юзаю штатный Driver={Microsoft Excel Driver (*.xls)};
бывают глюки с типизацией и вообще случается (редко) необяснимое поведение.
и вообще в свое время не смог найти хоть какое-то описание этого драйвера
  

1&&2&&3
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #3 - 15. Ноября 2006 :: 11:18
Печать  
А можно краткую инструкцию по подключению?
Или ссылку на подобную инструкцию?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #4 - 15. Ноября 2006 :: 11:30
Печать  
trad писал(а) 15. Ноября 2006 :: 11:04:
драйвер какой используешь?
я юзаю штатный Driver={Microsoft Excel Driver (*.xls)};
бывают глюки с типизацией и вообще случается (редко) необяснимое поведение.
и вообще в свое время не смог найти хоть какое-то описание этого драйвера

Все то же самое;
Типизацию не использую сейчас - у меня просто обработка каталогов, текст и числа, никаких представлений.

artbear
У меня все очень просто пока:
Код
Выбрать все
	_база =СоздатьОбъект("ODBCDatabase");
	Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда
		Предупреждение("Ошибка открытия файла", 60);
		Возврат;
	КонецЕсли;

	_рс =СоздатьОбъект("ODBCRecordSet");
	_рс.УстБД(_база);

	_стр ="
	|select *
	|from ИмяТаблицы
	|";

	_ит =СоздатьОбъект("ИндексированнаяТаблица");
	_рс.ВыполнитьИнструкцию(_стр, _ит);
 



И в Excele нужно вставить имена областей, к которым будешь обращаться (имена таблиц).
Верхнюю строчку можно использовать как заголовки колонок.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #5 - 15. Ноября 2006 :: 11:40
Печать  
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #6 - 15. Ноября 2006 :: 11:47
Печать  
artbear писал(а) 15. Ноября 2006 :: 11:40:
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?

http://www.connectionstrings.com/
думаю на этом сайте ты найдешь ответ на свой вопрос, и не только по Excel...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ODBCRecordSet + Excel
Ответ #7 - 15. Ноября 2006 :: 12:30
Печать  
Цитата:
artbear писал(а) 15. Ноября 2006 :: 11:40:
>>Если _база.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" +СокрЛП(_имя)) =0 Тогда

Имя это что? Путь файла или имя DSN ?

http://www.connectionstrings.com/
думаю на этом сайте ты найдешь ответ на свой вопрос, и не только по Excel...

О, Славко, это надо в FAQ!
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #8 - 15. Ноября 2006 :: 14:01
Печать  
Вроде это уже было в Факе Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #9 - 15. Ноября 2006 :: 14:39
Печать  
DrACe писал(а) 15. Ноября 2006 :: 10:47:
в свое время я подобным образом радовался тому, что подключил Excel через OLE - оказалось, что для функций запроса к данным (по крайней мере) - это далеко не самый выдающийся способ...  Подмигивание


Адназначна! Улыбка

Вот, с болью в сердце выдираю из контекста:

Код
Выбрать все
    With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)
        .Connection = Array(Array( _
        "ODBC;DRIVER=SQL Server;SERVER=МойSERVER;UID=;APP=Microsoft Office 2003;WSID=;Network=DBMSSOCN;Address=МойSERVER,1433;Trusted_" _
        ), Array("Connection=Yes"))
        .CommandType = xlCmdSql
        .CommandText = _
        "SELECT ИмяТипаТаблицы.Реферер, ИсчоОднаТаблица.ТоргМарка, Sum(ОпятьБлинИмяТаблицы.ВыхСумма) AS 'Вых', Sum(ОпятьБлинИмяТаблицы.КолВо) AS 'Кол'" _
         & Chr(13) & "" & Chr(10) & "FROM ИмяТипаБазы.dbo.ИмяТипаТаблицы ИмяТипаТаблицы, ИмяТипаБазы.dbo.ОпятьБлинИмяТаблицы " _
         & "ОпятьБлинИмяТаблицы, ИмяТипаБазы.dbo.ИсчоОднаТаблица ИсчоОднаТаблица" & Chr(13) & "" & Chr(10) &  _
         "WHERE ОпятьБлинИмяТаблицы.ПолеСвязиКлиент = ИмяТипаТаблицы.ПолеСвязиКлиент AND ОпятьБлинИмяТаблицы.ПолеСвязиТовар = ИсчоОднаТаблица.ПолеСвязиТовар" _
         & Chr(13) & "" & Chr(10) & "GROUP BY ИмяТипаТаблицы.Реферер, ИсчоОднаТаблица.ТоргМарка"
        .CreatePivotTable TableDestination:="", TableName:="СводнаяТаблица1", _
        DefaultVersion:=xlPivotTableVersion10
    End With
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("СводнаяТаблица1").AddFields RowFields:=Array( _
        "Реферер", "Данные"), ColumnFields:="ТоргМарка"
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Вых")
        .Orientation = xlDataField
        .Caption = "СумВых"
        .Position = 1
        .NumberFormat = "# ##0"
    End With
    With ActiveSheet.PivotTables("СводнаяТаблица1").PivotFields("Кол")
        .Orientation = xlDataField
        .Caption = "СумКол"
        .NumberFormat = "# ##0"
    End With 

  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
HeiHeShang
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 101
Зарегистрирован: 01. Августа 2006
Re: ODBCRecordSet + Excel
Ответ #10 - 18. Ноября 2006 :: 05:30
Печать  
А кто подскажет как вставить строки в Excel, пытаюсь это сделать запросом
INSERT INTO [Лист1$] SELECT CODE,DESCR FROM dbo.ИП.SC33
выдает ошибку
"State 42000, native 4294965487, message [Microsoft][ODBC Excel Driver] Cannot update.  Database or object is read-only."
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #11 - 18. Ноября 2006 :: 08:04
Печать  
[quote author=kms link=1163586032/0#0 date=1163586032]Блин, вы прикиньте, я совершил прорыв.
Впервые за все это время и загрузил файл Excel через ODBCRecordSet - и мне это понравилось.

А ведь еще можно делать наоборот - экспортировать в Excel через ODBCRecordSet.
Обалдеть. :)
[/quote]

Мало того, в запросе можно джойнить разные файлы, обращаясь к таблице таким образом:
[code]SELECT * FROM `\\tss\share\data`.[Material$] Material[/code]
Но подключение должно быть . [code]"Driver={Microsoft Excel Driver (*.xls)};DriverId=790;FileUsage=0;Dbq=" + КаталогИБ() + "Siemens;DefaultDir=" + КаталогИБ() + "Siemens\;ReadOnly=1;"[/code]
;ReadOnly = 0 позволит апдейтить таблицы.
;HDR=No Позволит обращаться к колонкам как F1, F2, F3 и т.д.
[hr]

Если имя таблицы имеет пробел или специальный символ, то надо обращаться так [Таблица 1$]
[hr]

А ты попробуй олю, там еще шустрее работает :)
Только до сих пор не решена проблема [url]http://itland.ru/forum//index.php?showtopic=15469&hl=ole&st=15[/url]
Но как там и написано, для первого листа это решается SELECT * FROM [A:FF], т.е. задаем заведомо больший диапазон. Драйвер все равно ограничит выборку реальными данными.

Подключение [code]OLEDBData = СоздатьОбъект("OLEDBData");
OLEDBData.Соединение("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Каталог + ИмяФайла + ";Extended Properties=""Excel 8.0;HDR=No""");
Command = OLEDBData.СоздатьКоманду();[/code]
[hr]

Ложка дегтя. Драйвер САМ определяет тип колонки по первым 15 строкам (значение правится в реестре). И если у тебя сперва идут цифры, то дальнейший текст в выборке исчезнет. Решение проблемы я так и не нашел. И сей факт накладывает большие ограничения на использование запросов к ехелю :(
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #12 - 18. Ноября 2006 :: 08:59
Печать  
[quote author=Arta link=1163586032/0#11 date=1163837043]Ложка дегтя. Драйвер САМ определяет тип колонки по первым 15 строкам (значение правится в реестре). И если у тебя сперва идут цифры, то дальнейший текст в выборке исчезнет. Решение проблемы я так и не нашел. И сей факт накладывает большие ограничения на использование запросов к ехелю :([/quote]


Элементарно, Ватсон! ©

[code][HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
"TypeGuessRows"=dword:00000008[/code]
Ставишь сюда, сколько ты хочешь строк на угадывание типа колонки - и тащишься. Впрочем, больше 16 ставить почему-то нельзя, поэтому ставишь ноль и тогда анализируется весь набор данных.


ЗЫЖ Вот, нашел еще описание непосредственно на мелкософте:
[url]http://support.microsoft.com/kb/189897/EN-US/[/url]
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #13 - 18. Ноября 2006 :: 09:02
Печать  
И... не срабатывет Печаль
Я уже это проходил Печаль

По крайней мере Win2003 + Office 2003
  
Наверх
 
IP записан
 
Quan
1c++ donor
1c++ power user
Отсутствует


I'm old, bald and ugly.

Сообщений: 273
Местоположение: Новосибирск -- Москва
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: ODBCRecordSet + Excel
Ответ #14 - 18. Ноября 2006 :: 09:22
Печать  
Arta писал(а) 18. Ноября 2006 :: 09:02:
И... не срабатывет Печаль
Я уже это проходил Печаль

По крайней мере Win2003 + Office 2003


Проверь еще что в той же ветке реестра ключик ImportMixedTypes=Text

А вобще-то все это вроде можно в коннэкшен стринг задавать явно, в Extended Properties.
Что-то типа: ImportMixedTypes=Text; TypeGuessRows=0;

Но близко я с этим не сталкивался, пошарь сам в сетях-форумах.

Да, и еще есть такой параметр как IMEX. Чего он делает и какой по умолчанию - убей, не знаю. Но его тоже можно пихать в Extended Properties, и при каких-то значениях все должно нормально работать. Но при каких - точно не скажу. Попробуй 1 и 100. Если не поможет - опять же, ищи в сетях-форумах.
  

А для тех, кто не хотел учить SQL, господь сотворил курсоры
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать