LO-7.2

Автор Kadet, 26 августа 2021, 23:20

0 Пользователи и 1 гость просматривают эту тему.

bigor

В темной теме
В светлой теме
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Kadet

#76
Цитата: rami от 29 августа 2021, 12:18Переменные StarDesktop, ThisComponent, ThisDatabaseDocument (в Base), а также имена функций являются предопределёнными
Оказалось, Вы не правы. Проверил. ThisDatabaseDocument - не предопределён. По загрузке эта переменная пуста и ругается, что переменная ThisDatabaseDocument - не определена.
Перед этим, естественно все определения переменной ThisDatabaseDocument снял, переобозвал переменую в DBDocument. И при загрузке - StarDesktop, ThisComponent - носят объекты, а ThisDatabaseDocument - пуста.

Kadet

Цитата: Bigor от 29 августа 2021, 16:03В темной теме
В светлой теме
Спасибо! Нужная инфа. Буду знать эту особенность.

rami

Цитата: Kadet от 29 августа 2021, 18:26
Цитата: rami от 29 августа 2021, 12:18Переменные StarDesktop, ThisComponent, ThisDatabaseDocument (в Base), а также имена функций являются предопределёнными
Оказалось, Вы не правы. Проверил. ThisDatabaseDocument - не предопределён. По загрузке эта переменная пуста и ругается, что переменная ThisDatabaseDocument - не определена.
Перед этим, естественно все определения переменной ThisDatabaseDocument снял, переобозвал переменую в DBDocument. И при загрузке - StarDesktop, ThisComponent - носят объекты, а ThisDatabaseDocument - пуста.
Обратите внимание, я написал ...ThisDatabaseDocument (в Base)..., в Base эта переменная ссылается на документ базы данных, в Calc и Writer естественно, она будет пуста. Учтите, что формы являются табличным (как у вас) или текстовым документом и открываются в Calc или Writer соответственно.

Kadet

#79
Цитата: rami от 29 августа 2021, 20:21Обратите внимание, я написал ...ThisDatabaseDocument (в Base)...,
Ну естественно в Base. Я же не дурак искать БД в калке. Если вы заметили я работаю в базах (в основном) и эту переменную тоже тестировал при загрузке своей БД. Она - пуста.

