|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
Доброго времени суток! Вопрос в следующем: Как выбрать данные из того диапазона, который получили из Excel? Или просто с листа... Вариант первый - из диапазона: Код: 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.
Отрабатывает и содержит набор данных! НО как теперь к нему применить SELECT? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Получаю TypeMismatch. Второй вариант - с листа: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Тогда ошибка: автор--------------------------- Microsoft Visual Basic --------------------------- Run-time error '-2147217904 (80040e10)': [Microsoft][Драйвер ODBC Excel] Слишком мало параметров. Требуется 1. --------------------------- ОК Справка --------------------------- Или еще такой вариант: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Тогда ошибка: автор--------------------------- Microsoft Visual Basic --------------------------- Run-time error '-2147217904 (80040e10)': Отсутствует значение для одного или нескольких требуемых параметров. --------------------------- ОК Справка --------------------------- Может хоть какой-то из вариантов добить? Мучаю полдня уже, прошу помощи. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 10:27 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
второй вариант можно добить, скорее всего поля не так называются, не field1, field2... Надо сделать SELECT * и посмотреть, как они на самом деле называются, если есть сомнения. Если хотите помощи, выложите файл с тестовыми данными и минимумом кода, я поправлю ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 11:20 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
1) К именованному диапазону можно обратиться прямо в селекте (SELECT * FROM [Esk]), так что не надо его предварительно открывать рекордсетом. 2) Если вы используете для подключения OLE DB и параметр HDR=Yes, то обращаться к полям нужно по именам, оказавшимся в первой строке диапазона-источника. Можете выставить HDR=No, тогда имена полей будут F1, F2, F3 и т.д. Не забывайте, что при использовании параметра IMEX=1 все данные преобразуются в текст! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 16:24 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
AndreTMпри использовании параметра IMEX=1 все данные преобразуются в текст!Если быть точным, то это относится к так называемым "смешанным" данным. Когда в одном столбце присутствуют записи с разными типами (текст, числа, даты) - то при считывании данных весь столбец преобразуется в текст. Если же данные однотипны - то они остаются так, как были. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 17:46 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
Shocker.Pro, у меня в документе поля как в таблице, это для форума ерунду написала, ошибка та же... Может вся проблема в том, что я код в Wordе пишу? Код: 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.
автор--------------------------- Microsoft Visual Basic --------------------------- Run-time error '-2147217904 (80040e10)': [Microsoft][Драйвер ODBC Excel] Слишком мало параметров. Требуется 1. --------------------------- ОК Справка --------------------------- ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2013, 06:38 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
Katsy, Ошибка "Слишком мало параметров" - это обычно неправильное именование полей. Вот скажите мне, есть у вас поле [dop_office]? Число записей не обязательно искать циклом, достаточно Код: vbnet 1.
Не могли бы вы пояснить, зачем вам "GROUP BY", если в списке отбираемых полей нет групповых операций? Кроме того, если вы на листе-источнике удаляете данные, то не просто стирайте содержимое ячеек, а именно удаляйте строки. В вашем примере - рекордсет содержит 971 запись, видимо, где-то на листе есть непустая ячейка. Другой способ избежать такого - использовать фразу WHERE в запросе, где указать условие "непустоты" записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2013, 07:54 |
|
Выборка данных из диапазона или листа в Excel (VBA) с помощью ADODB.RecordSet
|
|||
---|---|---|---|
#18+
AndreTM, Спасибо! Поле действительно не так называлось... У меня по разным организациям различные данные, мне необходимо сначала из этих 971 записи отобрать список организаций, потом уже выбирать конкретные ФИО и т.п. списком для каждой организации. Вообще, это всё делалось иначе, данные считывались из базы, но там выборка бралась за сутки-трое, максимум пять. Тут необходимо за месяц, поэтому запрос выполняется по часу, приходится складывать в Excel как в буфер, потом из него читать. В принципе, по моей выборке, не может возникнуть пустая запись, но спасибо за совет! Сейчас буду пробовать отбирать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2013, 07:12 |
|
|
start [/forum/topic.php?fid=60&msg=38293435&tid=2156917]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 265ms |
total: | 396ms |
0 / 0 |