Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[wlx] odbc-wlx - просмотр Access, Excel, CSV файлов
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Thu Mar 31, 2022 19:36    Post subject: Reply with quote

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

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

Просьба проверить - https://disk.yandex.ru/d/bn3VUcVyqk9_Aw
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Thu Mar 31, 2022 20:52    Post subject: Reply with quote

little-brother wrote:
Просьба проверить

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

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

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

Хотя. Это бред, но факт. В xls файле число выровнено по правому краю ячейки и выводится плагином как "дробное число.0"
А в xlsx файле число выровнено по левому краю! А это признак текста! И плагином это как "целое число" рисуется.
А формат-то единый = общий на них! А каких-либо спецсимволов в этих числах нет! А трактовка экселем выполнена по-разному этих данных!
Это просто угар какой-то. Ну и в этом случае - вряд ли как-то извне можно повлиять на выдачу ODBC одинаковым образом этих данных.
Тут же уже сам эксель воспринимает их по разному... Капитально...
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Thu Mar 31, 2022 22:05    Post subject: Reply with quote

В 10-ке может уже и по другому - я на Win7x64 привел результаты.
Зависит еще от типа заданного для ячейки. Ну и подозреваю, что в зависимости от битности/версии в ODBC-драйвере для Excel могут быть разные значения по умолчанию/алгоритмы, как выдавать такую колонку.

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

Можно конечно нашлепку сделать: если Excel, если то-то и то-то, то последний ноль выкинуть. Криво конечно, зато будет работать. Но значения вида 10.0 будут уже усекаться до 10.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Thu Mar 31, 2022 22:34    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Thu Mar 31, 2022 23:53    Post subject: Reply with quote

https://disk.yandex.ru/d/q93sYM3sgExEXA

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

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

Используемый WinAPI значительно бородатее!
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Fri Apr 01, 2022 01:36    Post subject: Reply with quote

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

Кажется все весьма шикарно работает!
Back to top
View user's profile Send private message
imig73



Joined: 18 Jun 2013
Posts: 279
Location: г. Иркутск

Post (Separately) Posted: Sat Apr 02, 2022 12:33    Post subject: Reply with quote

little-brother
Прошу вас odbc-wlx.ini расположить по умолчанию в папке с плагином.
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Sun Apr 03, 2022 16:50    Post subject: Reply with quote

А в чем смысл то?
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Tue Feb 13, 2024 12:38    Post subject: Reply with quote

little-brother
А когда первая строка из файла переходит в заголовок таблицы - разве там НАДО производить какие-то обязательные исправления в символах?
Вроде как нет - ибо это же текст пользователя из файла прямиком взят. Не?

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

Вроде как в CSV с такой же опцией контроля положения заголовка/первой строки я такого не замечал.
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Wed Feb 14, 2024 15:45    Post subject: Reply with quote

odbc плагин отображает то, что получил из odbc-драйвера, который похоже эту замену и делает. Повлиять на драйвер скорее всего нельзя.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Wed Feb 14, 2024 16:48    Post subject: Reply with quote

В смысле? Хотите сказать, что факт превращения строки либо в заголовок, либо в просто строку текста - зашит на уровне запроса "дай данные" в драйвере ODBC?
И типа если нужны данные с заголовком - то они такие, а если без - то они другие???

А нафига так сложно и непредсказуемо???? Почему просто на уровне логики кода плагина - не рисовать первую строку ЛИБО в заголовке над фильтром,
ЛИБО в таблице с данными?
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Thu Feb 15, 2024 20:37    Post subject: Reply with quote

Quote:
зашит на уровне запроса "дай данные" в драйвере ODBC?

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

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

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

То, что в вашем случае, при такой логике отображение не совсем верное, - ну что ж бывает.
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Fri Feb 16, 2024 10:29    Post subject: Reply with quote

Ладно-понятно. Что ж. Не будем усложнять неподъемное)))
Back to top
View user's profile Send private message
Destiny



Joined: 15 Dec 2015
Posts: 212

Post (Separately) Posted: Wed Mar 13, 2024 12:26    Post subject: Reply with quote

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

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


Соответственно простой вопрос - КАК сделать в плагине просмотр так же как и в Excel))))
Back to top
View user's profile Send private message
little-brother



Joined: 29 Sep 2021
Posts: 205

Post (Separately) Posted: Thu Mar 14, 2024 21:18    Post subject: Reply with quote

Сейчас плагин, когда видит поле с типом Дата, запрашивает его как текст. В этот момент происходит конвертация с локалью по умолчанию. Бегло поискал по интернету. Насколько могу судить ODBC-драйвер для Excel не имеет каких либо специальных настроек по поводу конвертации с учетом локальных настроек компьютера.

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

Возможно, если запрашивать данные как SQL_TIME и SQL_DATE, и самому ручками приводить их к виду, заданному в системе, то получится как в Excel, но это надо разбираться, что пока лениво.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Плагины Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8, 9, 10  Next
Page 9 of 10

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group