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

#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, но это надо разбираться, что пока лениво.



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


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

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

Powered by phpBB © 2001, 2005 phpBB Group