|
|
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Столкнулся с такой проблемой: Беру данные из закрытой книги Excel: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Rows to Scan: Excel does not provide ADO with detailed schema information about the data it contains, as a relational database would. Therefore, the driver must scan through at least a few rows of the existing data in order to make an educated guess at the data type of each column. The default for "Rows to Scan" is eight (8) rows. You can specify an integer value from one (1) to sixteen (16) rows, or you can specify zero (0) to scan all existing rows. This is done by adding the optional MaxScanRows= setting to the connection string, or by changing the Rows to Scan setting in the DSN configuration dialog box. How To Use ADO with Excel Data from Visual Basic or VBA добавив в начале талбици строку с непустыми значениями в каждом поле, проблема решилась (пока что так кажется...). НО! Самое интересное, что в СТАРОМ варианте ВСЕ ДАННЫЕ выгружались абсолютно корректно на компьютерах с Dual-Core, а на Pentium 4 наблюдалась описанная проблема. Каких либо иных закономерностей связанных с установленным ПО выявить не смог (версии и SP Excel'я и ОС) Потому решение "методом тыка" настораживает. Есть у кого-то опыт работы с подобными проблемами и пути корректного решения? Либо какие-то другие дельные соображения? PS: замечания о том, что книги Excel не стоит использовать как БД (и т.п. высказывания), в данной теме не будут рассматриваться как дельные. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 12:38 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
newnoober Обратив внимание, что пропущены строковые данные в столбцах, а числовые остались, на первый взгляд, причина :Так и есть. Видимо вам надо импортировать этот столбец как текст - а он воспринимается при импорте как числовой - и текстовые данные пропускаются. Обычно вроде помогает - делать 1ю строчку текстовой (можно добавлением одинарной кавычки перед числом) newnoober добавив в начале талбици строку с непустыми значениями в каждом поле, проблема решилась (пока что так кажется...). ИМХО не добавлением непустых, а именно непустых текстовых . newnoober НО! Самое интересное, что в СТАРОМ варианте ВСЕ ДАННЫЕ выгружались абсолютно корректно на компьютерах с Dual-Core, а на Pentium 4 наблюдалась описанная проблема. Каких либо иных закономерностей связанных с установленным ПО выявить не смог (версии и SP Excel'я и ОС) Скорее всего разные MDAC проверьте Код: plaintext 1. на старом наверное более ранняя - судя по ссылке меняли начиная с 2.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 12:52 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
PS qwrqwr Обычно вроде помогает - делать 1ю строчку текстовой Перечитал сам себя. Не вроде, а должно помочь 100% - т.к. у вас там стоит IMEX=1 "IMEX=1;" tells the driver to always read "intermixed" (numbers, dates, strings etc) data columns as text. Благодаря ему - если хотя бы одна из верхних 25-ти строк будет текстовая - весь столбец воспримется как текст. 25 строк - значение по умолчанию - сидят здесь: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] "TypeGuessRows" (REG_DWORD)Их менять можно, но ни к чему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 13:30 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
qwrqwr newnoober добавив в начале талбици строку с непустыми значениями в каждом поле, проблема решилась (пока что так кажется...). ИМХО не добавлением непустых, а именно непустых текстовых . конечно же Вы правы - имелось ввиду именно текстовых. выразился не корректно qwrqwr Скорее всего разные MDAC проверьте Set conn = CreateObject("ADODB.Connection") MsgBox conn.Version на новом наверное 2.8 на старом наверное более ранняя - судя по ссылке меняли начиная с 2.5 conn.Version везде одинаковая 2.8. Так что это не она. А жаль... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 17:22 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
qwrqwr Код: plaintext 1. на старом наверное более ранняя - судя по ссылке меняли начиная с 2.5Версия ADO не имеет значения. Смотреть надо версию драйвера который указан в строке подключения как "Provider". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 17:50 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
White Owl, ну это мои домыслы были... просто исходя из авторКаких либо иных закономерностей связанных с установленным ПО выявить не смог (версии и SP Excel'я и ОС)для меня следовало, что Jet 4.0 на всех машинах. 2 newnoober : в любом случае, текстовая первая строка + "IMEX=1" должны сработать везде корректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 17:59 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
qwrqwrWhite Owl, ну это мои домыслы были... просто исходя из авторКаких либо иных закономерностей связанных с установленным ПО выявить не смог (версии и SP Excel'я и ОС)для меня следовало, что Jet 4.0 на всех машинах.Кроме собственно ServicePack микрософты выпускают еще и "мелкие" патчи... Смотреть надо на номер билда dll. Само ADO это всего-лишь враппер, оно никак не трогает базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2010, 18:28 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
qwrqwrв любом случае, текстовая первая строка + "IMEX=1" должны сработать везде корректно.это я уже понял. Но важна причина разного результата т.к. данным способом извлекается большое количество различных данных. Везде прописать первую строку текстом будет крайне сложно(т.к.повлечет множество корректировок), и не хотелось бы обнаружыть где ещё макрос дал збой, когда проект закончит тестироваться... White OwlСмотреть надо версию драйвера который указан в строке подключения как "Provider".White OwlСмотреть надо на номер билда dll". В строке подключения как "Provider" указано то же, что и в первом посте: "Provider=Microsoft.Jet.OLEDB.4.0;" А вот версии длл надо бедт проверить... правда, пока не знаю каких именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2010, 00:14 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Это фича такая. Еще с ODBC такое шло. Там хоть на MAXSCANROWS реагировало - можно было заставить сканить весь дипазон (=0). У АДО привязано к настройкам то ли из реестра, то ли насмерть где-то забиты. На MAXSCANROWS не реагирует. давно было - уже утерял подробности Попортила много крови когда-то. Так как случилось не ожиданно :) Дравейр пытается сам определить тип данных по первым 8-25 (вроде. точно не помню.). если в числовом поле 8 строк пусто, то поле считается текстом и все числа тю-тю. Почему число не может быть текстом - история умалчивает. Версия драйвера/патча ADO роли не играет. Выход - формировать для числовых полей изначально 0 либо насильно шаблон (где текст, где 0) из 8-25 строк либо заменять NULLы на 0. Можно шаблон размещать внизу, и в запросе указывать нумерацию с низу (не А1:B100,а B100:A1) - хавает где-то давно я тут уже писал про эту особенность. а может и не писал :) з.ы. да и адо-запросы к ОТКРЫТОЙ книге вызывают утечки памяти. Описано на сайте мелких. Но автор видимо знает уже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2010, 17:31 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Senin ViktorМожно шаблон размещать внизу, и в запросе указывать нумерацию с низу (не А1:B100,а B100:A1) - хаваетКласс, до такого сам не додумаешься, а в книжках не напишут, спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2010, 09:22 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Senin Viktor... Версия драйвера/патча ADO роли не играет. ... з.ы. да и адо-запросы к ОТКРЫТОЙ книге вызывают утечки памяти. Описано на сайте мелких. Но автор видимо знает уже Если версия драйвера/патча ADO роли не играет, то что может быть причиной АБСОЛЮТНО корректной работы того же кода на тех же данных на других машинах? Есть какие-то соображения по ЭТОМУ поводу? PS: про утечки памяти знаем, даже пробовали :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2010, 12:20 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
newnoober Если версия драйвера/патча ADO роли не играет, то что может быть причиной АБСОЛЮТНО корректной работы того же кода на тех же данных на других машинах? Есть какие-то соображения по ЭТОМУ поводу? Точно ли данные (в цифровом поле) одинаковы в первых (например,8) строках екцеля? Так как этой "фичей" я уже лет 6 наверное пользуюсь, возможно, в более древние времена :) MDACи были более правильные. Да и драйвер хоть и от ADO, а синтаксис и ограничение селектов от Microsoft Query. А с чем питается эта микрософтовская зверушка - х.з. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2010, 15:05 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Senin ViktorДа и драйвер хоть и от ADOНе бывает драйверов "от ADO" . ADO это враппер над OLEDB драйверами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2010, 20:35 |
|
||
|
ADO к закрытой книге Excel "местами" возвращает Null
|
|||
|---|---|---|---|
|
#18+
Senin ViktorТочно ли данные (в цифровом поле) одинаковы в первых (например,8) строках екцеля? Ходил и тестил на разных машинах. Файл с обработчиком и файл с источником лежат в сети. За время теста никаких изменений с данными/кодом не производил. Результатирующий рекордсет на разных машинах разный 100% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2010, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=61&fpage=173&tid=2178577]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 371ms |

| 0 / 0 |
