[wlx] odbc-wlx - просмотр Access, Excel, CSV файлов
Select messages from
# through # FAQ
[/[Print]\]

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 и т.д.". Сымитировав тем самым то, как сам эксель именует столбцы с информацией в буквенном представлении. И тогда при помещении этого набора данных заголовком станут именно эти буквы - т.е. мы получим ровно то же табличное представление, что и в самом экселе. И это очень здорово!

#16:  Author: little-brother PostPosted: Wed Oct 27, 2021 13:59
    —
Quote:
В зависимости от разных условий они еще и могут быть оформлены с суффиксами вида "_0"\"_0_0"!

Пример файла можно? Я дополнительные окончания не могу получить. Возможно, что эти таблицы возникают при открытом файле в Excel, как и FilterDatabase.

Quote:
именованные регионы

Не знал о них. Да, они попадают в список таблиц. И если такое используется, то выкидывать их из списка наверно всё таки не стоит. Не включать в список таблицы, содержащие в именах $_..., видимо сработает.

Quote:
с пробелами в именах таблиц

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

Quote:
Это как-то странно слегка

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


Quote:
"прибит" ее размер намертво

Проверьте версию плагина. Если 0.9.2, то значит баг, если 0.9.0, то значит просто старая. Разделитель должен двигаться мышкой и его позиция сохраняется в ini.

Quote:
получаете вы просто набор данных

Именно, ODBC отдает набор данных без первой строки. Данные первой строки находятся уже вызовом специальных команд вида "ПолучитьИмяСтолбца".

#17:  Author: Destiny PostPosted: Wed Oct 27, 2021 16:15
    —
Quote:
Пример файла можно? Я дополнительные окончания не могу получить

Нет, файлов нет - я в интернете нашел инфу, что попадались такие случаи при парсинге через ODBC. Да вам и не надо именно "получать" эти окончания. Просто когда будете проверять на схожесть с перечисленными предопределёнными системными именами таблиц, что я раньше выкладывал - не сравнивайте точно с именами - ищите подстроку, чтоб случай, когда попадется $_FilterDatabase_0 - можно было легко поймать и исключить из показа так же)))

P.S. Могу предположить, что эти суффиксы возникают, когда несколько однотипных элементов создается на листе экселя. Попробуйте нарисовать две таблицы на одном листе. И в каждой включить свой фильтр на заголовки таблиц. Два фильтра наверное должны дать две записи: $_FilterDatabase и $_FilterDatabase_0

Quote:
Проверьте версию плагина. Если 0.9.2
К сожалению, почему-то инфы о версии нигде толком нет в самом файле плагина. Только на имя архива с плагином можно ориентироваться. Ну тогда да - 0.9.2 версия.

*************
И попробовал я тут поставить эти 64битные драйвера принудительно:
accessdatabaseengine_X64.exe /passive /quiet
как рекомендуется в статье: knowledge.autodesk.com/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/How-to-install-64-bit-Microsoft-Database-Drivers-alongside-32-bit-Microsoft-Office.html
И да, они поставились. НО вот при использовании вылетает другая ошибка: Unable to load odbcji32.dll
Причем совершенно не ясно - а КТО это может даже пытаться загрузить 32 битную библиотеку. А она есть только по пути C:\Windows\SysWOW64\odbcji32.dll
Может надо еще какой компонент найти и подставить, где эта либа будет уже в форме 64бит.

#18:  Author: little-brother PostPosted: Wed Oct 27, 2021 17:16
    —
Quote:
почему-то инфы о версии нигде толком нет в самом файле плагина

Я думал pluginst.inf копируется и в нем есть версия, а он игнорируется. Надо будет добавить версию в readme.txt.
С разделителем получается баг, придется загрузиться в Win10 и проверить Sad
Спасибо, буду фиксить.

Quote:
C:\Windows\SysWOW64\odbcji32.dll

Нахождение либы в папке SysWOW64 говорит о том, что она 32-битная, и соответственно не может быть загружена. По идее после установки MADE что-то похожее должно появиться в системной папке, но видимо у MS была все-таки какая то причина отталкиваться от версии Офиса. Хотя ведь наверно можно два офиса разной битности поставить.

P.S. Проверил поведение плагина в Win10 - разделитель работает. Может быть проблема в ширине рамок окна и потому его позиция у вас отслеживается неверно? Попробуйте нажать на правую или левую границу (вся ширина 5 точек, так что придется прицелиться) разделителя и перетащить его с зажатой левой кнопкой.

#19:  Author: Destiny PostPosted: Wed Oct 27, 2021 22:22
    —
Что-то ошибочно данные вытаскиваются.
Есть таблица с промежуточными итогами
Так вот они не показаны в плагине.
www.upload.ee/files/13586811/_______output.xls.html
И значения итогов "4" нет в выводе плагина....

И все же что-то явно глупое с выводом имен колонок у этого ODBC происходит.
Откуда-то взялись F3|F4 в названиях....
Что-то надо придумывать с этим безобразием((((

#20:  Author: little-brother PostPosted: Wed Oct 27, 2021 22:29
    —
Quote:
значения итогов "4" нет в выводе плагина

Насколько я могу судить это значение вычисляется при открытии книги и потому ODBC не имеет к ним доступа. Вы слишком многого ожидаете от ODBC и этого плагина Smile

Quote:
Откуда-то взялись F3|F4 в названиях

Лично мне очевидно, что имена колонок - это первая строка. В ней только два значения, но заполненных колонок на листе 4, поэтому Excel требуется как то их именовать и для этого используется Fn шаблон.

#21:  Author: Destiny PostPosted: Thu Oct 28, 2021 11:54
    —
Quote:
Насколько я могу судить это значение вычисляется

А вы файл же открывали? А в ячейку с этим значением тыкали? Там не формула - там простое число. Совершенно простое число, такое же как и в других ячейках есть... Поэтому вопросы остаются вопросами. И ожидания от плагина прежние))

#22:  Author: little-brother PostPosted: Thu Oct 28, 2021 12:31
    —
Открывал. Я подумал, что это просто итог (не силен в Excel, т.к. не пользуюсь им).
Надо посмотреть почему теряется значение. Возможно у ячейки тип, который я не обрабатываю.

P.S. Плагин для csv готов.

#23:  Author: Destiny PostPosted: Thu Oct 28, 2021 14:07
    —
Касательно ODBC. А вот такое там не проходит?
Code:

Sub Test()
   Dim conn As ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim strConnection As String
   Dim sql As String

   ' Create the connection string.
   strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                   & "Data Source='d:\Downloads\_______output.xls';" _
                   & "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"
   ' Create the Connection and Recordset objects.
   Set conn = New ADODB.Connection
   Set rs = New ADODB.Recordset

   sql = "SELECT * FROM [Лист1$A1:E10]"

   ' Open the connection and execute.
   conn.Open strConnection
   Set rs = conn.Execute(sql)

   ' Check we have data.
   If Not rs.EOF Then
       ' Transfer result.
       ActiveSheet.Range("A1").CopyFromRecordset rs
       ' Close the recordset
       rs.Close
   Else
       MsgBox "Error: No records returned.", vbCritical
   End If

   ' Clean up
   If CBool(conn.State And adStateOpen) Then conn.Close
   Set conn = Nothing
   Set rs = Nothing
End Sub


собственно самое вкусное спрятано вот в этой строке:
Quote:
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source='d:\Downloads\_______output.xls';" _
& "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"

Во-первых, провайдер Microsoft.ACE.OLEDB.12.0 - он в состоянии читать как новый формат Excel XlsX, XlsB, XlsM,
так и старый-добрый xls. Разницу просто надо уточнить в подстроке "Extended Properties"
'Excel 8.0' для Excel 97-2003 Xls файлов. И 'Excel 12.0 Xml' для XlsX. И 'Excel 12.0' для XlsB. И 'Excel 12.0 Macro' для XlsM
Во-вторых, и это самое важное! Два след. элемента: HDR=NO;IMEX=1 гарантируют, что заголовки не будут выделяться
движком при разборе - всё будет считаться ТЕКСТОВЫМИ табличными данными! Что нам и нужно для простого показа.

#24:  Author: little-brother PostPosted: Thu Oct 28, 2021 14:25
    —
Проблема в том, что ADO использует COM и на С его использовать не очень, в отличии от Delphi, которым я не пользуюсь. К тому же не охота разбираться еще и с ADO (с ODBC я разобрался ранее для другой вещи). В целом проще добавить крыжик Header row, как в csvtab-плагине, нежели переходить на ADO из-за этой мелочи. xlsb и прочие форматы вроде и так читаются плагином.

С 4 из Итого проблема понятна: тип столбца считается текстовым, а там число. В результате ODBC для такого поля возвращает пустое значение. Надо подумать как это обойти.

И да, решение нашлось, и даже наличие заголовка можно указать. Правда запросы выглядят максимально странно.
Code:

select * from [Excel 8.0;HDR=YES;IMEX=1;Database=d:/1.xls;]."Лист1$"


P.S. Просьба проверить разделитель областей еще раз.

#25:  Author: Destiny PostPosted: Thu Oct 28, 2021 16:20
    —
Если уже вышел отдельный плаг под CSV, то в этом наверное стоит его поддержку вырезать как раз-таки. Ибо мешанина выйдет. Тут-то настроек никаких толковых нет и вряд ли стоит их планировать под этот формат, а вот в том плагине - им как раз и место светит логичное. Тот же символ-разделитель! Когда-нибудь но он же появится в настройках там, хотя бы и в виде параметра в INI файле. Да и показ в панельке слева всех "типа тоже csv" файлов рядом - такое себе удовольствие. Всё же когда открываешь четко один файл этого текстового формата, то ожидаешь увидеть только простую табличную форму с данными.

Quote:
P.S. Просьба проверить разделитель областей еще раз.

Не понял. Новой версии плагина я не вижу. Проверять в 0.9.2 - так уже проверялось - не пашет.
Наверное в 0.9.3 надо проверить, где и новый формат SELECT'a будет использоваться и CSV уберётся,
и возможно разделитель починится, и цвета для панелей/ячеек/подчеркиваний/выделений границ более чёткими
станут - как это на примере-скриншоте в первом посте показано(а то под вин10 всё очень слишком материалистично,
плоско, безградиентно, блёкло и невыразительно получается)?

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

Кстати, в ридми файлах надо не забыть проставить версионность!
В CSV'шном 0.9.0 пока ее нет. А обсуждалось, что полезно ее там иметь.
Новый сабж в 0.9.3 как раз пусть начнет эту добрую традицию))

#26:  Author: little-brother PostPosted: Thu Oct 28, 2021 17:00
    —
Quote:
Новой версии плагина я не вижу

Попробовать в текущей потаскать разделитель за крайние пиксели (выделил красным)
https://i.ibb.co/KXwxtbK/1.png

А почему CSV уберется? Пусть будет. Его настройки через schema.ini рулятся.

Да, с новых версий в readme буду версию указывать. Хотя наверно можно и в правом нижнем углу, как у csvtab.

#27:  Author: Destiny PostPosted: Thu Oct 28, 2021 20:16
    —
Quote:
Да, с новых версий в readme буду версию указывать. Хотя наверно можно и в правом нижнем углу

И там и там - самое клевое)))

Quote:
Попробовать в текущей потаскать разделитель за крайние пиксели (выделил красным)

Я дико извиняюсь... Но вы хоть раз видели КАК это должно быть интуитивно для пользователя? Мышиный курсор должен менять форму над таким разделителем на специальный. Сам разделитель должен или слегка утолщаться, или слегка цвет менять при нахождении этого курсора над ним. Да мне просто в голову даже не пришло, что эти крайние пиксели для этого предназначены. Раз нет никаких сопутствующих эффектов, подчеркивающих начало операции по перетаскиванию разделителя - то значит этой операции и нет вообще. Ну и перетаскиваться должна какая-то специальная визуальная полоса, а не сами окна меняться наживую в размерах - чтоб избежать некрасивых спецэффектов постоянной перерисовки содержимого и левой и правой панелей.

А так формально да, если ухватиться за выделенное красным - тягается. НО! опять-таки - если уменьшать ширину панели, чтобы в нее не умещалось ее содержимое - полосы прокрутки не появляются.... А очень ожидались.

Quote:
А почему CSV уберется? Пусть будет. Его настройки через schema.ini рулятся.

В этом и проблема. Если бы все настройки были принципиально в каком-то мастере настроек - визуальном! то тогда это еще можно было бы пережить. А когда все делается только в INI файле - имхо, только самые стойкие будут использовать этот плагин для CSV, другие начнут искать другой(((
Да и реально - набор настроек для CSV может оказаться потенциально больше, чем можно и нужно для экселевских файлов поддерживать. Уж лучше это всегда в одном месте держать и дальше разрабатывать, чем перекидывать кодовую базу из одного плагина в другой...

И опять-таки - плагин для CSV - это для CSV, а не для всех текстовых файлов. Это оооочень странно и неудобно, когда в левой панели вылетают все текстовые файлы, что рядом с одним мне нужным CSV файлом в папке вместе расположены. Вы же понимаете, что эти текстовые файлы ну никоим образом просматривать в табличном представлении нет нужды/пользы... Точно так же как мы удаляем системные таблицы из просмотра - они же не с той информацией, что нам нужна, хранятся в файле. Так же и с csv - когда его открываешь - то редко рядом с ним еще десяток нужных csv найдешь, которые надо по-быстрому открыть.


Last edited by Destiny on Thu Oct 28, 2021 21:36; edited 1 time in total

#28:  Author: little-brother PostPosted: Thu Oct 28, 2021 21:29
    —
Ага, значит работает. Изменение курсора и рисовку разделителя другим цветом добавлю, раз возникло недопонимание. Отсутствие горизонтальной прокрутки - это баг Sad Исправлю.

Quote:
эти текстовые файлы ну никоим образом просматривать в табличном представлении нет нужды/пользы

Здесь не соглашусь. Зависит от того какие задачи решает пользователь. Случаи, когда CSV отдельно не нужен думаю не исключения.

Насчет визуальных настроек - их можно конечно сделать, но мне лень Very Happy
Предпочитаю делать так, чтобы в 99% случаев настройки менять не надо было, а если уж хочется, то придется в Wiki и ini лезть.

#29:  Author: Destiny PostPosted: Thu Oct 28, 2021 22:55
    —
Quote:
Зависит от того какие задачи решает пользователь. Случаи, когда CSV отдельно не нужен думаю не исключения.

Вопросов не возникнет, если реализация поддержки CSV в этом плагине будет идентичной то, что есть в отдельном. А иначе кавардак. В том уже сейчас я могу режим Заголовков включать - а в этом не могу. Нуууу, допустим в след.версии и тут он появится, но! а если для CSV в ЭТОМ плагине кто-то предложит очень нужную и полезную примочку - потом надо будет не забыть перенести уже её в ТОТ плагин? Ибо будут же те, кто пользуется именно отдельным плагином под CSV. И примочек, которые полезны/нужны для отображения текстовой инфы из файлов CSV|TXT - может оказаться куда больше, чем для экселевских, практически бинарных. И - куда предпочтение по их внедрению отдавать будем? А если развитие ТОГО плагина реально кто-то начнет продвигать? Проект-то оупен-сорс. И как следить за тем, чтобы эти фишки оттуда сюда вовремя копировались? Ибо недальновидно будет делать разрыв в поддержке отображения одного и того же формата CSV на разных плагинах.

Quote:
то придется в Wiki и ini лезть.
Что порой не окажутся под рукой в нужный и срочный момент и .....?
Проекты же, ещё раз, оупен-сорс! И кто-то может всё равно и добавит-таки визуализации. Но почему это стоит отдавать кому-то? ))) имхо вот после реализации подобного на минималках и можно отправлять в реальное взрослое плавание эти плагины. Так сказать версия 1.0 Первая публичная)))

#30:  Author: little-brother PostPosted: Fri Oct 29, 2021 00:28
    —
Сомневаюсь, что какие то новые фишки кто-то попросит. Да и odbc-плагин представляет базовую функциональность, в отличии от csvtab. Строку-заголовок разумеется добавлю и в odbc-плагин, т.к. она требутся и csv и xls.
К тому же, код приходится переносить между плагинами так и так, напр. F2 для перегрузки файла запросили для xmltab и понятно, что надо сделать это во всех.

Quote:
Что порой не окажутся под рукой в нужный и срочный момент

Очень и очень маловерятно. Это ж не платежное ПО, а просто плагин.
Аналогично и по тому, что кто-то доработает - черная магия (WinAPI/С), на которой разрабатывается, не сильно в моде сейчас. Большая часть плагинов вообще на Delphi написаны и у них вот есть шансы, что кто-то допишет.

#31:  Author: Destiny PostPosted: Fri Oct 29, 2021 12:23
    —
Code:
Да и odbc-плагин представляет базовую функциональность, в отличии от csvtab

и этим тем более мешается, когда установлены и тот и этот плагины.
Ладно, будем курочить детект-строку, чтобы сабж и не пытался даже открывать то, что ему не по праву....

Но спс за черную магию! Она весьма интересно справляется с тяжкими файлами)))

#32:  Author: Mailk PostPosted: Fri Oct 29, 2021 15:44
    —
Просмотр csv файлов где русский язык в ячейках абра кадабра, короче не понимает кодировку.
при этом плагин csvview показывает как надо.

#33:  Author: little-brother PostPosted: Sat Oct 30, 2021 02:02
    —
Для этого вы должны задать кодировку в schema.ini. Как это сделать есть в Wiki.

#34:  Author: Mailk PostPosted: Sat Oct 30, 2021 02:18
    —
little-brother wrote:
Для этого вы должны задать кодировку в schema.ini. Как это сделать есть в Wiki.

Ну а по чему Вам не вложить такой ини в плагин? Просто мне проще удалить Ваши плагины и не морочить голову, так как аналогов которые поставил и все, достаточно.

#35:  Author: little-brother PostPosted: Sat Oct 30, 2021 02:20
    —
Эмм, данный файл должен находиться в папке где у вас расположены .csv файлы. Каждая секция данного ini-файла описывает один конкретный файл.
csv в данном плагине поддерживается больше для галочки.

#36:  Author: Mailk PostPosted: Sat Oct 30, 2021 02:24
    —
Да нашел, как то не удобно совсем зачем фаил ини в папке просмотра генерируется а не в папке плагина не понятно.
Генерировать мусорные файлы не правильно. сортировки по времени мешает очень! Не правильно Вы товарищ подходите к концепции.
И что мне в каждой папке править теперь фаил чтобы смотреть ?

#37:  Author: little-brother PostPosted: Sat Oct 30, 2021 02:32
    —
Еще раз: файл нужен в папке, где лежат csv. При подключении плагин использует ODBC драйвер, который ищет этот файл. Если файл найден ODBC читает оттуда данные. Если файла нет, то используются настройки по умолчанию, что в большинстве случаев дает коряблики. Так работает ODBC и плагин тут ни при чем - настройки для каждого файла надо же где то хранить и Microsoft сделала так.

#38:  Author: Destiny PostPosted: Sat Oct 30, 2021 17:05
    —
little-brother wrote:
Еще раз: файл нужен в папке, где лежат csv.

думается, это очередной гвоздик в крышку наличия поддержки этого формата в этом плагине. Слишком муторно и не для быстрого использования... Нет, этот формат обрастает слишком важными и слишком разными настройками, которые ему нужны, а другим форматам от экселя - нет. И нет логики держать тут что-то для галочки, а реальную разработку и поддержку по факту вести там. Лучше тут отрезать - а там всё что надо пришить и приварить, если потребуется)))

#39:  Author: Destiny PostPosted: Mon Nov 01, 2021 13:08
    —
Блин, ну эта проблема с 64битными драйверами конечно бесит. Вторым второй Офис ток уже 64 битный не поставить. А сам по себе он такой и не нужен. А нельзя вычленить КАКОЙ набор файлов-драйверов нужен для связки Плагин-Эксель чтоб работало? Тот же dependency walker - может натравить на открытие файла и просмотреть какие dll участвуют в процессе? Может вполне возможно прямо создать необходимый архи-установщик того минимума файлов-драйверов, что могут быть поставлены в систему самостоятельно, наравне с установкой самого плагина.

#40:  Author: little-brother PostPosted: Mon Nov 01, 2021 14:58
    —
Как вариант предложу скачать 64-битную версию MADE, переименовать файл в zip, достать оттуда AceRedist.msi. При помощи lessmsi вытащить из .msi файла все dll (некоторые могут быть и не нужны, но по названию не очень понятно) и положить в папку плагина, в надежде, что при загрузке ODBC плагин вначале посмотрит файлы в своей папке, а не в системной.

P.S. Сейчас у MS на сайте какие то проблемы с авторизацией, поэтому скачать 64битную версию и проверить не могу.

#41:  Author: Destiny PostPosted: Mon Nov 01, 2021 15:56
    —
little-brother wrote:
вытащить из .msi файла все dll (некоторые могут быть и не нужны, но по названию не очень понятно) и положить в папку плагина

Проблема в том, что при неудачной попытке просто выводится диалог с ошибкой НеМогуЗагрузитьБазуДанных и всё. И что и где не хватает/не так положено - не ясно. Поэтому я и пишу что хорошо бы узнать ВСЕ загружаемые библиотеки из какого-то инструмента, заточенного на вывод все загруженных в процесс библиотек. И уже на основе этого списка с полными путями сделать какую-то свою "солянку".
А просто подбросить все dll - это не очень результативное действие.
dependency walker так вроде может сделать. Листер Тотала можно вызывать как отдельное приложение с передачей параметрами файла для открытия. И всё это в dependency walker можно подать. И отпрофайлить эту связку. И в его логе будут указаны все вызовы всех загрузок всех библиотек и не только.

#42:  Author: Mailk PostPosted: Mon Nov 01, 2021 18:42
    —
little-brother wrote:
вытащить из .msi файла все dll (некоторые могут быть и не нужны, но по названию не очень понятно)

