[wlx] odbc-wlx - просмотр Access, Excel, CSV файлов
Goto page Previous 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Next
|
View previous topic :: View next topic |
Author |
Message |
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Thu Mar 31, 2022 19:36 Post subject: |
|
|
С нулем - это похоже косяк 32-битных драйверов. В коде я запрашиваю данные в виде строки, а ODBC почему отдает значение с нулём. При этом такое поведение будет только если тип колонки определился как числовой, что происходит если все значения в ней, кроме заголовка, если используется, числа.
Причина оказалась в том, что Excel именует колонки как F1, F2, ... если имена не заданы, а в плагине для удобства они назывались Column #N. Учел этот момент при запросе данных и все заработало, заодно баг для НЕ-фильтра нашелся.
Просьба проверить - https://disk.yandex.ru/d/bn3VUcVyqk9_Aw |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Thu Mar 31, 2022 20:52 Post subject: |
|
|
little-brother wrote: | Просьба проверить |
Поиск/Фильтр - работает.
Насчет конечного нуля не понял.
Я и в 32бит. и в 64 битн. версии что тотала, что плагина наблюдаю это поведение.
Причем странность-то в том, что я ДВА эксель файла приложил же! И в одном этот ноль есть, а в другом - его нет! А все остальные условия хранения в столбце этих данных - одинаковы! Общий тип данных, просто цифры, нет форматирования, нет заголовков. Так ЧТО тут виновато? И вот почему в разных файлах это по разному выходит? Они же даже в одних и тех же ячейках записаны, эти данные. Тогда тут ODBC должно было в обоих случаях выдавать ноль с точкой - типа драйвер определил (хотя кто его просил?) что это дробное число и надо показать это как ЧИСЛО.0
Добавлено спустя 39 минут:
Хотя. Это бред, но факт. В xls файле число выровнено по правому краю ячейки и выводится плагином как "дробное число.0"
А в xlsx файле число выровнено по левому краю! А это признак текста! И плагином это как "целое число" рисуется.
А формат-то единый = общий на них! А каких-либо спецсимволов в этих числах нет! А трактовка экселем выполнена по-разному этих данных!
Это просто угар какой-то. Ну и в этом случае - вряд ли как-то извне можно повлиять на выдачу ODBC одинаковым образом этих данных.
Тут же уже сам эксель воспринимает их по разному... Капитально... |
|
Back to top |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Thu Mar 31, 2022 22:05 Post subject: |
|
|
В 10-ке может уже и по другому - я на Win7x64 привел результаты.
Зависит еще от типа заданного для ячейки. Ну и подозреваю, что в зависимости от битности/версии в ODBC-драйвере для Excel могут быть разные значения по умолчанию/алгоритмы, как выдавать такую колонку.
xlsx и xls по сути это разные форматы, потому и код там тож наверно разный. Отсюда и различия.
Можно конечно нашлепку сделать: если Excel, если то-то и то-то, то последний ноль выкинуть. Криво конечно, зато будет работать. Но значения вида 10.0 будут уже усекаться до 10. |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Thu Mar 31, 2022 22:34 Post subject: |
|
|
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 |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Fri Apr 01, 2022 01:36 Post subject: |
|
|
little-brother wrote: | Если замечаний нет, то опубликую. |
Кажется все весьма шикарно работает! |
|
Back to top |
|
|
imig73
Joined: 18 Jun 2013 Posts: 280 Location: г. Иркутск
|
(Separately) Posted: Sat Apr 02, 2022 12:33 Post subject: |
|
|
little-brother
Прошу вас odbc-wlx.ini расположить по умолчанию в папке с плагином. |
|
Back to top |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Sun Apr 03, 2022 16:50 Post subject: |
|
|
А в чем смысл то? |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Tue Feb 13, 2024 12:38 Post subject: |
|
|
little-brother
А когда первая строка из файла переходит в заголовок таблицы - разве там НАДО производить какие-то обязательные исправления в символах?
Вроде как нет - ибо это же текст пользователя из файла прямиком взят. Не?
Ибо вот моя первая строка в Excel таблице с текстом:
Дата:<TAB>13.02.2024
если переходит в заголовок при просмотре плагином, то превращается в
Дата:<TAB>13#02#2024
И лишь когда возвращается в раздел "просто 1 строка данных" - то опять становится с датой 13.02.2024.
<TAB> - это я вставил для понимания, что это разрыв колонок. Данные в двух колонках.
Вроде как в CSV с такой же опцией контроля положения заголовка/первой строки я такого не замечал. |
|
Back to top |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Wed Feb 14, 2024 15:45 Post subject: |
|
|
odbc плагин отображает то, что получил из odbc-драйвера, который похоже эту замену и делает. Повлиять на драйвер скорее всего нельзя. |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Wed Feb 14, 2024 16:48 Post subject: |
|
|
В смысле? Хотите сказать, что факт превращения строки либо в заголовок, либо в просто строку текста - зашит на уровне запроса "дай данные" в драйвере ODBC?
И типа если нужны данные с заголовком - то они такие, а если без - то они другие???
А нафига так сложно и непредсказуемо???? Почему просто на уровне логики кода плагина - не рисовать первую строку ЛИБО в заголовке над фильтром,
ЛИБО в таблице с данными? |
|
Back to top |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Thu Feb 15, 2024 20:37 Post subject: |
|
|
Quote: | зашит на уровне запроса "дай данные" в драйвере ODBC? |
Именно. Если стоит флаг в выпадающей менюшке, то в Excel улетит то, что первую строку надо как имена колонок интерпретировать.
Quote: | А нафига так сложно и непредсказуемо? |
Сделано как раз относительно просто: сначала отправляется запрос в ODBC-драйвер "select * from <ИмяВыбраннойТаблицы> where 1 = 2", из которого получаются имена колонок, а потом уже второй запрос без where для получения данных.
Если Excel не сказать, что первая строка это заголовок, то имена колонок в результате будут COLUMN1, COLUMN2 и т.д, и чтобы их отобразить потребуется эквилибристика с первым запросом, который должен будет читать первую строку. То есть придется для Excel делать свою ветку обработки.
То, что в вашем случае, при такой логике отображение не совсем верное, - ну что ж бывает. |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Fri Feb 16, 2024 10:29 Post subject: |
|
|
Ладно-понятно. Что ж. Не будем усложнять неподъемное))) |
|
Back to top |
|
|
Destiny
Joined: 15 Dec 2015 Posts: 212
|
(Separately) Posted: Wed Mar 13, 2024 12:26 Post subject: |
|
|
Ок, следующий момент. Может я что-то явное упустил, конечно...
При получении данных по полю ДАТА (точнее - стиль ячейки ОБЩИЙ, но там явная дата прописана
просто текстом и явно движок Экселя/ODBC будет стараться вытащить именно ОБЪЕКТ _дата_....)
В самом Excel это поле с этим значение выглядит по-русски)))
А вот в просмотре плагином это выглядит как:
Code: | 2024-03-11 00:00:00 |
Соответственно простой вопрос - КАК сделать в плагине просмотр так же как и в Excel)))) |
|
Back to top |
|
|
little-brother
Joined: 29 Sep 2021 Posts: 205
|
(Separately) Posted: Thu Mar 14, 2024 21:18 Post subject: |
|
|
Сейчас плагин, когда видит поле с типом Дата, запрашивает его как текст. В этот момент происходит конвертация с локалью по умолчанию. Бегло поискал по интернету. Насколько могу судить ODBC-драйвер для Excel не имеет каких либо специальных настроек по поводу конвертации с учетом локальных настроек компьютера.
Единственный вариант, который приходит на ум, попробовать выставить у колонки тип Текст.
Возможно, если запрашивать данные как SQL_TIME и SQL_DATE, и самому ручками приводить их к виду, заданному в системе, то получится как в Excel, но это надо разбираться, что пока лениво. |
|
Back to top |
|
|
|
|
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
|