Моят личен и професионален живот

2018-08-22

LibreOffice 6.1 и замяна на именовани параметри

Наскоро надградих до LibreOffice 6.1 нетърпелив да пробвам новите възможности и подобрения. Обаче, скоро забелязах, че всичките ми под формуляри в Base са счупени. Това са суб формуляри  изпълняващи SQL заявки като:

SELECT id, name FROM persons

Така че да мога да получа допълнителна информация от свързани таблици с напасване между главни и подчинени полета. Явно в по-ранни версии Base е пренаписвал заявката, но случая вече не е такъв. Ще получите грешки като:
  • Зареждането на данните бе невъзможно.
  • Състояние на SQL: 07009 Невалиден индекс на дескриптор.
  • Опитахте се да зададете параметър на позиция 1, но броят на разрешените параметри е 0. Една възможна причина е, че свойството „ParameterNameSubstitution“ не е със стойност TRUE в източника на данни.
Бързо отворих бележките към версията и открих каквото бях пропуснал преди:

Base
  • The ODBC, JDBC and Firebird SDBC drivers/bridges previously applied named parameter substitution (for ODBC and JDBC: when enabled) to all SQL commands, including those that were tagged in the GUI as "execute SQL command directly", thereby not preserving the SQL command exactly as typed. Named parameter substitution now is applied only to SQL queries that are generated from a LibreOffice SQL parse tree, leaving "execute SQL command directly" commands completely untouched.
Така че решението е да се пренапишат заявките на под формуляра ето така (което е синтаксиса за неименувани параметри използван от MySQL):

SELECT name FROM persons WHERE id = ?

Или с други думи явно да се напише параметъра в заявката.