Есть плагин для ТС пора бы знать что ТС самый удобный в этом плане и универсальный.
Плагин InstExpl.wcx, всегда смотрю всякие инстоляторы и вытаскиваю из них файлы или смотрю что там за инстолятор и его содержимое.

#43:  Author: little-brother PostPosted: Wed Nov 03, 2021 04:10
    —
Скачал 64-битный установщик (у сайта MS, как оказалось, нелюбовь к Firefox, но не Chrome). Извлек файлы, положил их к плагину и в Program Files/Common Files/Microsoft. Без результата.

Однако в моем случае, запуск установщика MADE с ключом /passive, завершилась успешно (в Администраторе ODBC - odbcad32) появились драйвера для Офиса и плагин заработал и в TCx64.

P.S. Win7 x64

P.P.S. Вот такую ошибку выдает ODBC, если не удалось подключиться.



Как видно деталей нет и не сильно отличается от "не удалось подключиться".

#44:  Author: Destiny PostPosted: Wed Nov 03, 2021 12:04
    —
little-brother wrote:
запуск установщика MADE с ключом /passive, завершилась успешно

Да и в моем это проходит. НО! суть не в том - поставить или нет, или КАК поставить. А в том, что после установки, да, походу, еще и разница в версиях винды роль играет, при попытке открыть 64 битным плагином из под 64 битного тотала выдает разные ошибки. В вашем случае вот одна ошибка. В моем другая. НО! все они связаны с тем, что НЕ ВСЕ библиотеки оказываются в нужном месте, или в принципе доступны/были поставлены.
Поэтому я писал и пишу - нужно получить полный стек загруженных библиотек для чистой системы, где ВСЁ изначально стоит чисто 64 битное. И сравнить с тем, что мы на замиксованной системе получаем. Остатки после анализа доложить в нужной пропорции. Вот тогда уже и должно сработать подсовывание этих либ прямо в папку к плагину.

#45:  Author: little-brother PostPosted: Wed Nov 03, 2021 12:23
    —
Не факт, что простое подкладывание библиотек достаточно. Возможно требуется еще и их регистрация где то в реестре.

В целом странно, что при установленном MADE плагин не может загрузить файлы. Устанавливать чистую ОС для экспериментов и разбираться, какие там dll грузятся - мне лень. Не сработал этот плагин - есть другие.

#46:  Author: Destiny PostPosted: Wed Nov 03, 2021 23:13
    —
little-brother wrote:
Не сработал этот плагин - есть другие.

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

#47:  Author: little-brother PostPosted: Thu Nov 04, 2021 17:02
    —
Попробуйте установить MADE x64 другого года (есть 2010 и 2016) и с флагом /passive.

Про ошибку с odbcji32.dll - инструкция от Autodesk мне кажетс должна помочь, если сделать как там написано (в том числе поправить реестр).

#48:  Author: Destiny PostPosted: Thu Nov 04, 2021 17:30
    —
little-brother wrote:
инструкция от Autodesk

находил, пробовал. толку ноль.

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

little-brother wrote:
Попробуйте установить MADE x64 другого года (есть 2010 и 2016) и с флагом /passive.

Ну писал же - найти ЧТО и КАК поставить - не вопрос. Вопрос в том, что чего-то явно не хватает в итоге - ошибку выкидывает. Нужно для контроля именно полный стек всех загруженных либ иметь под рукой, чтобы было что с чем сравнивать и понимать - что куда коннектится, чтобы заработало. И вероятно именно что на 10 винде только. Т.к. на семерке походу что-то более проще делается = т.к. ВАШУ указанную на картинке ошибку я все же никак получить не могу, у меня отваливается намного раньше...

#49:  Author: little-brother PostPosted: Fri Nov 05, 2021 05:30
    —
Вот тут минимальный пример, который не требует ни загрузки TC, ни чего то еще - https://sgeproject.narod.ru/wlx/odbc-test.zip
Имя файла, в отличии от имени драйвера, в строке соединения ни на что не влияет: если удалось инициализировать ODBC, то выведет SUCCESS.

Кстати посмотрите в odbcad32 (для 64-битной версии), как у вас Excel драйвер именуется. Возможно дело в том, что как то по другому.

#50:  Author: Destiny PostPosted: Fri Nov 05, 2021 13:15
    —
little-brother wrote:
Вот тут минимальный пример

Он выдает лишь вот это:
Code:
Error: Can't connection to Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=D:/2.xls;ReadOnly=0;
Env Error:
Dbc Error:

Походу это ошибка именно уже коннекта к указанной базе. Её же у меня нет в этом месте.
Но, никаких других ошибок, связанных с ODBC нет. Мы что-то не то проверяем, имхо, в этом тесте.

Драйвер имеет конечно же точно такое же название, как и у вас указано.

#51:  Author: little-brother PostPosted: Fri Nov 05, 2021 14:04
    —
Я проверил у себя - имя файла значения на данном этапе не имеет.
Эта ошибка значит, что ODBC не может найти указанный драйвер.

Насколько я понял, все драйвера работают через одну dll

#52:  Author: Destiny PostPosted: Fri Nov 05, 2021 17:21
    —
little-brother wrote:
Насколько я понял, все драйвера работают через одну dll

Нет, там сложная вязь зависимых либ, которые подгружаются по запросу. Поэтому нужен полный стек для анализа и именно с системы, где плагин полностью сработал. Иначе это гадание "встречу динозавра или не встречу".

#53:  Author: little-brother PostPosted: Fri Nov 05, 2021 18:19
    —
Я имел в виду, что точка входа одна.
Насколько я могу судить по поиску - проблема иногда встречается у других, но никто не пытался собрать набор рабочих dll.

Погуглив, нашел, что проблема скорее всего в том, что Windows при загрузке ODBC пытается использовать файлы из Program Files (x86)/Common Files/... вместо их версий из 64-битной папки. Вот тут человек подошел радикально и закинул 64-битные dll в system32. Для проверки этой версии достаточно переименовать c:\Program Files (x86)\Common Files\microsoft shared\OFFICE14\ и попробовать запустить плагин.

#54:  Author: Destiny PostPosted: Fri Nov 05, 2021 21:17
    —
что меня еще удивляет, это то, что почему-то не найти этих драйверов, имеющих руссификацию. С одной стороны можно спросить - а чего там руссифицировать? А с другой отвечу - ведь изначально же именно подпапка Program Files\Common Files\Microsoft Shared\OFFICE14\1049 описывается на многих страницах, имеющих связь с этой проблемой. А \1049 это именно подпапка руссификации. А у меня есть только подпапка \1033 - т.е. инглиш.
А соответственно для 32 битных дров у меня есть именно полноценная подпапка \1049 в соответствующей (х86) ветке путей со всем схожим содержимым вида ACE*** и MSO*** dll. И даже файл справки там уже прилагается. На русском! А вот с 64битными дровами почему-то ничего такого нет. И это несмотря на то, что процесс их скачивания я начинал с русскоязычной страницы скачивания этих драйверов на офиц.сайте...
Так что как и в указанной вами ссылке через Process Explorer/Monitor - надо все же сперва получить полный стек загруженных либ для плагина на нормальной системе вин10, руссифицированной и 64 битной, с русским офисом 2016 х64 макс. установленным. И потом уже смотреть обозначенные там в списке либы, их полные пути и их формальное наличие в архиве установки драйверов или где-либо ещё. А потом собирать как бы СВОЙ вариант установщика со всеми затронутыми либами, который и раскидает их в нужные места, но уже в системе с 32 битным офисом)))

Просто подкинуть мой вариант подпапки, но ток в версии \1033, не помог - тотал/листер/плагин просто встали колом при попытке открыть экселевский файл после этого.

#55:  Author: little-brother PostPosted: Fri Nov 05, 2021 21:31
    —
Quote:
надо сперва получить полный стек загруженных либ на нормальной системе вин10, руссифицированной, 64 битной, с русским офисом 2016 х64 макс

Я точно этим заниматься не буду - у меня Win10 только для тестов и она даже без русификации и Офиса Very Happy

Про финт с папкой 1033 и 1046 не очень понял чего вы хотели этим добиться. Это ж просто локализация. Вроде как проблема в том, что Windows из 64-битного приложения пытается загрузить ACEODBC.DLL, находит 32-битную версию и не может ее загрузить. Если поместить этот файл (и часть соседних) в system32, то возможно тогда у них появится больший приоритет при выборе над 32-битной из Common Files.

P.S. Просьба проверить пред-релизную версию https://sgeproject.narod.ru/wlx/odbc-wlx-0.9.3-beta.zip насчет лишних таблиц в Excel. И да, поддержку csv выкинул - лень было делать Вкл/Выкл для строки заголовка.

#56:  Author: Destiny PostPosted: Sat Nov 06, 2021 12:26
    —
little-brother wrote:
Про финт с папкой 1033 и 1046 не очень понял чего вы хотели этим добиться. Это ж просто локализация.

да, просто. НО на страницах сайтов, где обмусоливалась эта проблема и искались пути решения всегда фигурировала папка \1049. А у меня есть только \1033. Что очень странно. Да, те статьи старые - может тогда еще выпускался установщик этих драйверов совместно с соответствующим руссификатором. А сейчас этого почему-то нет. Ну а пока, если просто применять советы из тех статей, только заменяя 1049 на 1033 - то ничего полезного не выходит.
little-brother wrote:
Вроде как проблема в том, что Windows из 64-битного приложения пытается загрузить ACEODBC.DLL, находит 32-битную версию и не может ее загрузить.

Нет. Именно эту либу плагин/система грузит правильную - "новую" 64битную. Не грузят сопутствующие либы, которые по запросу подгружаются. И среди прочих там есть либы руссификации))) Которые точно не те грузятся, т.к. они для 1033 языкового ресурса, а у меня система и офис на 1049 ресурсе "висят". И облом-с. Это как минимум.
little-brother wrote:
Если поместить этот файл (и часть соседних) в system32, то возможно тогда у них появится больший приоритет при выборе над 32-битной из Common Files.

Угу, попробовал, и как написал выше - всё встало дыбом. Аж систему перезагружать пришлось. Т.е. бездумно подкидывать что-то куда-то нельзя. Надо сперва точно знать куда и что подкидывается при правильных сопутствующих условиях. И на основе этой информации уже формировать свой список "кукушек" для подкидывания в систему, где нарушена часть этих условий.
little-brother wrote:
Просьба проверить пред-релизную версию

И как была таблица FilterDatabase на месте - так и осталась.... Я проверял на том же самом файле, что вам высылал. У вас же что - типа перестало её отображать? По вашим тестам что выходит-то?

#57:  Author: little-brother PostPosted: Sat Nov 06, 2021 12:33
    —
Убрал содержащие $_ и заканчивающиеся на _0 и _0_0. FilterDatabase оставил, там же вроде как вложенная таблица отображается. Или их тоже стоит убрать?

#58:  Author: Destiny PostPosted: Sat Nov 06, 2021 12:51
    —
little-brother wrote:
FilterDatabase