Проверьте на моей маленькой демке (из #17).
Поставьте на открытие документа простенький макрос, типа:

Sub MainDB
Dim DBDoc

DBDoc = ThisDatabaseDocument
MsgBox DBDoc.Title

End Sub

В итоге получите пустоту или ошибку - "Ошибка времени выполнения Basic. Переменная не определена."
У объекта DB в титлах инфа о базе.
А лучше поставить останов и посмотреть содержимое переменных. Эта переменная - пуста.

Kadet

#80
Вынес стартовую библиотеку в глобал и протестировал пошагаво загрузку моей БД.

С момента запуска и до входа в первый стартовый макрос – иногда мгновенно, но чаще до 2 мин.
Подключение глобальной  библиотеки, проверка регистра – нормально, небольшая задержка (1-2с) при подключении библиотек.
Переход в макрос подключённой соседней глобальной библиотеки – иногда мгновенно, но чаще до 10 мин. (иногда не выдерживал, перезагружал).
Загрузка формы до первого макроса – 20 мин (не дождался). Заглрузка формы вообще ни разу не осчастливила. Мёртвый зависон.

Отключил от этой формы запрос. Запрос был достаточно простым, прямолинейным и без всяких там DISTINCT и прочих заморочках.
SELECT "ЗАКАН"."ID", "ЗАКАН"."Дата", "ЗАКАН"."IDzak", "ЗАКАН"."Дата_начала", "ЗАКАН"."Дата_сдачи", "ЗАКАН"."ТипАнгара", "ЗАКАН"."ТипКупола",
"ЗАКАН"."Высота", "ЗАКАН"."Ширина", "ЗАКАН"."Длина", "ЗАКАН"."Примечание", "ЗАКАН"."pcTambKol1", "ЗАКАН"."pcTambKol2", "ЗАКАН"."pcKlapanKol1",
"ЗАКАН"."pcKlapanKol2", "ЗАКАН"."pcKolVorot1", "ЗАКАН"."pcKolVorot2", "ЗАКАН"."pcTorecType1", "ЗАКАН"."pcTorecType2", "ЗАКАН"."pcRostvType",
"ЗАКАН"."pcVentType", "ЗАКАЗЧИКИ"."ID", "ЗАКАЗЧИКИ"."Заказчик" FROM "ЗАКАН", "ЗАКАЗЧИКИ" WHERE "ЗАКАН"."IDzak" = "ЗАКАЗЧИКИ"."ID"

Подвязывать к форме запросы или таблицы необходимо, если в форме присутствуют поля со списками. В противном случае все такие поля будут пустыми.
В моей форме существует 10 полей со списками, и к каждому привязан свой запрос. Все DISTINCT я везще убрал, переделал на GROUP BY.
Получается, что при загрузке формы выполняется запрос, прицепленный к самой форме, и все запросы полей со списками. Т.е. - при загрузке моей формы должны выполниться 11 запросов.

После отключения главного запроса (к форме), все остальные запросы тоже автоматически отключились. В итоге - база, хоть и с задержсками при загрузке, описанными выше, таки стала загружаться.

Отсюда следует, что в новой версии ЛО присутствуют некоторые проблемы с переходами между библиотеками, хотя они почему-то не проявляются при использовании вынесенных БД. Это показал мой пошаговый тест.
И второй вывод - так же присутствуют проблемы с запросами к внутренней БД.

bigor

Цитата: Kadet от 29 августа 2021, 21:44А лучше поставить останов и посмотреть содержимое переменных. Эта переменная - пуста.
Вы не правы
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

rami

Переменная Global действительна до тех пор, пока длится сеанс LibreOffice и видна во всех модулях и библиотеках.

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

Я создал новую базу, смотрите картинку:

Kadet

#83
Цитата: Bigor от 29 августа 2021, 22:23Вы не правы
Не понял?!

У меня по другому.

В чём секрет? Вешаю макрос на событие самой БД "Открытие файла". Пусто.
Я точно изменил все упоминания о ThisDatabaseDocument во всех библиотеках автоматической заменой.

Kadet

Цитата: rami от 29 августа 2021, 22:28Переменная Global действительна до тех пор, пока длится сеанс LibreOffice и видна во всех модулях и библиотеках.
Я тоже так думал, но на практике оказалось не так. Я же говорю - долго доходил и тестировал этот момент.

bigor

Цитата: Kadet от 29 августа 2021, 22:34У меня по другому.
Цитата: rami от 29 августа 2021, 22:28Я не знаю, что у вас там происходит, и в какой из миллионов ваших библиотек и модулей переопределяется ThisDatabaseDocument.
Я закомментировал у Вас строчку Public ThisDatabaseDocument, если этого не сделать, то действительно выводится пусто
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Kadet

Картинку вижу и удивляюсь. Но в чём секрет? У меня эта преременная всегда пуста или "не определена" (это явняй признак, что нигде нигде её не переопределял.
Если бы я её где-то переопределил, то этой ошибки точно не было бы.

Не понятно... Загадка.

Kadet

#87
Цитата: Bigor от 29 августа 2021, 22:39Я закомментировал у Вас строчку Public ThisDatabaseDocument, если этого не сделать, то действительно выводится пусто
Возможно у rami таки где-то в моей библиотеке всё таки отпределяется эта переменная. Или... он открывает вторую бд (из #17 или свою бд), хотя моя другая (Cyanopica4) ещё висит в фоне (я же описывал, что при закрытии главной формы сама база остаётся висеть в фоне - закрывалку забыл включить). В МАК можно посмотреть работающие процессы (диспетчер задач)?

rami, жаль, что вы в своей картинке не развинули поле значения переменной URL. Там написано какая именно БД записана в этой переменной - если ваша, то ваша правда, а если Cyanopica4, то у Вас точно висит в фоне ещё моя БД Cyanopica4 и хранит эту глобальную переменную.

Kadet

Включите, пожалуйста, закрывалку. А то без неё всякие непонятки могут случиться.
Путь: ANLib -> StartSet  предпоследний макрос - FormCloseAll()
Sub FormCloseAll()
Dim oDesktop As Object, oDocs As Object, oDoc As Object, oComponents As Object, i%
ON LOCAL ERROR GOTO ErrCloseAll:
UnregisterMouseClickHandler()
' ThisDatabaseDocument.Close(true)
ErrCloseAll:
ON LOCAL ERROR GOTO 0
End Sub


Нужно снять с рема вот эту строку.
ThisDatabaseDocument.Close(true)
После этого при закрытии формы ГЛАВНАЯ будет закрываться и вся база.

Извините за это недоразумение.

bigor

Включил.
Закрывается
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут