Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

18 Ноябрь 2018, 21:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Параметрический запрос с использованием поля на форме  (Прочитано 4608 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Кротяка
Участник
**
Offline Offline

Пол: Мужской
Расположение: Донецк
Сообщений: 31


« Стартовое сообщение: 11 Декабрь 2014, 03:49 »

Здравствуйте. Нужно написать параметрический запрос, который качестве параметра использовал бы поле на форме. Например, в MS Access это выглядит следующим образом:
Код:
SELECT * FROM Имя_таблицы WHERE Forms!Имя_формы!Имя_поля_на форме = 1;
А как это должно выглядеть в OpenOffice Base? Возможно, сию операцию можно проделать только через макрос (VBA), но опять же, как? Поиск литературы по этому вопросу результатов не дал. Буду искренне признателен за помощь.
Записан
dndn
Форумчанин
***
Offline Offline

Сообщений: 93



WWW
« Ответ #1: 11 Декабрь 2014, 18:29 »

Через макрос получить значение поля в форме можно так:
Код:
oForm = ThisComponent.Drawpage.Forms.getByName( "Имя_формы" )
oField = oForm.getByName( "Имя_поля" )
param = oField.Value 'если поле числовое
'или
param = oField.String 'если поле текстовое

Можно ли это как-то использовать непосредственно в запросе - не могу сказать, до сих пор все запросы выполнял в макросах.

P.S. Условие отбора в запросе не совсем понятное. Может имелось в виду это:
Код:
... WHERE Имя_поля_в_таблице = Forms!Имя_формы!Имя_поля_на_форме
« Последнее редактирование: 11 Декабрь 2014, 21:08 от dndn » Записан
Кротяка
Участник
**
Offline Offline

Пол: Мужской
Расположение: Донецк
Сообщений: 31


« Ответ #2: 11 Декабрь 2014, 23:20 »

характер условия роли не играет, я просто привёл пример, чтобы было понятно, что мне нужно
при использовании вышеуказанного кода возникает ошибка следующего рода:


* Безымянный.png (17.62 Кб, 314x118 - просмотрено 41 раз.)
« Последнее редактирование: 12 Декабрь 2014, 01:27 от Кротяка » Записан
dndn
Форумчанин
***
Offline Offline

Сообщений: 93



WWW
« Ответ #3: 12 Декабрь 2014, 20:03 »

Код абсолютно рабочий, неоднократно используемый. Выложи не картинку, а файл, гляну, что там ошибку вызывает.
Записан
Кротяка
Участник
**
Offline Offline

Пол: Мужской
Расположение: Донецк
Сообщений: 31


« Ответ #4: 13 Декабрь 2014, 11:37 »

С этой ошибкой разобрался, но возникает другая. Мне нужно получить значение поля даты, причём, насколько я понял, это сделать нужно в формате ISO, чтобы потом использовать это значение в запросе. Я пытаюсь это сделать следующим образом:
Код:
param = CDateToIso(oField.Date)
, но OOo бьёт ошибку о несовместимости типов, хотя поле объявлено как Date.
и, кстати, следующий нерабочий вариант
Код:
param = oField.String 'если поле текстовое
я заменил на
Код:
param = oField.Text
после чего всё прекрасно отработало
Записан
dndn
Форумчанин
***
Offline Offline

Сообщений: 93



WWW
« Ответ #5: 16 Декабрь 2014, 13:35 »

1. Поставь расширение Xray и 99% вопросов отпадут за ненадобностью.

2. Разберись, какой на самом деле у тебя тип поля. Вот пример "настоящего"Улыбка текстового поля с его значениями в самом поле формы, а также в свойствах "String" и "Text":

Записан
dndn
Форумчанин
***
Offline Offline

Сообщений: 93



WWW
« Ответ #6: 16 Декабрь 2014, 14:24 »

С этой ошибкой разобрался, но возникает другая. Мне нужно получить значение поля даты, причём, насколько я понял, это сделать нужно в формате ISO, чтобы потом использовать это значение в запросе. Я пытаюсь это сделать следующим образом:
Код:
param = CDateToIso(oField.Date)
, но OOo бьёт ошибку о несовместимости типов, хотя поле объявлено как Date.

Извлекать дату из поля формы необходимости не было, но из интереса нашел у себя в форме поле типа даты и с помощью того же расширения Xray определил, что дата, показываемая в поле формы как "13/12/2014", в свойстве поля "Date" представлена как число 20141213 типа Long (!!!)
Чисто логически напросилось вот такое дальнейшее преобразование:

Код:
datelong = oField.Date
day = datelong Mod 100
datelong = datelong \ 100
month = datelong Mod 100
year = datelong \ 100

Получили день, месяц и год в виде чисел, дальше делаем с ними все, что хотим  Подмигивающий

или

Код:
datestr = Trim (Str (oField.Date))

Получили строку "20141213" типа "годмесяцдень" без разделителей.
Для того, чтобы использовать дату в запросе, нужно представить ее в виде строки "yyyy-mm-dd":

Код:
datestr = Left (datestr, 4) & "-" & Mid (datestr, 5, 2) & "-" & Right (datestr, 2)
« Последнее редактирование: 16 Декабрь 2014, 21:59 от dndn » Записан
Кротяка
Участник
**
Offline Offline

Пол: Мужской
Расположение: Донецк
Сообщений: 31


« Ответ #7: 24 Декабрь 2014, 01:47 »

Про Xray можно поподробнее? Мне просто не приходилось сталкиваться с подобным
Записан
dndn
Форумчанин
***
Offline Offline

Сообщений: 93



WWW
« Ответ #8: 24 Декабрь 2014, 03:25 »

http://myooo.ru/content/view/155/115/

или подобное ему расширение MRI:

http://aoo-extensions.sourceforge.net/project/mri
Записан
Кротяка
Участник
**
Offline Offline

Пол: Мужской
Расположение: Донецк
Сообщений: 31


« Ответ #9: 24 Декабрь 2014, 12:30 »

Спасибо
« Последнее редактирование: 24 Декабрь 2014, 14:12 от Кротяка » Записан
rna
Участник
**
Offline Offline

Сообщений: 6


« Ответ #10: 17 Апрель 2018, 11:21 »

Я пока только на уровне дизайна. Есть запрос:
SELECT "P"."Surname", "P"."Name", "P"."Patronymic", "D"."relation",  YEAR( NOW( ) ) - YEAR( "P"."Birthday" ) AS "Возраст на сегодя"
FROM "Person" AS P
INNER JOIN "Child" AS D
ON "P"."id_person" = "D"."who" AND ("relation" = 'сын' or "relation" = 'дочь')
WHERE "D"."whom" = 1
ORDER BY "P"."Birthday" ASC

Хочется использовать его в форме, где бы из Person выбиралась фамилия (нажал Enter, или ещё как то ?), а соответствующий ей индекс подставлялся бы вместо 1 "WHERE "D"."whom" = 1"
Догадываюсь, что вопрос глупый, но я не могу сообразить - знаний очень мало!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!