[wlx] odbc-wlx - просмотр Access, Excel, CSV файлов
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next  :| |:
Total Commander -> Плагины Total Commander

#1: [wlx] odbc-wlx - просмотр Access, Excel, CSV файлов Author: little-brother PostPosted: Sat Oct 02, 2021 15:18
    —
Плагин для просмотра файлов Access (*.mdb, *.accdb), Excel (*.xls, *.xlsx, *.xlsb), CSV (*.csv) и Источников данных (*.dsn). Работает через ODBC. 64-битная версия требует установленного Microsoft Access Database Engine 2010 (или выше), содержащего ODBC драйвера.
Вероятно можно просматривать MSSQL, Postgres и другие базы, если установлен соответствующий ODBC драйвер, путем создания файлового DSN в Администраторе источников данных ODBC (odbcad32) и открытия уже его.



Страница проекта - https://github.com/little-brother/odbc-wlx
Скачать - https://github.com/little-brother/odbc-wlx/releases/latest/download/odbc-wlx.zip
Настройки и другое в Wiki - https://github.com/little-brother/odbc-wlx/wiki

Особенности
Ctrl + Колесо мыши - изменение шрифта
TAB - переход на следующий элемент
Ctrl + TAB - переход на предыдущий элемент


Last edited by little-brother on Wed Oct 27, 2021 22:21; edited 6 times in total

#2:  Author: Destiny PostPosted: Tue Oct 26, 2021 15:38
    —
а как понять - что он работает и когда НЕ работает - как понять - в ЧЕМ ошибка? Хотя бы какие-то простенькие примеры файлов можно же было положить в архив. И в ридми дать ссылки на рекомендованные места для скачивания этого нового компонента. И что значит "путем создания файлового DSN в Администраторе источников данных ODBC (odbcad32)"? Т.е. грубо говоря - где-то будет постоянно что-то прописываться? Очистка-то хоть предусмотрена после просмотра и закрытия листера?

Сейчас, поставив плагин, настроив его быть первым в списке плагинов (т.к. еще есть ulister) - я получаю диалог "Can't connect to database". Но при этом нет никакой кнопки проверки вообще состояния всех компонентов, что включены в работу плагина. Может я не поставил Microsoft Access Database Engine 2010 (или выше), может оно поставилось косо, может файл в неверном формате? Мало инфы в этом окошке.
Как минимум - хорошо бы даже тут - в топике обсуждения выложить файлы, на которых проверялось поведение сабжа и выложить скрины того - КАК это выглядит при правильной установке и настройке. Включая возможно и вид Администратора источников данных ODBC (odbcad32). Может и там что-то надо настроить/включить, прежде чем пользоваться плагином???

P.S. и почему же все же вообще надо устанавливать Microsoft Access Database Engine 2010 (или выше), если по идее в винде я сразу вижу наличие в разделе Администрирования Источники данных ODBC и 64 и 32 битных версий. Они что - не являются тем, чем является Microsoft Access Database Engine 2010 (или выше)???
Т.е. я вот не в курсе - а КАК проверить, что поставилось то, что надо и поставилось туда - куда надо...

А! и ещё - ориентировочно - для файла хотя бы csv на 2000 строк - с какой скоростью ожидается открытие сабжем полностью заполненного инфой окна? А то попробовал схожий плаг, ток заточенный на csv - и там под 6\7 секунд надо ждать, что весьма и странно и долго.

#3:  Author: little-brother PostPosted: Tue Oct 26, 2021 18:42
    —
Хорошие вопросы, постараюсь описать подробно.

Плагин работает через ODBC драйвера, представляющие собой dll. Поскольку 32-битное приложение не может использовать 64-битные dll и наоборот, то 32 и 64 драйвера - это разные наборы. Наличие драйверов можно проверить из ODBC-администратора на вкладке Драйверы:
Code:

C:\Windows\odbcad32.exe - для 64-битных
C:\Windows\SysWOW64\odbcad32.exe - для 32-битных

