Покопал немного. При построении списка таблиц, выкидываются те, которые имеют тип не SYSTEM TABLE, чтобы не попадали различные вложенные таблицы. Однако, если в имени листа есть пробелы, то его тип внезапно меняется на TABLE, и потому предположение оказалось неверным. В результате список таблиц был пустым.
[s]Видимо надо по наличию хвоста после $ выкидывать.[/s]
Видимо надо действовать более хитро...
P.S. Изменил логику добавления листа в список таблиц: помимо проверки на SYSTEM_TABLE в список попадут и те, которые заканчиваются строго на $'.
Просьба потестировать, в том числе и на таблицах имеющих именнованные диапазоны и фильтры разные. Все ли данные в наличии или может есть что-то лишнее? В Excel не силен, многих его особенностей не знаю. https://disk.yandex.ru/d/iWOiXPcfwuIDUg
кажется проблем больше нет.
разве что шероховатости. В названии листов остался знак $ в конце. Если уж по ему идет обрезание, то и его самого логично обрезать))
но если это упрощает использование листов во внутренних процедурах вызовов Select From - то конечно можно не убирать его.
И порядок листов странный. Не тот, что в открытой книге экселя.
У меня: "Export Worksheet", "Лист1", "Sheet2", "Лист 3"
в плагине: 'Sheet2$', 'Лист1$', 'Export Worksheet$', 'Лист 3$'
Кавычки то же, если в имени есть пробелы Да, при запросе данных Excel требует этот знак вопроса и кавычки. По хорошему их надо убрать конечно, т.е. отображать одно имя, а запрашивать по другому. Подумаю, можно ли это сделать как то малой кровью.
порядок листов странный
Это уже издержки ODBC. Он рассматривает книгу как СУБД, где таблицы не имеют порядка - в список они добавляются в том порядке, в каком ODBC их возвращает. Можно конечно его отсортировать по имени, но вот исходный порядок книги не думаю, что можно восстановить.
little-brother писал(а):Кавычки то же, если в имени есть пробелы Да, при запросе данных Excel требует этот знак вопроса и кавычки. По хорошему их надо убрать конечно, т.е. отображать одно имя, а запрашивать по другому. Подумаю, можно ли это сделать как то малой кровью.
Если они имеют реальный вес при формировании запросов, то фиг с ними. Пусть малая кровь будет значить, что мы будем видеть эти символы в именах листов. Главное, теперь нет проблем с просмотром ранее непросматриваемых файлов)))
Проблема в именах с подчеркиванием: символ _ не требует, чтобы имя таблицы было в кавычках, а я этот аспект забыл учесть и в результате получалось двойное окавычевание.
В тексте ячейки экселя порой есть вставленный принудительно перенос на новую строку. Т.е. текст в обычном виде будучи вписанным - занимал бы всю длину ячейки - если бы мы ее визуально взяли и растянули на много нужных см. для прочтения ее текста. А после нажатия ALT+ENTER в тексте вставляется перенос строки и в ячейке появляется многострочный текст. И так можно уменьшать требуемый размер длины ячейки для прочтения ее содержимого. Так вот плаг такие тексты отображает просто слитно
Нет, я понимаю, что многострочность он не обязан и не умеет поддерживать в рамках одной ячейки виндового table-контрола. НО! может такой символ просто стоит заменить чистым пробелом?
Отсутствие многострочности - это ограничение WIndows-контрола.
С заменой переноса строк на пробелы может быть проблема с производительностью. Сейчас когда ячейке отрисовывается, она запрашивает данные из кеша и выдает как есть. Сделать замену в кеше - неправильно, т.к. при копировании строк нужно отдавать оригинальный текст. Поэтому надо либо добавлять еще один кеш, где выполнена замена, либо отдавать текст с заменой на лету. Первый вариант делает код странным. Со вторым - надо либо с памятью колдовать (текст с заменой надо удалять) или будет ограничение в 255 символов, что не очень. Тупик.
По аналогичной причине я остановил разработку ссылок.
Есть вариант добавить всплывающую подсказку, если курсор стоит над ячейкой с переносами. Он мне также не кажется особо удачным.
Самое правильно видимо самому полностью отрисовывать ячейку, но мне с этим разбираться лень (там легко можно накосячить).
Хелп! СОС!
Очень занятная ситуация.
Есть два компа. Разных. Капитально. НО тотал со своими плагинами - один и тот же. Своя сборка.
И вот на последнем 0.9.7 сабже один и тот же экселевский файл - ПУСТОЙ!!! Созданный с нуля - пустой файл - на одном компе открывается в плагине, а вот на другом - ооочень молчаливо и наглухо грохает весь тотал. Дамп сохраняет лишь инфу, что в odbc-wlx.wlx!cbNewMain() + 0x4c5c bytes падение зафиксировано. Был бы дебаг вариант плагина - наверное с точностью до строки кода сказал бы что и где... НО чего нет - того нет. Ну и понятно дело - что пересылать вам: тоже не понятно что(((. Сборка же реально одинаковая везде и в полтора гига в архиве.... А на одной копии падает - на другой нет. Падение же воспроизводится даже на пустом файле - т.е. тут ничего особенного.
Как будем лечиться?
Есть визуал студия 2010 на всяк случай. Хоть и сборку делаете под MinGW..
Добавлено спустя 22 минуты:
Проверка 0.9.6 и 0.9.5 показало, что в 6 версии так же есть падение, а вот в 5 никаких проблем. Это все на то самом компе, где и увидел вообще падание. На другом - никакая версия не падает...
ОС на обоих компах - одна и та же: Win10 LTSC build 17763...
Попробуйте - https://disk.yandex.ru/d/P3nsAdJOAf-f7g
Добавил вывод сообщений после каждого этапа и отладочную информацию (убрал флаги -Os и -s и добавил -g). Интересует, что выводит последним.
Студия у меня то же есть, просто как то к Code::Blocks привык, который mingw по умолчанию использует и не такой жирный как Студия.
Инициализация ОК
Соединение установлено
Параметры прочитаны
Компоненты созданы
Список таблиц получен
Найдена таблица
Найдена таблица
Список таблиц построен
Тема и шрифт заданы
Выбран первая строка в списке (шо за акцент? выбран мух? )
И вот еще момент. Хоть сборка и одинаковая, но там, где падает, оказывается, я запускал с ярлыка 32битный тотал.
А вот в 64 битном тотале - плаг уже не падает! Т.е. собака порылась где-то в этой области!
Там идет уже после "Ширина колонок изменена", "Данные обновлены" и показывается окно плагина с требуемой таблицей.
https://disk.yandex.ru/d/a_F0wf_kT8u8tw
Удалил вывод всех сообщений до этого и добавил подробное описание для операций по изменению ширины колонок. Достаточно последнее сообщение, т.к. они все равно по порядку идут.
Я думал, что где то ранее падает, а это похоже все-таки какая особенность Windows (в духе упасть, если окна нет и для него выставляется какой то стиль).