Параметрический запрос с использованием поля на форме

Автор Кротяка, 11 декабря 2014, 03:49

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

Кротяка

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

dndn

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


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

P.S. Условие отбора в запросе не совсем понятное. Может имелось в виду это:
... WHERE Имя_поля_в_таблице = Forms!Имя_формы!Имя_поля_на_форме

Кротяка

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

dndn

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

Кротяка

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

dndn

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

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


dndn

#6
Цитата: Кротяка от 13 декабря 2014, 09:37С этой ошибкой разобрался, но возникает другая. Мне нужно получить значение поля даты, причём, насколько я понял, это сделать нужно в формате 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)

Кротяка

Про Xray можно поподробнее? Мне просто не приходилось сталкиваться с подобным


Кротяка

#9
Спасибо

rna

Я пока только на уровне дизайна. Есть запрос:
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"
Догадываюсь, что вопрос глупый, но я не могу сообразить - знаний очень мало!