Это всего-навсего наложенные фильтры на столбцах. Причем они активируются, только если открыть этот файл в экселе. А иначе это нулевой набор данных. Есть только имя. Т.е. можно и нужно игнорить.

А вообще игнорить нужно все те системные таблицы, что я показывал ранее в каком-то посту.

Кстати, решено именовать столбцы в стиле "F.." - а почему не привычно "Column#.."?

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

little-brother wrote:
Убрал содержащие $_ и заканчивающиеся на _0 и _0_0.

Насчет заканчивающихся на нули. Там подразумевается рекурсия. Т.е. если будет какой-то вложено-вложено-вложенный именованный запрос, то заканчиваться он будет на _0_0_0_0. Т.е. надо отсекать "_0", повторяющееся 1 и более раз.

#59:  Author: little-brother PostPosted: Sat Nov 06, 2021 13:22
    —
Quote:
можно и нужно игнорить.

Ок.

Quote:
все те системные таблицы

Вобщем все, что в имени содержит $ и хвост.

Quote:
Т.е. надо отсекать "_0"

Ок.

Подозреваю, что можно отсекать лишние таблицы, оставляя только с типом SYSTEM TABLE, который насколько могу судить задан только для листов (из дополнительных таблиц я вижу только $FilterDatabase и у нее тип TABLE).

Quote:
решено именовать столбцы в стиле "F.." - а почему не привычно "Column#.."?

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

#60:  Author: Destiny PostPosted: Sat Nov 06, 2021 17:28
    —
В общем да, проблемы 64битных драйверов связаны именно с тем, что в комплекте для установки есть и прописывается в реестр ТОЛЬКО 1033 языковой ресурс - т.е. инглиш. А система, после того как загружается первичный файл ACECORE.dll, тут же ищет по реестру прописанные ему в соответствии языковые ресурсы. Хз, конечно, что там такого языкового. Но ищет И т.к. в реестре есть только запись для "C:\Program Files\Common Files\microsoft shared\OFFICE16\1033\ACEINTL.DLL", хотя и искалось для 1049, то ничего нужного по нужному пути не находится. А находится лишь по существующему в реестре: "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\1049\ACEINTL.DLL". И тут коса находит на камень. Либа пытается загрузиться:
Code:
00:00:38.000: GetProcAddress(0x00007FFA5FA00000 [c:\program files\common files\microsoft shared\office16\MSO.DLL], 0x0000000000000D98) called from "c:\progra~1\common~1\micros~1\office16\ACEODBC.DLL" at address 0x00007FFA936D7931 and returned 0x00007FFA5FA0F7BC by thread 1.
00:00:38.015: GetProcAddress(0x00007FFA8BA70000 [c:\windows\system32\MSI.DLL], 0x00000000000000CB) called from "c:\program files\common files\microsoft shared\office16\MSO99LWIN32CLIENT.DLL" at address 0x00007FFA62C78A0F and returned 0x00007FFA8BB61740 by thread 1.
00:00:38.015: LoadLibraryExW("C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\1049\ACEODBCI.DLL", 0x0000000000000000, 0x00001000) called from "c:\program files\common files\microsoft shared\office16\MSO30WIN32CLIENT.DLL" at address 0x00007FFA73F92361 by thread 1.
00:00:38.015: Loaded "c:\program files (x86)\common files\microsoft shared\office16\1049\ACEODBCI.DLL" at address 0x0000000068DD0000 by thread 1.  Successfully hooked module.
00:00:38.015: Unloaded "c:\program files (x86)\common files\microsoft shared\office16\1049\ACEODBCI.DLL" at address 0x0000000068DD0000 by thread 1.
00:00:38.031: LoadLibraryExW("C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE16\1049\ACEODBCI.DLL", 0x0000000000000000, 0x00001000) returned NULL by thread 1. Error: %1    Win32 (193).
00:00:38.281: LoadLibraryExW("ACEODBCI.DLL", 0x0000000000000000, 0x00001000) called from "c:\program files\common files\microsoft shared\office16\MSO30WIN32CLIENT.DLL" at address 0x00007FFA73F92361 by thread 1.
00:00:38.281: LoadLibraryExW("ACEODBCI.DLL", 0x0000000000000000, 0x00001000) returned NULL by thread 1. Error:     (126).

Да, сам текст ошибки невозможно прочитать - глюк проги, что выводит зависимости. Но это оно, т.к. более ошибок нет за этим и есть вывод окна/диалога с текстом "Unable to load odbcji32.dll".
И как мы видим, если изначальная библиотека MSO.DLL + ACEODBC.DLL выбираются из правильной папки - для 64битных процессов, то вот библиотека ресурсов тянется "не оттуда": "c:\program files (x86)\common files\microsoft shared\office16\1049\ACEODBCI.DLL".
В итоге я скинул все 5 файлов из подпапки \1033 из пути "c:\Program Files\Common Files\microsoft shared\OFFICE16\1033\" в папку с Тоталом и ....
Первая загрузка почему-то опять обломалась. Тотал встал раком. Напрочь. Помогло лишь закрытие его. НО я решил рискнуть и второй раз открыть xls файл и... и он открылся))) Открылся нашим плагином в 64 битной версии)) с 64 битными дровами))) Все последующие попытки отрыть файл были успешны, быстры, безглючны!

#61:  Author: little-brother PostPosted: Sat Nov 06, 2021 17:53
    —
Отлично Smile Для инструкции правда так себе шаманизм.

А может было бы достаточно рядом с \1033 создать копию и назвать её \1046? Хотя если в реестре ищет, то видимо дохлый номер.

#62:  Author: Destiny PostPosted: Sat Nov 06, 2021 19:39
    —
little-brother wrote:
А может было бы достаточно рядом с \1033 создать копию и назвать её \1046? Хотя если в реестре ищет, то видимо дохлый номер.

Именно. Не помогает.

Но в целом инструкция простой выходит.
1) Ставим драйвера 64 битные командой: accessdatabaseengine_X64.exe /quiet
ключ /passive в последней версии не проходит.
2) Потом по пути HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\FilesPaths
удаляем ключ mso.dll. Ну, или переименовываем в нечто: *mso.dll*
Разумеется "16.0" имеет смысл при установленном 2016 Офисе. Может тут быть и 14.0 и 10.0. И еще какие-то версии.
3) Содержимое папки c:\Program Files\Common Files\microsoft shared\OFFICE16\1033\ копируем в папку C:\Windows\System32
или в папку с установленным Total Commander'ом. Прям рядом с ехе.
4) Открываем xls файл, предварительно, конечно, удостоверившись, что наш плагин установлен и для 32 битного Тотала точно работает.
5) Первая попытка почему-то приводит к фризу всего Тотала. Поэтому мы через диспетчер убиваем его процесс.
6) Открываем Тотал64 заново и опять открываем xls файл. Теперь всё проходит на ура и беспроблемно. Как и все последующие разыWink

#63:  Author: Destiny PostPosted: Sun Nov 07, 2021 14:40
    —
https://www.upload.ee/files/13614384/Compressed1049.rar.html
Это файлы из комплекта Офиса 64 битного. Те самые, что я брал и кидал из папки 1033 по умолчанию после установки драйверов. Только теперь это ресурс 1049. Т.е. инструкцию выше для Русскоговорящих можно дополнить пунктом 7, говорящим, что пункт 3 можно выполнить по другому - прилагаемые файлы из архива скопировать или в папку C:\Windows\System32 или в папку с установленным Total Commander'ом. Прям рядом с ехе.


Last edited by Destiny on Mon Nov 08, 2021 13:42; edited 1 time in total

#64:  Author: little-brother PostPosted: Mon Nov 08, 2021 00:03
    —
О, спасибо. После релиза добавлю инструкцию в Wiki.
Файлы то ж куда-нибудь перехостю.

#65:  Author: Destiny PostPosted: Mon Nov 08, 2021 17:06
    —
Кстати, пункт 5) Первая попытка почему-то приводит к фризу всего Тотала. Поэтому мы через диспетчер убиваем его процесс: оказывается не везде воспроизводится, что радует. Сейчас у человечка настроил этот плагин с этими дровами и у него с первого же раза все открылось. Никаких фризов, зависонов и тормозов. Так что пункт со *, так сказать.

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

Блин, чёт до меня ток ща дошло, а что - тип xlsM наш ODBC не может открыть? Засада однако(((

#66:  Author: little-brother PostPosted: Mon Nov 08, 2021 21:18
    —
Насколько я могу судить, то в 32-битные ODBC драйвера этот формат не поддерживают, а вот 64-битные вполне и потому для 64-битной версии достаточно будет просто поменять DetectString у плагина.

#67:  Author: Destiny PostPosted: Mon Nov 08, 2021 21:37
    —
little-brother wrote:
Насколько я могу судить, то в 32-битные ODBC драйвера этот формат не поддерживают, а вот 64-битные вполне и потому для 64-битной версии достаточно будет просто поменять DetectString у плагина.

А где-то доказательную базу можно найти? Статьи, обсуждения, ещё что-то?
Ибо я пробовал и эту строку менять, и обе битности проверял - как бы нигде и никак не работает...

Просто если никакой вменяемой ошибки не будет получено в ходе дебага, то ... даж не ясно - как ловить причину этой ошибки.
От плагина я получаю только стандартную отмазку "Cant' connect to database" - но мы то знаем, что это не очень полезная и полная ошибка((( А если ODBC не выдает какого-то аналога GetLastError(), то очень плохо...

И всё же что-то похожее должно быть в доступе.
https://social.msdn.microsoft.com/Forums/en-US/84f72ea9-7378-48d7-8391-a9a5ce781114/odbc-error-when-opening-a-xlsm-excel-file?forum=adodotnetdataproviders
там указано, что в схожей ситуации человек всё же получает БОЛЕЕ звучные тексты ошибки/ошибок, что вышло(-ли) в результате попытки открыть файл xlsm. И там весьма хорошие коды есть. А у нас ничего похожего не выводится. Просто не смог и всё. И где и как - не ясно(((
Конечно там другой ЯП, но возможность получения текста ошибки не может же зависеть от этого.


Last edited by Destiny on Mon Nov 08, 2021 21:59; edited 1 time in total

#68:  Author: little-brother PostPosted: Mon Nov 08, 2021 21:54
    —
Code:

} else if (_tcscmp(fileext, TEXT(".xlsx")) == 0 || _tcscmp(fileext, TEXT(".xlsb")) == 0) { ...

Как видно чего то не хватает Smile

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

#69:  Author: Destiny PostPosted: Mon Nov 08, 2021 22:14
    —
little-brother wrote:
чтобы для 32-бит и 64-битные версии отдавали разные строки обнаружения

А эт прям-точно-точно надо? Вроде как что там, что тут - драйвер есть. Значит файл должен бы был браться)))

#70:  Author: little-brother PostPosted: Mon Nov 08, 2021 22:46
    —
32-битный ODBC администратор не различает 32 и 64-битные драйверов и показывает их одним списком. Чтобы убедиться, достаточно запустить его (C:\Windows\SysWOW64\odbcad32.exe) и попробовать создать пользовательский DSN для Excel с xlsm. В результате вернет ошибку с odbcji32.dll, что верно.
Возможно после установки MADE x32 будет добавлен драйвер с .xlsm, но сомневаюсь. Надо будет проверить.

#71:  Author: Destiny PostPosted: Tue Nov 09, 2021 12:03
    —
little-brother wrote:
и попробовать создать пользовательский DSN для Excel с xlsm. В результате вернет ошибку с odbcji32.dll, что верно.

Создал. Ошибок нет. Но не понятно как этим пользоваться и как проверить, что получившийся Франкенштейн работоспособен. Попробовал в пустой книге Экселя создать внешнее подключение, выбрал этот новый DSN, но на этапе выбора таблицы обломался. Типа нет ничего. Хотя точно есть.

#72:  Author: little-brother PostPosted: Tue Nov 09, 2021 18:36
    —
После того, как в исходниках добавил xlsm в строку определения и в указанное выше место, то у меня файл открылся.

Отмечу, что MADE2010 x32 не содержит драйвера Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) и потому, чтобы открывать xlsm требуется версия 2016.

P.S. Пока не выкладываю, т.к. вношу правки для вкл/откл фильтров и темной темы, а также пытаюсь забороть косяк с курсором.
Также надо поправить размер областей в строке состояния, если у пользователя стоит 125% или 150% увеличение для текста.

P.P.S. С 2016 отвалился доступ к mdb. Удалил его, установил 2010, отвалился xlsm. Обычная история Very Happy

#73:  Author: Destiny PostPosted: Tue Nov 09, 2021 20:28
    —
little-brother wrote:
Отмечу, что MADE2010 x32 не содержит драйвера Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) и потому, чтобы открывать xlsm требуется версия 2016.

Я думаю даже и "на всякий случай" не стоит рассматривать вариант с предложением поставить 2010 версию дров. Только 2016)))
Так что считаем однозначным, что набор (*.xls, *.xlsx, *.xlsm, *.xlsb) должен поддерживаться плагиномWink

little-brother wrote:
а также пытаюсь забороть косяк с курсором.

Тут такой момент - если не двигать мышь, то да - это заметно, но как только сдвигаешь хоть на мм. её, то курсор возвращается в обычному состоянию. Эт Раз. Два - для текстовых плагинов есть режим "показ курсора". Включается по F6. В Листере при просмотре/редактировании он работает. Может на это надо как-то реагировать более правильно? типа что-то там возвращать нужное при опросе плагина Тоталом, или самому следить за нажатием)))
И Три - попробуйте дважды быстро нажать F3/F5 - гарантирую - Вы обалдеете)) т.к. ваш плагин раскроется на полный экран. А этого явно не планировалось да и пользы нет от этого режима. Так что что-то надо делать с поддержкой нажатий F1-12.
И с поддержкой ESC - т.к. после активации поиска выйти по нажатию этой кнопки невозможно - оно не работает. Что-то становится типа главным topmost окном и перехватывает это нажатие.

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

little-brother wrote:
С 2016 отвалился доступ к mdb

Это ж вроде Access'овская база данных? Ну, наверное, если и когда появятся пользователи этого чуда - то тогда и можно начать разбираться)))
Все ж хоть это и полноценный продукт Офиса и много что на нем держится, но вот чаще всего на быстрый просмотр ищут именно экселевские файлы.

#74:  Author: little-brother PostPosted: Tue Nov 09, 2021 21:13
    —
Quote:
дважды быстро нажать F3/F5 - гарантирую - Вы обалдеете))

Не, это был баг фикс как раз курсора. Я после поиска строки отправлял в окно Lister нажатие мышки и курсор приходил в норму, только вот при этом отваливается разделитель и выход по Esc, то есть клик не очень хорошее решение как оказалось. При быстром нажатии получается двойной клик и соответственно на весь экран раскрывается. Думаю на F11 добавить, чтобы штатно было (или у Lister своя комбинация?).

.mdb, да, Access. Сам никогда не пользовался, но вот тестирую и на нем. Понятно, что у него распространенность на порядок, а то и два, меньше чем у Excel. Никогда не видел ни одного продукта на этой СУБД.

#75:  Author: Destiny PostPosted: Tue Nov 09, 2021 21:59
    —
little-brother wrote:
При быстром нажатии получается двойной клик и соответственно на весь экран раскрывается. Думаю на F11 добавить, чтобы штатно было (или у Lister своя комбинация?).

Чего-то не догоняю. Комбинация чего? Листер не может и не должен раскрываться на полный экран с потерей заголовка окна. Это глюк какой-то, что у вас эта возможность вообще появилась. От этого надо избавится!
К тому же есть факт падения тотала при "прыжках" то в полный экран, то обратно. Ясно, что это плагин где-то падает, но от этого не легче. Неее. такого "спецпоказа" не должно быть априори!

#76:  Author: little-brother PostPosted: Tue Nov 09, 2021 22:33
    —
Quote:
Листер не может и не должен раскрываться на полный экран с потерей заголовка окна

По умолчанию, если никаких компонент не добавлять в окно Lister, он как раз разворачивается на весь экран Wink Я нашел это, когда решение с курсором искал. А вот то, что крашится, надо смотреть. Едва ли это из-за режима во весь экран.

Quote:
Так что что-то надо делать с поддержкой нажатий F1-12

Lister использует эти клавиши? Добавить то не сложно.

#77:  Author: Destiny PostPosted: Wed Nov 10, 2021 00:10
    —
little-brother wrote:
он как раз разворачивается на весь экран

Стоп. Еще раз. ЧТО вы под полным экраном понимаете? В моем случае полный - это окно листера выводится ПОВЕРХ всех окон, включая панель задач винды, исчезает заголовок окна Листера и панель меню. Т.е. на ВЕСЬ монитор отражается только ваш компонент. У листера такого функционала нет. Особенно в формате "если никаких компонент не добавлять".
Это аналогично тому, чтобы открыть простой текстовый файл в нем, и при поиске добиться этого же фокуса - только т.к. никаких компонент там нет - то на весь экран должно открыться простое белое полотно с вкраплением текста на его верху (файл маленький типа открыли). Но это невозможно!

#78:  Author: little-brother PostPosted: Wed Nov 10, 2021 00:24
    —
Quote:
У листера такого функционала нет

Есть Smile

При стандартном просмотре двойной клик видимо блокируется. Если реализуется какой то плагин, то на окне Lister создается окно плагина, которое Lister автоматически растягивает на всю свою площадь. В моем примере используется кнопка и она обрабатывает нажатия, а вот если использовать Static (TPanel для Delphi), то он пересылает нажатия родителю, т.е. окну Lister, и да, это разворачивает окно на полный экран.

Code:

#define UNICODE
#define _UNICODE

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

BOOL APIENTRY DllMain (HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
   return TRUE;
}

void __stdcall ListGetDetectString(char* DetectString, int maxlen) {
   snprintf(DetectString, maxlen, "ext=\"TEST\"");
}

HWND APIENTRY ListLoadW (HWND hListerWnd, TCHAR* fileToLoad, int showFlags) {
   HWND hMainWnd = CreateWindowEx(0, TEXT("STATIC"), TEXT("test-wlx"), WS_CHILD | SS_SUNKEN | WS_VISIBLE,
      0, 0, 100, 100, hListerWnd, (HMENU)1000, GetModuleHandle(0), NULL);

   return hMainWnd;
}

void __stdcall ListCloseWindow(HWND hWnd) {
   DestroyWindow(hWnd);
   return;
}


Бинарник тут - https://sgeproject.narod.ru/wlx/min.wlx64
(Как видно в коде я вообще ничего не добавляю и не изменяю).

P.S. Такое поведение как минимум работает при просмотре картинок. И там же работает F11. В отличии от F2 (Обновить файл) и F10 (Закрыть Lister), на которые Lister уже перестает реагировать, если прислать из своего плагина.

#79:  Author: Destiny PostPosted: Wed Nov 10, 2021 14:01
    —
little-brother wrote:
P.S. Такое поведение как минимум работает при просмотре картинок. И там же работает F11. В отличии от F2 (Обновить файл) и F10 (Закрыть Lister), на которые Lister уже перестает реагировать, если прислать из своего плагина.

Ужасное поведение Листера в этом плане. Да, на картинках при просмотре встроенным функционалом добился повтора этого поведения.
НО! выходит, что по факту работают только:
F1 справка
F2 заявлено, что этим должна активироваться функция перечитывания открытого файла, но я никак не смог добиться того, чтобы она работала.
Т.е. ну ни при каких обстоятельствах я не смог "пересмотреть" открытый файл.
F3 поиск Далее (кстати, эта клавиша почему-то не указана в меню Листера)
F5 тоже, что и F3 поиск Далее
F6 при просмотре текстового файла - показ курсора, будто бы мы вошли в режим редактирования файла.
F7 вызов диалога Поиска, редактирование его условий
F10 выход
F11 позволяет развернуть/восстановить окно Листера.

Ну так давайте тогда просто свой обработчик глобальный повесим на перехват нажатий этих кнопок и введем свою логику для нихWink
F1 - передаем на обработку Листеру - пускай вызывает свою справку
F2 - ловим и используем в своих целях - для перезагрузки содержимого открытого файла
F3+F5+F7 - используем в своих целях для поиска инфы среди содержимого открытого файла
F10 - ок, используем, будем выходить как и принято в домах Швейцарии)))
F11 - ок, используем, развернуть/восстановить окно Листера вместе с нашим компонентом плагина - вполне нужная весчь
F6 и двойной клик (не важно как он формировался и отправлялся - помним же, что я по нажатию F3 дважды его сэмулировал по сути) полностью игнорим

#80:  Author: little-brother PostPosted: Wed Nov 10, 2021 18:49
    —
С F2 не все так просто: потребуется переписывать кусок кода, выполняемый при инициализации в ListLoad, чтобы его можно было бы вызвать повторно. Да и костыль это получается. Кнопки n и p вот честно перегружают плагин и потому с моей стороны достаточно просто передать их Lister. C F2 ожидалось бы точно такое поведение, но увы.
F2 работает как минимум при просмотре текста. Так что на потом.

F3/F5/F7 уже используются. В том числе с Ctrl и Shift. Тут без изменений.
F1 наверно лучше показывать справку плагина. Наверно даже сделаю переход на Wiki.
F10, то же странно работает - как будто нажимается Alt. Поскольку выход по F10 это какая то экзотика, думаю можно не реализовывать.

P.S. ghisler ответил конечно на вопрос, но толку в ответе никакого. Что делать с курсором - не ясно Sad

#81:  Author: Destiny PostPosted: Wed Nov 10, 2021 20:41
    —
little-brother wrote:
C F2 ожидалось бы точно такое поведение, но увы.
F2 работает как минимум при просмотре текста. Так что на потом.

Увы, но автор так и не ответил вам на ваш вопрос про "Can Lister-plugin catch File > Reload File event?" Значит как минимум этот вопрос там стоит заново поднять, пригласив автора в топик. Указав его никнейм вроде как в вопросе.
И у меня F2 даже в тексте не работает... Но похоже главное это то, что "потребуется переписывать кусок кода, выполняемый при инициализации в ListLoad". Раз это так, то и вправду стоит на очень "потом" отложить это дело)))

little-brother wrote:
F10, то же странно работает - как будто нажимается Alt. Поскольку выход по F10 это какая то экзотика

Ну, почему-то срабатывание Alt - это какая-то особенность плагина. На чистом Листере - без подгруженных компонентов/плагинов F10 честно срабатывает как выход. Но эта кнопка как и сам ESC - не везде адекватно поддерживается. Именно в случае сторонних компонент и встраиваемых плагинов. НО! если в принципе перехват и возможность реализации поддержки для этой кнопки "условно говоря" ничего особо не стоят, то, имхо, будет куда полезнее реализовать это "стандартное листеровское" поведение на выход, чем оставлять текущее непонятное мимикрирование под нажатие кнопки Alt.

little-brother wrote:
ghisler ответил конечно на вопрос, но толку в ответе никакого

Значит вступаем в продолжительную переписку))), задаем уточняющие вопросы.

#82:  Author: little-brother PostPosted: Wed Nov 10, 2021 20:59
    —
Quote:
почему-то срабатывание Alt - это какая-то особенность плагина

На минимальном плагине, в котором то и кода нет, F10 также имитирует нажатие Alt, а не F10. Имхо, это все последствие каких то костылей в Lister.

Quote:
Значит вступаем в продолжительную переписку))), задаем уточняющие вопросы.

Да вроде пофиксил, правда мне не очень нравится как (через SetCursor, который меняет курсор глобально).
Да и не факт, что ghisler знает - TC, ранее во всяком случае, был написан на старой версии Delphi, т.е. использовал уже готовые компоненты. Сейчас скорее всего это уже не так, т.к. до 7 включительно не было поддержки юникода, который в Windows используется по умолчанию.

#83:  Author: Destiny PostPosted: Thu Nov 11, 2021 16:29
    —
little-brother wrote:
На минимальном плагине, в котором то и кода нет, F10 также имитирует нажатие Alt, а не F10. Имхо, это все последствие каких то костылей в Lister.

ИМХО, тем более надо перекрыть эту клавишу своей логикой - срабатывания нажатия ESC|выход. Чтоб уж никакой ALTернативщины не было)))
little-brother wrote:
правда мне не очень нравится как (через SetCursor, который меняет курсор глобально).

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

#84:  Author: little-brother PostPosted: Thu Nov 11, 2021 19:16
    —
Quote:
надо перекрыть эту клавишу своей логикой

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

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

Переставал работать выход по Esc, да и при быстром F3 получался двойной клик, который разворачивает окно на весь экран. Так себе поведение. Сейчас стабильно работает.

P.S. Поддержку csv отключил в новом релизе.

#85:  Author: Destiny PostPosted: Thu Nov 11, 2021 22:52
    —
little-brother wrote:
С какой то версии надеюсь, что F2 и F10 заработают как надо.

Ой, я бы не надеялся, ой, не надеялся.....
Намного более полезно и правильно будет приделать свои "костыли" к этим клавишам.

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

Кстати, в вики надо бы уточнить, что число 16 во всех упоминаниях процесса установки 64 битных дров - это потому,
что на компе в момент работы с драйверами стоял офис 2016.
Если у кого-то стоит 2019 - то там вроде как 19 будет)) А то все начнут искать ТОЛЬКО элементы с 16 внутри и попадут в тупик, не найдя их у себя.

И вместо строгого пути вида "c:\Program Files\totalcmd\" лучше указать "%COMMANDER_PATH%" - ибо мало ли кто куда поставил тотал? А так - в этой переменной этот путь должен быть указан.

#86:  Author: Destiny PostPosted: Tue Feb 22, 2022 12:02
    —
little-brother
гипотетический вопрос - а эти драйвера не могут показывать/выдавать код VBA из модулей/листов/книги?
Было бы очень приятно, кроме таблиц увидеть (при наличии) и код макросов/VBA, что встроен в просматриваемый excel файл с макросам - xlsm.

#87:  Author: little-brother PostPosted: Tue Feb 22, 2022 20:17
    —
Практически уверен, что код показать не смогут.
Получить список макросов (в терминах баз данных - процедуру) или запустить - небольшая, особенно для Excel, вероятность есть.

#88:  Author: Destiny PostPosted: Tue Feb 22, 2022 23:53
    —
https://www.codeproject.com/Articles/15216/Office-2007-bin-file-format
https://www.decalage.info/vba_tools
https://interoperability.blob.core.windows.net/files/MS-OVBA/%5bMS-OVBA%5d.pdf

это вроде как может помочь с доступом/выборкой кода VBA из файла-проекта!
Если что - можно интегрировать в плагин и будет супер-такой плаг, который может такое, что не могут другие)))

#89:  Author: little-brother PostPosted: Wed Feb 23, 2022 01:05
    —
Странно, что формат бинарный. Вроде как с 2007-го файлы это просто архивы и там xml-ки хранятся. Возможно макросы как бинарные данные и держатся (проверить не могу, у меня Office 2003 при сохранении в 2007 теряет макросы). В целом дохлый номер в бинарном формате рыться. Тем более в таком, т.к. наверняка там куча нюансов.

Макросы можно достать через OLE-интерфейсы, установленного Office, т.е. без Office не будет работать в отличии от ODBC драйверов. Работать с OLE в C, на котором написан плагин, очень больно, и потому потребуется сменить его на С++. К этому я не готов.
Другой вариант - это вызывать скрипты, напр. PowerShell, но там могут возникнуть проблемы с правами.

Как мне кажется - для ODBC-плагина данный функционал излишен, т.к. другие то базы данных макросов не имеют. Гораздо проще сделать дополнительный плагин, который будет помещен после odbc-плагина по иерархии и который будет содержать список макросов. В таком случае его надо писать с нуля, и можно сразу на С++.

Хотя думаю хватит мне развлекаться - надо начинать работу искать Very Happy

#90:  Author: Destiny PostPosted: Fri Feb 25, 2022 11:44
    —
little-brother
день добрый!

хоть и поиск Р. - очень важное дело - в плагине ошибка вылетает.
Таких файлов много.. Просьба посмотреть:
w w w.upload.ee/files/13916710/export.xlsx.html

типа синтаксическая ошибка в выражении FROM.

#91:  Author: little-brother PostPosted: Fri Feb 25, 2022 12:41
    —
Quote:
Таких файлов много

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

Видимо надо по наличию хвоста после $ выкидывать.
Видимо надо действовать более хитро...

P.S. Изменил логику добавления листа в список таблиц: помимо проверки на SYSTEM_TABLE в список попадут и те, которые заканчиваются строго на $'.

Просьба потестировать, в том числе и на таблицах имеющих именнованные диапазоны и фильтры разные. Все ли данные в наличии или может есть что-то лишнее? В Excel не силен, многих его особенностей не знаю.
https://disk.yandex.ru/d/iWOiXPcfwuIDUg

#92:  Author: Destiny PostPosted: Fri Feb 25, 2022 14:06
    —
little-brother wrote:
Просьба потестировать

кажется проблем больше нет.
разве что шероховатости. В названии листов остался знак $ в конце. Если уж по ему идет обрезание, то и его самого логично обрезать))

но если это упрощает использование листов во внутренних процедурах вызовов Select From - то конечно можно не убирать его.

И порядок листов странный. Не тот, что в открытой книге экселя.
У меня: "Export Worksheet", "Лист1", "Sheet2", "Лист 3"
в плагине: 'Sheet2$', 'Лист1$', 'Export Worksheet$', 'Лист 3$'

#93:  Author: little-brother PostPosted: Fri Feb 25, 2022 15:46
    —
Quote:
В названии листов остался знак $ в конце

Кавычки то же, если в имени есть пробелы Wink Да, при запросе данных Excel требует этот знак вопроса и кавычки. По хорошему их надо убрать конечно, т.е. отображать одно имя, а запрашивать по другому. Подумаю, можно ли это сделать как то малой кровью.

Quote:
порядок листов странный

Это уже издержки ODBC. Он рассматривает книгу как СУБД, где таблицы не имеют порядка - в список они добавляются в том порядке, в каком ODBC их возвращает. Можно конечно его отсортировать по имени, но вот исходный порядок книги не думаю, что можно восстановить.

#94:  Author: Destiny PostPosted: Sat Feb 26, 2022 14:18
    —
little-brother wrote:
Кавычки то же, если в имени есть пробелы Да, при запросе данных Excel требует этот знак вопроса и кавычки. По хорошему их надо убрать конечно, т.е. отображать одно имя, а запрашивать по другому. Подумаю, можно ли это сделать как то малой кровью.


Если они имеют реальный вес при формировании запросов, то фиг с ними. Пусть малая кровь будет значить, что мы будем видеть эти символы в именах листов. Главное, теперь нет проблем с просмотром ранее непросматриваемых файлов)))

Оформляться в релиз будет сборка скоро?

#95:  Author: little-brother PostPosted: Sat Feb 26, 2022 15:22
    —
Готово! Razz

#96:  Author: Destiny PostPosted: Mon Mar 07, 2022 23:07
    —
w w w . upload.ee/files/13944193/static.xls.html
там странная ошибка опять с именем листа...

#97:  Author: little-brother PostPosted: Tue Mar 08, 2022 00:47
    —
Проблема в именах с подчеркиванием: символ _ не требует, чтобы имя таблицы было в кавычках, а я этот аспект забыл учесть и в результате получалось двойное окавычевание.

Фикс - https://disk.yandex.ru/d/xAqXaXgAOuqbuA

#98:  Author: Destiny PostPosted: Tue Mar 08, 2022 11:54
    —
Ок, работает!

#99:  Author: Destiny PostPosted: Mon Mar 21, 2022 23:35
    —
В тексте ячейки экселя порой есть вставленный принудительно перенос на новую строку. Т.е. текст в обычном виде будучи вписанным - занимал бы всю длину ячейки - если бы мы ее визуально взяли и растянули на много нужных см. для прочтения ее текста. А после нажатия ALT+ENTER в тексте вставляется перенос строки и в ячейке появляется многострочный текст. И так можно уменьшать требуемый размер длины ячейки для прочтения ее содержимого. Так вот плаг такие тексты отображает просто слитно Crying or Very sad
Нет, я понимаю, что многострочность он не обязан и не умеет поддерживать в рамках одной ячейки виндового table-контрола. НО! может такой символ просто стоит заменить чистым пробелом?

А то в экселе это так:
Пример
много-много
строк

А в плагине это так:
Примермного-многострок

Не фига не читается((((

#100:  Author: little-brother PostPosted: Tue Mar 22, 2022 00:39
    —
Отсутствие многострочности - это ограничение WIndows-контрола.
С заменой переноса строк на пробелы может быть проблема с производительностью. Сейчас когда ячейке отрисовывается, она запрашивает данные из кеша и выдает как есть. Сделать замену в кеше - неправильно, т.к. при копировании строк нужно отдавать оригинальный текст. Поэтому надо либо добавлять еще один кеш, где выполнена замена, либо отдавать текст с заменой на лету. Первый вариант делает код странным. Со вторым - надо либо с памятью колдовать (текст с заменой надо удалять) или будет ограничение в 255 символов, что не очень. Тупик.

По аналогичной причине я остановил разработку ссылок.

Есть вариант добавить всплывающую подсказку, если курсор стоит над ячейкой с переносами. Он мне также не кажется особо удачным.

Самое правильно видимо самому полностью отрисовывать ячейку, но мне с этим разбираться лень (там легко можно накосячить).

#101:  Author: Destiny PostPosted: Thu Mar 24, 2022 12:09
    —
Всё понятно))) вопросов больше не имеем!

ЗюЫю
хотя...
little-brother wrote:
Есть вариант добавить всплывающую подсказку, если курсор стоит над ячейкой с переносами.

Это хоть как-то бы спасло положение дел, имхо.
Но все на усмотрение автора оставим, конечно же.

#102:  Author: Destiny PostPosted: Tue Mar 29, 2022 22:32
    —
Хелп! СОС!
Очень занятная ситуация.
Есть два компа. Разных. Капитально. НО тотал со своими плагинами - один и тот же. Своя сборка.
И вот на последнем 0.9.7 сабже один и тот же экселевский файл - ПУСТОЙ!!! Созданный с нуля - пустой файл - на одном компе открывается в плагине, а вот на другом - ооочень молчаливо и наглухо грохает весь тотал. Дамп сохраняет лишь инфу, что в odbc-wlx.wlx!cbNewMain() + 0x4c5c bytes падение зафиксировано. Был бы дебаг вариант плагина - наверное с точностью до строки кода сказал бы что и где... НО чего нет - того нет. Ну и понятно дело - что пересылать вам: тоже не понятно что(((. Сборка же реально одинаковая везде и в полтора гига в архиве.... А на одной копии падает - на другой нет. Падение же воспроизводится даже на пустом файле - т.е. тут ничего особенного.
Как будем лечиться?
Есть визуал студия 2010 на всяк случай. Хоть и сборку делаете под MinGW..

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

Проверка 0.9.6 и 0.9.5 показало, что в 6 версии так же есть падение, а вот в 5 никаких проблем. Это все на то самом компе, где и увидел вообще падание. На другом - никакая версия не падает...
ОС на обоих компах - одна и та же: Win10 LTSC build 17763...

#103:  Author: little-brother PostPosted: Wed Mar 30, 2022 03:48
    —
Попробуйте - https://disk.yandex.ru/d/P3nsAdJOAf-f7g
Добавил вывод сообщений после каждого этапа и отладочную информацию (убрал флаги -Os и -s и добавил -g). Интересует, что выводит последним.

Студия у меня то же есть, просто как то к Code::Blocks привык, который mingw по умолчанию использует и не такой жирный как Студия.

Quote:
и в полтора гига в архиве

Хотя кому это я про занимаемое место рассказываю Very Happy

#104:  Author: Destiny PostPosted: Wed Mar 30, 2022 11:43
    —
Инициализация ОК
Соединение установлено
Параметры прочитаны
Компоненты созданы
Список таблиц получен
Найдена таблица
Найдена таблица
Список таблиц построен
Тема и шрифт заданы
Выбран первая строка в списке (шо за акцент? выбран мух? Laughing )

WMU_UPDATE_GRID - заголовок окна
Инициализация-ОК
Удалены предыдущие фильтры
Удалены предыдущие колонки
Добавлены кавычки для имени таблицы
ODBC запрос сформирован
ODBC запрос выполнен
ODBC обработка завершена
Обновление кеша выполнено

ДАМП........

И вот еще момент. Хоть сборка и одинаковая, но там, где падает, оказывается, я запускал с ярлыка 32битный тотал.
А вот в 64 битном тотале - плаг уже не падает! Т.е. собака порылась где-то в этой области!
Там идет уже после "Ширина колонок изменена", "Данные обновлены" и показывается окно плагина с требуемой таблицей.

#105:  Author: little-brother PostPosted: Wed Mar 30, 2022 13:31
    —
https://disk.yandex.ru/d/a_F0wf_kT8u8tw
Удалил вывод всех сообщений до этого и добавил подробное описание для операций по изменению ширины колонок. Достаточно последнее сообщение, т.к. они все равно по порядку идут.

Я думал, что где то ранее падает, а это похоже все-таки какая особенность Windows (в духе упасть, если окна нет и для него выставляется какой то стиль).

#106:  Author: Destiny PostPosted: Wed Mar 30, 2022 14:24
    —
little-brother wrote:
Удалил вывод всех сообщений до этого и добавил подробное описание для операций по изменению ширины колонок

ну и теперь ничего нет - сразу падение.

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

Теперь дебагер показывает
> odbc-wlx.wlx!Menu_SetItemState() + 0xd9e bytes

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

Я думаю, если получиться собрать в студии и с файлами pdb - то в таком случае я смогу открыть дамп падения совершенно четко.
Без угадываний - на какой строке что не так пошло)))

#107:  Author: little-brother PostPosted: Wed Mar 30, 2022 15:56
    —
Попытался сам собрать в MSBuild 2015 - ошибка C2057. Беглым поиском нашлось, что компилятор C/C++ от Студии не умеет в массивы переменной длины, т.е. вот такой код невалиден для Студии, хотя и соответствует стандарту C99
Code:

int main() {
   int len = 10;
   int arr[len];
}


Причина насколько я понял в том, что один и тот же компилятор используется для C (в нем допустимо) и C++ (а здесь вроде как нет). Хотя mingw (gcc и g++) поддерживает такое без проблем.

P.S. Загрузился под 10-кой. Да, вылет есть, так что отловить проблему будет проще наверно (если она не в ODBC-части).

P.P.S. Падает на 1176 строке
Quote:

ListView_SetColumnWidth(hGridWnd, 0, w + 1);

Возможно от того, что контрол таблицы еще не виден. Это конечно за гранью бобра (вызов должен вернуть ошибку, а не заваливать приложение). Надо подумать как это пофиксить.

В целом странно, что другие плагины не падают или никто не сообщил об этом. Видимо Win10x64 + TCx32 редкая связка или плагинами не пользуются Very Happy

P.P.P.S. Добавил проверку на видимость контрола и вроде все заработало. Просьба проверить - https://disk.yandex.ru/d/IcUy72hc7sfxHg

#108:  Author: Destiny PostPosted: Wed Mar 30, 2022 20:35
    —
little-brother wrote:
Просьба проверить - https://disk.yandex.ru/d/IcUy72hc7sfxHg

Работает!!!

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

little-brother wrote:
В целом странно, что другие плагины не падают

Думается мне, что найти плагин, написанный целиком на голом С и win32API - это надо охренеть как постараться)))
А что и как во фреймворках сделано для обработки этой ситуации - хз. Может прям там есть строки в их исходниках: для обхода глюка под виндой делаем вот так... и там они так же проверяют видимость)))

#109:  Author: little-brother PostPosted: Wed Mar 30, 2022 20:58
    —
Да я про другие свои плагины (пять что ли) - там же такой же код используется.
Сторонние плагины не падают, поскольку видимо используют уже Net-окошки, которые со стандартными компонентами не связаны.

В целом поведение Win10 начинает удручать - какие то странные косяки, то с Richedit контролом, то вот с этим. Походу реализация стандартных контролов там уже левой пяткой деляется.

#110:  Author: Destiny PostPosted: Wed Mar 30, 2022 22:09
    —
little-brother wrote:
Походу реализация стандартных контролов там уже левой пяткой деляется.

Отсюда правило - надо набирать свою библиотеку контролов. Можно и скопиженную откуда-то)). Можно и большую по объему. Главное, чтобы такие глюки там не существовали по умолчанию)))

#111:  Author: little-brother PostPosted: Wed Mar 30, 2022 22:42
    —
Думаю везде хоть какие то глюки да найдутся. Нет идеального решения.
Если бы я зарабатывал разработкой плагинов, то имело хоть какой то смысл, а так - плагино-писание just-for-lulz.

#112:  Author: Destiny PostPosted: Thu Mar 31, 2022 13:46
    —
little-brother
А с фильтрами ничего такого не сломалось случайно параллельно?
У меня они не работают в этой версии.
Есть столбец с номерами телефонов. Вбиваю номер - его нет. ХОТЯ! он первый в этом столбце! Т.е. 10000% он есть.
Вбиваю просто цифру 9, все мобильные номера с 9 (что после +7) начинаются в моем списке - и ... 0 совпадений.
Хотя это ВСЕ номера, т.е. ВСЯ таблица! Т.е. фильтр просто должен был оставить всё, что показано было без него.

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

Ммммм. вон оно что!
Если в плагине открывается файл csv - то поиск приводит к желаемому.
А вот если это xlsx файл - то ничего не ищется((( Что весьма странно, ибо в плагине
явно же ЛИШЬ текстовые значения. Нет каких-то особых форматов, как в самом экселе,
где число в формате Число - это не число в формате Текст. Там-то этой головной боли хватает...


Last edited by Destiny on Thu Mar 31, 2022 15:48; edited 2 times in total

#113:  Author: little-brother PostPosted: Thu Mar 31, 2022 15:31
    —
Странно. Можно пример с парой строк?

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

#114:  Author: Destiny PostPosted: Thu Mar 31, 2022 15:44
    —
little-brother wrote:
Странно. Можно пример с парой строк?

Дык любой само собой сгенерённый подойдет.

Просто в экселе вставляем, к примеру, 9991234567 в ячейку, сохраняем в xlsx и потом тут же в csv. И проверяем полученные файлы.


Last edited by Destiny on Thu Mar 31, 2022 16:19; edited 3 times in total

#115:  Author: little-brother PostPosted: Thu Mar 31, 2022 16:09
    —
Да так то я проверил - все ок вроде. Данные в памяти хранятся как строки, так что в любом случае искать должен без проблем.

#116:  Author: Destiny PostPosted: Thu Mar 31, 2022 16:09
    —
Я тут пошел по рукам))) По дефолтным инишкам, сравниваю свои значения с этими, выставляю желаемое... И вот немного подзавис в некоторых местах.
1. csvtab. Сугубо для точности: текст "Remove spaces and TABs the beginning and end of values" упустил предлог at: "Remove spaces and TABs at the beginning and end of values"
2. Для jsontab плагина есть запись: header-row = 1 ; 0/1
НО! в плагине в меню даже нет команды Спрятать/показать Заголовки! Т.е. вставляй/не вставляй/меняй/не меняй значение этой опции - ничего не изменится в плагине.
3. Точно такая же проблема для xmltab плагина. В ини есть header-row = 1 ; 0/1, но в меню плагина соответствующего пункта/команды нет.
4. Для плагина xmltab у меня нашлась опция format=1, но в описании инишника такой нет. Это что-то было когда-то? Уже и не найду концов...

#117:  Author: little-brother PostPosted: Thu Mar 31, 2022 16:20
    —
1. Спасибо, поправлю.
2, 3 - ага, лишнее затесалось.
4 - отвечает за форматирование XML при выводе на вкладке. Если XML уже был отформатирован, то разницы нет. В default.ini да, описание оказалось пропущенным.

#118:  Author: Destiny PostPosted: Thu Mar 31, 2022 16:22
    —
little-brother wrote:
Да так то я проверил - все ок вроде.

https://www.upload.ee/files/14011380/_tests.zip.html
вот три файла, у каждого из двух вложенных экселевских файлов свой прибабах в отрисовке плагином этих номеров телефонов (обратите внимание на оконцовку номера - в одном случае её нет - как и должно быть, а в другом - ".0" - хотя в оригинале её нет - И ЭТО по идее тоже ещё одна ошибка / глюк работы ODBC драйвера что ли? Хорошо бы это убрать). НО мои слова по поиску они отражают полностью. В csv поиск/фильтрация есть, а в двух экселевских - шиш.

#119:  Author: little-brother PostPosted: Thu Mar 31, 2022 17:02
    —
Quote:
а в двух экселевских - шиш.

Доступно в платной версии плагина! Laughing Laughing Laughing

В приведенных файлах ошибка повторилась, буду смотреть.

#120:  Author: Destiny PostPosted: Thu Mar 31, 2022 17:28
    —
little-brother wrote:
ошибка повторилась, буду смотреть

и про лишнюю оконцовку ".0" тоже гляньте)))

#121:  Author: little-brother PostPosted: Thu Mar 31, 2022 19:36
    —
С нулем - это похоже косяк 32-битных драйверов. В коде я запрашиваю данные в виде строки, а ODBC почему отдает значение с нулём. При этом такое поведение будет только если тип колонки определился как числовой, что происходит если все значения в ней, кроме заголовка, если используется, числа.

Причина оказалась в том, что Excel именует колонки как F1, F2, ... если имена не заданы, а в плагине для удобства они назывались Column #N. Учел этот момент при запросе данных и все заработало, заодно баг для НЕ-фильтра нашелся.

Просьба проверить - https://disk.yandex.ru/d/bn3VUcVyqk9_Aw

#122:  Author: Destiny PostPosted: Thu Mar 31, 2022 20:52
    —
little-brother wrote:
Просьба проверить

Поиск/Фильтр - работает.

Насчет конечного нуля не понял.
Я и в 32бит. и в 64 битн. версии что тотала, что плагина наблюдаю это поведение.
Причем странность-то в том, что я ДВА эксель файла приложил же! И в одном этот ноль есть, а в другом - его нет! А все остальные условия хранения в столбце этих данных - одинаковы! Общий тип данных, просто цифры, нет форматирования, нет заголовков. Так ЧТО тут виновато? И вот почему в разных файлах это по разному выходит? Они же даже в одних и тех же ячейках записаны, эти данные. Тогда тут ODBC должно было в обоих случаях выдавать ноль с точкой - типа драйвер определил (хотя кто его просил?) что это дробное число и надо показать это как ЧИСЛО.0

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

Хотя. Это бред, но факт. В xls файле число выровнено по правому краю ячейки и выводится плагином как "дробное число.0"
А в xlsx файле число выровнено по левому краю! А это признак текста! И плагином это как "целое число" рисуется.
А формат-то единый = общий на них! А каких-либо спецсимволов в этих числах нет! А трактовка экселем выполнена по-разному этих данных!
Это просто угар какой-то. Ну и в этом случае - вряд ли как-то извне можно повлиять на выдачу ODBC одинаковым образом этих данных.
Тут же уже сам эксель воспринимает их по разному... Капитально...

#123:  Author: little-brother PostPosted: Thu Mar 31, 2022 22:05
    —
В 10-ке может уже и по другому - я на Win7x64 привел результаты.
Зависит еще от типа заданного для ячейки. Ну и подозреваю, что в зависимости от битности/версии в ODBC-драйвере для Excel могут быть разные значения по умолчанию/алгоритмы, как выдавать такую колонку.

xlsx и xls по сути это разные форматы, потому и код там тож наверно разный. Отсюда и различия.

Можно конечно нашлепку сделать: если Excel, если то-то и то-то, то последний ноль выкинуть. Криво конечно, зато будет работать. Но значения вида 10.0 будут уже усекаться до 10.

#124:  Author: Destiny PostPosted: Thu Mar 31, 2022 22:34
    —
little-brother wrote:
Можно конечно нашлепку сделать: если Excel, если
это XLS файл, то обрубаем ровно ".0".
Я тут погонял тесты. И выходит - как не изгаляйся - именно в этом формате книги эксель через ODBC выдает числа как дробные с окончанием ".0" - если они по факту целые.
Всякие 123.321 конечно же показываются точно так же.
А вот 12.00 или 987.20 или 456.00000 - будут урезаны до 12.0, 987.2, 456.0. Всегда и по-любому!
Поэтому В любом смысле эта пришлёпка ".0" никак на число не влияет и не меняет его - если мы их получаем не с листа напрямую, а через ODBC.
В этом случае - мы УЖЕ добровольно согласились на возможные несуразицы передачи данных по протоколу хз какого года.
Можно пришлёпку кромсать нафиг. Если это Excel и если это XLS файл)))


Last edited by Destiny on Fri Apr 01, 2022 11:05; edited 1 time in total

#125:  Author: little-brother PostPosted: Thu Mar 31, 2022 23:53
    —
https://disk.yandex.ru/d/q93sYM3sgExEXA

Если замечаний нет, то опубликую.

Quote:
по протоколу хз какого года.

Используемый WinAPI значительно бородатее!

#126:  Author: Destiny PostPosted: Fri Apr 01, 2022 01:36
    —
little-brother wrote:
Если замечаний нет, то опубликую.

Кажется все весьма шикарно работает!

#127:  Author: imig73Location: г. Иркутск PostPosted: Sat Apr 02, 2022 12:33
    —
little-brother
Прошу вас odbc-wlx.ini расположить по умолчанию в папке с плагином.

#128:  Author: little-brother PostPosted: Sun Apr 03, 2022 16:50
    —
А в чем смысл то?

#129:  Author: Destiny PostPosted: Tue Feb 13, 2024 12:38
    —
little-brother
А когда первая строка из файла переходит в заголовок таблицы - разве там НАДО производить какие-то обязательные исправления в символах?
Вроде как нет - ибо это же текст пользователя из файла прямиком взят. Не?

Ибо вот моя первая строка в Excel таблице с текстом:
Дата:<TAB>13.02.2024
если переходит в заголовок при просмотре плагином, то превращается в
Дата:<TAB>13#02#2024
И лишь когда возвращается в раздел "просто 1 строка данных" - то опять становится с датой 13.02.2024.
<TAB> - это я вставил для понимания, что это разрыв колонок. Данные в двух колонках.

Вроде как в CSV с такой же опцией контроля положения заголовка/первой строки я такого не замечал.

#130:  Author: little-brother PostPosted: Wed Feb 14, 2024 15:45
    —
odbc плагин отображает то, что получил из odbc-драйвера, который похоже эту замену и делает. Повлиять на драйвер скорее всего нельзя.

#131:  Author: Destiny PostPosted: Wed Feb 14, 2024 16:48
    —
В смысле? Хотите сказать, что факт превращения строки либо в заголовок, либо в просто строку текста - зашит на уровне запроса "дай данные" в драйвере ODBC?
И типа если нужны данные с заголовком - то они такие, а если без - то они другие???

А нафига так сложно и непредсказуемо???? Почему просто на уровне логики кода плагина - не рисовать первую строку ЛИБО в заголовке над фильтром,
ЛИБО в таблице с данными?

#132:  Author: little-brother PostPosted: Thu Feb 15, 2024 20:37
    —
Quote:
зашит на уровне запроса "дай данные" в драйвере ODBC?

Именно. Если стоит флаг в выпадающей менюшке, то в Excel улетит то, что первую строку надо как имена колонок интерпретировать.

Quote:
А нафига так сложно и непредсказуемо?

Сделано как раз относительно просто: сначала отправляется запрос в ODBC-драйвер "select * from <ИмяВыбраннойТаблицы> where 1 = 2", из которого получаются имена колонок, а потом уже второй запрос без where для получения данных.
Если Excel не сказать, что первая строка это заголовок, то имена колонок в результате будут COLUMN1, COLUMN2 и т.д, и чтобы их отобразить потребуется эквилибристика с первым запросом, который должен будет читать первую строку. То есть придется для Excel делать свою ветку обработки.

То, что в вашем случае, при такой логике отображение не совсем верное, - ну что ж бывает.

#133:  Author: Destiny PostPosted: Fri Feb 16, 2024 10:29
    —
Ладно-понятно. Что ж. Не будем усложнять неподъемное)))

#134:  Author: Destiny PostPosted: Wed Mar 13, 2024 12:26
    —
Ок, следующий момент. Может я что-то явное упустил, конечно...
При получении данных по полю ДАТА (точнее - стиль ячейки ОБЩИЙ, но там явная дата прописана
просто текстом и явно движок Экселя/ODBC будет стараться вытащить именно ОБЪЕКТ _дата_....)
В самом Excel это поле с этим значение выглядит по-русски)))
Code:
11.03.2024

А вот в просмотре плагином это выглядит как:
Code:
2024-03-11 00:00:00


Соответственно простой вопрос - КАК сделать в плагине просмотр так же как и в Excel))))

#135:  Author: little-brother PostPosted: Thu Mar 14, 2024 21:18
    —
Сейчас плагин, когда видит поле с типом Дата, запрашивает его как текст. В этот момент происходит конвертация с локалью по умолчанию. Бегло поискал по интернету. Насколько могу судить ODBC-драйвер для Excel не имеет каких либо специальных настроек по поводу конвертации с учетом локальных настроек компьютера.

Единственный вариант, который приходит на ум, попробовать выставить у колонки тип Текст.

Возможно, если запрашивать данные как SQL_TIME и SQL_DATE, и самому ручками приводить их к виду, заданному в системе, то получится как в Excel, но это надо разбираться, что пока лениво.

#136:  Author: Destiny PostPosted: Fri Mar 15, 2024 13:14
    —
А вот для случая, когда ODBC подключение идет для Excel базы, есть такой пример:
SELECT {fn CDbl(DateTimeCol)} FROM MyTable
т.е. идет конвертация внутренней функцией CDbl() значения из поля с данными в виде числа
(типа изначально там ошибочно сохранили именно не дату, а ее числовой представление)
Так может так же вставить функцию конвертации? Что-то типа:
{fn Format(CDate(date_as_string), "dd.mm.yyyy")}

Или может прям сразу такое:
to_char(entrydate, 'dd.mm.yyyy')

#137:  Author: little-brother PostPosted: Sun Mar 17, 2024 01:21
    —
Можно наверно и таким образом попробовать, т.е. на основании типов генировать не "select * from t", а "select id, name, convert(sale_date as string) from t" и посмотреть вернет ли нужный результат или нет.

Скорой правки не обещаю. Проверю как будет возможность и самое главное - желание.

#138:  Author: Destiny PostPosted: Sun Mar 17, 2024 14:06
    —
Ок, подождем, если что... Главное, что вообще попробуем))))



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


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

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group