При этом DSN созданные для 32-битной версии будут видны в 64 и наоборот, только вот через них подключиться будет нельзя.

Из коробки Windows x64 имеет 32-битные драйвера для CSV, Excel, Access и MSSQL, и только один 64-битный для MSSQL, поэтому и требуется установка пакета Microsoft Access Database Engine 2010, содержащего 64-битные драйвера. После его установки можно на вкладке Драйвера в в odbcad32 будут добавлены для CSV, Excel и Access.

Data Source Name (DSN) - это по сути описание, как подключаться к базе/файлу. По нему система генерирует строку подключения, но её можно создавать и самостоятельно. Пример строки
Code:

Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\MyExcel.xls;DefaultDir=c:\mypath;


При просмотре не dsn-файла, а к примеру xls, плагин генерирует эту строку самостоятельно. При просмотре dsn файла он читает информацию из этого файла и также генерирует её. Никакой дополнительной информации в списки DSN разумеется не вносится.

Quote:
что значит "путем создания файлового DSN

В ODBC администраторе вы можете создать Файловый DSN (для этого есть отдельная вкладка) - это обычный ini-файл, который можно и самому написать, но администратор не даст вам сделать в нем ошибки, ну и не надо будет искать какие поля заполнять. Полученный dsn-файл можно уже открыть плагином.

Если плагин выдает сообщение, что не может присоединиться, то значит что-то пошло не так. ODBC драйвера не дают какого то внятного описания, да и сам интерфейс весьма путанный. Так что, увы, если не открылся, значит не открылся Very Happy

Скорость работы через ODBC в несколько раз хуже, чем при работе напрямую через родные драйверы или прямо с файлов, в случае с CSV, поскольку после извлечения данных выполняется их преобразование к единому ODBC-формату. Для CSV для файла скорость ODBC меньше где то 4+ раз, но 2000 строк должно открываться быстрее 5с. Так на моем Ryzen2200g файл в 40 000 строк открывается ~3с.

Для CSV данный плагин не слишком удачный выбор, поскольку скорее всего файл в кодировке utf-8, а потому для корректного отображения придется добавлять описание в schema.ini, т.е. требуется отдельная работа. Возможно напишу отдельный плагин для csv.

#4:  Author: Destiny PostPosted: Tue Oct 26, 2021 18:56
    —
Quote:
Если плагин выдает сообщение, что не может присоединиться, то значит что-то пошло не так. ODBC драйвера не дают какого то внятного описания, да и сам интерфейс весьма путанный. Так что, увы, если не открылся, значит не открылся Very Happy

так может стоит сделать хотя бы в первых версиях что-то наподобие полного лога действий? Хоть что-то я да смогу проверить/протестить по другому.
Может эта DNS запись создалась в кривом виде.

хотя.... может я и понял в чем дело...
на вкладке Драйвера в odbcad32.exe нет ничего кроме SQL (((((
а ведь я поставил требуемое... Короче вопрос/предложение осталось тем же - надо в плагине реализовать в первую очередь лог действий и контроль того, что нужные драйвера установились. Хотя бы в виде открытия этого odbcad32.exe и вывода сообщения о том - ЧТО и ГДЕ надо глазками проверить, прежде чем использовать плагин дальше.

И да csv у меня все utf-8. И практически ради просмотра их я и поставил плагин, т.к. имеющиеся другие плагины все тормозят до дикому у меня даже на 1000 записей. Только открытие листером тотала в чистом текстовом виде мгновенно даже для 100000 шт .записей.

Добавлено спустя 11 минут:

Ну а как поставить этот пакет Microsoft Access Database Engine 2016 - не понятно. Во-первых, ставиться только 32 битная его версия, т.к. он привязывается к битности установленного офиса. А он, конечно же 32 битный. По итогу получается все равно полный бардак относительно того - в какой битности какой драйвер будет работать и в какой битной системе...


Last edited by Destiny on Tue Oct 26, 2021 19:22; edited 1 time in total

#5:  Author: little-brother PostPosted: Tue Oct 26, 2021 19:12
    —
Quote:
наподобие полного лога действий

Дело в том, что там по сути нет никакого лога. Просто выполняется попытка подключения к ODBC, и она возвращает либо Да, либо Нет. Описания ошибки то ж не будет. Скорее всего проблема в том, что нет драйверов нужной битности. Убедитесь, что вы установили 64-битный пакет драйверов.

Quote:
csv у меня все utf-8

В Wiki есть пример, что надо написать в schema.ini для utf8.

Quote:
имеющиеся другие плагины все тормозят до дикому у меня даже на 1000 записей

Весьма странно. Парсинг CSV не сильно сложен.
При просмотре CSV через Lister, то там трюк с тем, что читается с диска не весь файл, а только кусок отображаемый на экране, потому и просмотр моментальный. Для CSV также сделать не получится, т.к. просканировать переносы строк и еще значения в кавычках обработать, т.е. требуется полное чтение файла, хотя бы до отображаемого места. Самое простое это прочитать все в память и это не должно тормозить.

Quote:
Во-первых, ставиться только 32 битная его версия, т.к. он привязывается к битности установленного офиса. А он, конечно же 32 битный. По итогу получается все равно полный бардак относительно того - в какой битности какой драйвер будет работать

Да тут все понятно. Если офис у вас 32-битный, то и драйвера к нему 32-битные, а потому и плагин и TC то ж должны быть 32 битные.
Мне для отладки под 64бита пришлось отдельную ОС поставить, т.к. то ж 32-битный офис 2003 использую.


P.S. Уговорили - напишу для csv отдельный Smile Просто мне казалось уже есть куча других плагинов.

#6:  Author: Destiny PostPosted: Tue Oct 26, 2021 19:39
    —
Quote:
Да тут все понятно. Если офис у вас 32-битный, то и драйвера к нему 32-битные, а потому и плагин и TC то ж должны быть 32 битные.
Мне для отладки под 64бита пришлось отдельную ОС поставить, т.к. то ж 32-битный офис 2003 использую.

стоп, вы поняли - я потерялся еще дальше))))))))))
У меня 64 бит.винда И 32 бит.Офис 2016. И 64 Тотал и ваш плагин, который и 32 и в 64 битной версиях представлен.
Теперь я должен сперва поставить пакет Microsoft Access Database Engine (MADE). Я ставлю 32 бит. версию, т.к. он привязан к офису. И по результатам - ГДЕ я должен увидеть, что всё встало как надо???
в odbcad32.exe на вкладке Драйвера только SQL. Значит ничего не поставилось??? И как это поправить?
ТАК, сперва написал, а потом понял, что запускать надо было C:\Windows\SysWOW64\odbcad32.exe в моем случае!!!
этот ехе показывает 32 битные драйвера и да, кроме SQL "появились" и другие. Хотя наверное правильно говорить, что они не то чтобы появились - они там и были изначально, просто я не ТОТ odbcad32.exe для контроля запускал. НО! тогда выходит я не правильно понял рекомендации про поставить этот MADE пакет. Он получается нужен только тогда, когда И винда 64 И Офис 64 И тотал 64 И сабж 64 используются. Вот тогда выходит, что нужных драйверов 64 бит нет изначально в системе и их надо ДОставить вручную. НО!!! для пользователей сочетания И винда 64 'А вот Офис 32' И тотал 64 И сабж 64 - ЧТО делать? Сабж, будучи 64 битным и запущенным в 64 битном Тотале не сможет загрузить 32 битные драйвера. А 64 битные дрова ему я никак не установлю. И? Это сочетание ПО в мусор что ли скидывать? Или типа спецом загружать Тотал 32, чтобы открыть csv файл? Ибо ток тогда 32 битный сабж подгрузит 32 битные драйвера, что уже стояли в системе, установленные вместе с 2016 офисом 32 битным... Так что ли???

Добавлено спустя 24 минуты:

Так, я проверил запуск в винде 64 с офисом 32 тотал 32 + плагин 32 - старт xls файла с почти 1500 записей занял 2 секунды по сравнению с ulister'овскими 5. Это круто и ооочень полезно. Т.е. это очень крутой бонус. НО без ложки дегтя никак... В файле есть только один рабочий лист. ОТЧЕТ. А ваш плагин слева показывает две записи ОТЧЕТ$ и ОТЧЕТ$_. И разумеется второй "отчет" при попытке его открыть выдает ошибку. И что это за "довесок"?


НО, в целом хреново, что для этого приходится открывать отдельно ТОТАЛ 32 бита... Неужели нет 64 битных дров ODBC, не привязанных к 64 битному офису???

Добавлено спустя 3 минуты:

Quote:
Просто мне казалось уже есть куча других плагинов.
куча-то кучей, но вот быстрых.. что-то я не нашел. Ну, или подскажите, что ВЫ видели/пользовали и вроде как быстро работало....
т.к. совсем уж с нуля брать и писать еще один плагин четко под CSV - наверное слишком жёстковато))))

#7:  Author: little-brother PostPosted: Tue Oct 26, 2021 20:39
    —
Quote:
Так что ли???

Верно. Мне не очень понятно ограничение, исходя из которого MADE не дает поставить произвольную бинарность драйверов. Вероятно если сначала поставить этот пакет, а потом уже 32битный офис, то все будет работать как надо, но это так себе решение.

Quote:
две записи ОТЧЕТ$ и ОТЧЕТ$_

Список страниц строится через ODBC и помимо названия таблиц содержит дополнительную информацию, которая из-за того, что плагин универсальный просто отбрасывается. Вторая таблица скорее всего служебная.
Можете пример файла мне на почту lb-im@ya.ru кинуть? (можно пустой, но надо чтобы было именно две таблицы в списке) Попробую пофиксить.

Quote:
писать еще один плагин четко под CSV - наверное слишком жёстковато

Да я на основе уже имеющихся своих сделаю. У них у всех кодовая база на 50+% совпадает. В случае с CSV правда надо заморочиться с определением разделителя и используемой кодировкой. И по хорошему дать возможность переключить, если неправильно сработало.

#8:  Author: Destiny PostPosted: Tue Oct 26, 2021 21:30
    —
Quote:
В случае с CSV правда надо заморочиться с определением разделителя и используемой кодировкой.

это да. есть минимум 3 разных кодировки. Разделителем выступает, то пробел, то таб, то точка-с-запятой, то |
короче да - может меняться...

Добавлено спустя 16 минут:

upload.ee/files/13582508/_______output.xls.html
тут сам файл.
а вот интересные картинки:

что не понятно - у меня ДВЕ строки с данными, а плагин посчитал, что есть одни ЗАГОЛОВОК и две строки с данными, причем первая строка - ПУСТАЯ. Что не верно в корне.
Так же он неверно отобразил формат ДАТЫ. Вместо точки вставил решетку символ.
ulister в этих отношениях все верно в виде таблицы отобразил. Но так же ДОЛЬШЕ загружал - даже практически пустой файл)))

что вообще не понял. Щаз опять его открыл в плагине и .... теперь второй элемент показан как: Отчет$_ т.е. без FilterDatabase суффикса, как у меня вышло в первый раз и что зафиксировалось на скриншоте ))))) обалдено вышло. это как-то поясняется???

#9:  Author: little-brother PostPosted: Tue Oct 26, 2021 22:02
    —
Quote:
плагин посчитал, что есть одни ЗАГОЛОВОК и две строки с данными

Это не пустая строка - это фильтры Smile Плагин интерпретировал первую строку как заголовок (это режим по умолчанию), а вторую как данные.

Версию вашего Windows не подскажете? У фильтров сверху должна рисоваться верхняя граница, но у вас её не видно. Возможно из-за измененной схемы (граница рисуется цветом кнопки).

Вторую таблицу гляну, что именно там ODBC возвращает. Почему вернулись разные имена нет даже догадок.

#10:  Author: Destiny PostPosted: Tue Oct 26, 2021 22:25
    —
Windows 10 x64 LTSC
Версия 10.0.17763 Сборка 2237

Quote:
Это не пустая строка - это фильтры Smile Плагин интерпретировал первую строку как заголовок (это режим по умолчанию), а вторую как данные.

пусть фильтры висят НАД табличным представлением информации Wink
не надо домысливать - просто надо брать и как таблицу рисовать.
И точно так же как в чистом экселе - по горизонтали именуем каждый столбец буквенно,
а по вертикали - каждую строку численно. Чтобы отображалась именно таблица.
Ну, и на крайний случай, если уж совсем таблицу рисовать не с руки - сделать в строке состояний подсказку -
показывать как называлась бы ячейка, где в данный момент времени стоит курсор: А23. Если выделено - то
показать именование выделенного диапазона ячеек - в стиле Экселя: С12:Е27.

Quote:
У фильтров сверху должна рисоваться верхняя граница, но у вас её не видно. Возможно из-за измененной схемы (граница рисуется цветом кнопки).
ничего не менялось в схемах. Хорошо бы хорошие скриншоты по шагам, как я уже ранее писал, приложить в топке,
чтобы полностью понимать - а КАК по замыслу разработчика ВСЁ должно выглядеть и работать....
А то сейчас вот сидим - гадаем - что и где не так как надо))))

#11:  Author: little-brother PostPosted: Tue Oct 26, 2021 22:51
    —
Картинку добавил. На Win7 все выглядит читаемо, с 10 (более распространенная) из-за особенностей принятых там стилистических решений все не очень (попробую поправить).

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

Если таблица не загрузилась, то надо что то вывести в правой части плагина.

#12:  Author: Destiny PostPosted: Tue Oct 26, 2021 23:26
    —
Quote:
Если таблица не загрузилась, то надо что то вывести в правой части плагина.
не вопрос - раз ничего не вывелось -то так и пишем спец фразу: мол, сорри гайз, но ничего нет, все пусто, открывайте другой файл, и может вам повезет.

Quote:
Подумаю над тем, чтобы добавить опцию - первая строка не заголовок таблицы.

я может идиот))) но - при считывании из экселя - из ТАБЛИЧНОГО!!! представления - любая строка - это просто строка с данными!!!!
там не может быть какой-то особой первой строки с заголовками - даже заголовки - это всего-навсего еще одна строка с ячейками, наполненными данными.
Вам ВСЕГДА надо читать эксель как таблицу и как таблицу выводить! Никакого промежуточного интерпретирования!

#13:  Author: little-brother PostPosted: Wed Oct 27, 2021 00:31
    —
По поводу дополнительных таблиц, в документации нашлось пояснение, что $_ - это таблицы в пределах листа (не думал, что такое есть). Думаю их можно смело игнорировать и не включать в список.

Quote:
но - при считывании из экселя - из ТАБЛИЧНОГО!!! представления - любая строка - это просто строка с данными

Microsoft считает по другому и на уровне ODBC драйвера Excel похоже такое поведение, когда первая строка возвращается как заголовок таблицы, никак не изменить. Так что по хорошему придется лепить костыль в виде хранимой настройки для csv и xls, - первая строка заголовок таблицы или нет.

#14:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Oct 27, 2021 06:53
    —
Destiny
На нашем форуме в сообщениях принято использовать в началах фраз заглавные буквы. Соблюдайте правила.

#15:  Author: Destiny PostPosted: Wed Oct 27, 2021 12:03
    —
Quote:
По поводу дополнительных таблиц

Я вот что еще нашел: есть список предопределенных системных таблиц.
Auto_Activate, Auto_Close, Auto_Deactivate, Auto_Open, Consolidate_Area, Criteria, Data_Form, Database, Extract, FilterDatabase, History, Print_Area, Print_Titles, Recorder, Sheet_Title.
В зависимости от разных условий они еще и могут быть оформлены с суффиксами вида "_0"\"_0_0"!
А еще есть именованные регионы (создаются через CTRL+F3). Они формально тоже при чтении через ODBC протокол будут представлены как таблицы. Ну и да, опираться на то, что Вы нашли в доках:
Quote:
For later versions of Microsoft Excel files, "SYSTEM TABLE" is returned for sheet names (tables with a "$" on the end), and "TABLE" is returned for tables within worksheets.


А!! еще с пробелами в именах таблиц! Вы при выборке должны спецом их "оборачивать" в разные типы кавычек:
Code:
SELECT * FROM "'Sheet 1$'"

На всякий случай уточню, вдруг где на тестах падать будет - чтоб сразу знать.

Добавлено спустя 44 минуты:

Попробовал открывать CSV файлы и что не понял:
Я открываю 1! файл - а слева мне показывается СПИСОК! файлов схожего формата из той же папки, что и открытый файл... Это как-то странно слегка. Один так один файл, зачем что-то еще показывать? К тому же эта левая панель не имеет ни полосы прокрутки, ни сама сдвигаться не может мышкой - "прибит" ее размер намертво. В итоге я имена некоторых файлов даже не узнаю - т.к. они отличаются только конечными символами, а мне показываются только первые что-то около 30-35 символов.
Ну и напоследок - для колонок не выполняется автоподгон под содержимое.

P.S. Я помню, про необходимость отдельного плага под CSV, но именно поэтому сразу описываю, то, что потенциально может перекочевать в новый код, а не хотелось бы чтобы ЭТИ уже найденные несуразности туда попали.

P.P.S И эта левая панель и для плагина ODBC протокола должна иметь возможность сдвигаться мышкой и иметь полосы прокрутки - т.к. это черт возьми очень логичное и желаемое действие - уменьшить ширину той области, которая не нужна для текущего просмотра. А если я ширину уменьшил - то полосу прокрутки уже надо показать, т.к. имя таблицы может теперь уже оказаться больше, чем ширина видимой части панели.

Насчет появления FilterDatabase. Оказывается если открыть файл экселя в экселе и параллельно открыть его в плагине, то ODBC протокол выдает текущие имена таблиц, которые появились в рамках обработки этого файла ядром экселя)) И вот конкретно эта "таблица" - FilterDatabase - представляет собой активированный движком фильтр по значениям ячеек в открытом файле! Именно поэтому если просто открыть файл - то мы увидим доп.таблицу "Отчет$_" - представляющую собой просто этот же фильтр, но пока что неактивный (файл в экселе не открыт параллельно), и поэтому не имеющий полного названия.

Так что да - фильтровать такие таблицы можно и нужно... И выводить только те, имена которых заканчиваются ровно на символ $.

Добавлено спустя 7 минут:

Насчет "первая строка как заголовок". И тут я все равно не понимаю. Вы же считываете хоть и через ODBC, но в стиле SQL: select * from tableName. А это значит, что получаете вы просто набор данных, но вот выводите их в какой-то визуально табличный GUI элемент. Так вот в нём-то похоже и происходит эта "доконвертация" первой строки данных как заголовка - и это-то и ломает стройность представления данных при выводе на экран. ИМХО Вам надо просто "надставлять" весь результат команды select * from tableName одной доп.строкой вида "A B C D E F и т.д.". Сымитировав тем самым то, как сам эксель именует столбцы с информацией в буквенном представлении. И тогда при помещении этого набора данных заголовком станут именно эти буквы - т.е. мы получим ровно то же табличное представление, что и в самом экселе. И это очень здорово!



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next  :| |:
Page 1 of 10

Powered by phpBB © 2001, 2005 phpBB Group