запрос без кавычек

Автор fly, 3 апреля 2018, 11:51

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

fly

Друзья, я видел запросы в ОО и ЛО написанные без кавычек и  с сохранением форматирования. Т.е. после закрытия редактора запроса и повторного открытия сохраняется и форматирование и отсутствие кавычек. Все работает...
Как это делают?

economist

#1
Ну, это на самом деле очень просто: нужно взять за правило при каждом(!) создании SQL-запроса сразу же нажимать на кнопку [SQL] в панели инструментов. Она "отключает" встроенный парсер запроса и Base тут же перестает "обкавычивать" имена полей, а также удалять переносы строк, отступы и т.п., что вы назвали "форматированием". Даже больше - исчезают некоторые глюки и вообще все работает как надо вам, а не как надо Base-у. Нажатость (темнота) кнопки - сохраняется вместе с запросом и больше проблем не возникает.

Но в некоторых редких случаях (например при ODBC-подключениях) - "нажатость" этой кнопки, увы, отключает часть функционала. Например параметрические запросы, где пользователю при выполнении запроса выводится диалог на ввод, например вот поиск по "части" введеного ИНН - при нажатой кнопке SQL - он работать не будет, а при отжатой - всё тут же "обкавычится", но зато запрос будет работать! Вот он:


SELECT * FROM КОНТР WHERE SUBSTR("ИНН", 1, 10) LIKE "%" || :ИНН || "%"


Но это ещё не всё, что нужно знать про эту дурацкую кнопку, которой по умолчанию лучше бы быть всегда нажатой. Конечно же, нужно уметь управлять ею ещё и программно, т.е. из кода BASIC, иначе макросы так же будут возвращать SQL-ошибку:


RowSet = createUnoService("com.sun.star.sdb.RowSet")
RowSet.DataSourceName = "Biblio" ' указываем зарегистрированную базу данных
RowSet.EscapeProcessing=FALSE ' иначе строка запроса обкавычится и запрос даст сбой
RowSet.CommandType = com.sun.star.sdb.CommandType.COMMAND ' вызываем команду
RowSet.Command = "SELECT..."
RowSet.execute() ' выполняем запрос


Этот самый RowSet.EscapeProcessing=FALSE как раз и "нажимает" кнопку SQL.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

fly

Спасибо economist, и извините за запоздалую благодарность. Если бы не это тайное знание - я бы завис с ЛО6.1 (firebird)

economist

#3
Всегда рад помочь. Сам убил на эту проблему пару суток и едва не потерял веру в человечество...

OpenOffice|LibreOffice вообще любит подобные "сюрпризы". Эта SQL-"кнопка" - отличный пример рукотворного геморроя, отталкивающего от неплохой, в общем-то, программы. Впрочем, по сравнению с включенным на протяжении 2-х лет OpenGL, который на трети компьютеров вызывает жесточайшие глюки прорисовки документов и интерфейса - это ещё "цветочки".

Хорошо что эта проблема имеет решение. Если быть объективным - "дурное" обкавычивание полей и добавление ненужных алиасов - есть даже в "священном" MS Excel. Точнее в офисной утилите MSQRY32.EXE. И ничего ведь, как-то выжили (всем миром). Поэтому LO и его разработчиков можно "понять и простить"... 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...