![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Связка TIBQuery + TDBGridEh + TUpdateSQLW. Подправить даные.
_RusLAN © (2006-05-25 17:31:00)Даные выбираются по запросу с left outer join c двух таблиц на определенную дату.
В TDBGridEh редактируются только даные из второй таблицы.
я в OnUpdateRecord по тому есть ли значение в поле ID (ключевое поле из второй таблицы) определяю нужно редактировать запись или нужно вставить запись, и вызываю TUpdateSQLW.Apply(ukModify) или ukInsert соответственно.
Но для вставки записи мне нужно получить сначала ее ID и указать Дату.
Как мне подсуть эти значения в набор даных или сразу в параметры запроса?
Спасибо!
_RusLAN (2006-05-29 11:58:00) [1]Всем спасибо!
Особенно Borland за предоставленный исходный код.
Надо его читать и перечитывать.
В ОнАпдейтРекорд надо было писать
IBUpdateSQLW1.QueryW[ukInsert].ParamByname('ADate').AsString := '23.05.06';
Это для параметра для которого в НД нет соответсвтующего поля.
А для параметра для которого есть поле данных в НД то тоже так, только надо имя параметра задать таким, чтоб оно отличалось от имени поля в НД.
_RusLAN (2006-05-26 16:18:00) [2]Sergey13 © (26.05.06 14:19) [5]
Я так понимаю, тебе вместо апдейта надо вызвать отдельный запрос на вставку
Я так и делаю - вызываю TUpdateSQLW.Apply(ukInsert)
Sergey13 © (26.05.06 14:19) [5]
Кстати для такой работы проще наверное будет юзать ИБДатаСет, а не Кверик+Апдейт.
Ну я прочитал на Ibase.ru, что нужно писать в отдельной транзакции, поэтому использую TUpdateSQLW
Но основной вопрос так и не снят.
Допишу еще информации.
у меня в компоненте TUpdateSQLW есть запрос на вставку типа
insert into table2
(ID, ID_объекта, Data, "разные доп. поля")
values (:ID, :ID_объекта, :Data, :"разные доп. поля")
значения параметрам :ID_объекта, :"разные доп. поля" подставляются автоматом из набора данных.
а как мне присвоить значения параметрам :ID, :Data перед вызовом TUpdateSQLW.Apply(ukInsert)
Sergey13 (2006-05-26 14:19:00) [3]2 [4] _RusLAN © (26.05.06 13:56)
Я так понимаю, тебе вместо апдейта надо вызвать отдельный запрос на вставку, а потом отрефрешить текущую запись.
Кстати для такой работы проще наверное будет юзать ИБДатаСет, а не Кверик+Апдейт.
_RusLAN (2006-05-26 13:56:00) [4]Sergey13 © (26.05.06 13:43) [3]
В Data подсказать что написать? 8-)
Нет спасибо. Как получить эти значения я знаю.
Sergey13 © (26.05.06 13:43) [3]
и вставлять полученное значение в ИД-шник
Куда/Как мне их присвоить? Вот что меня истересует.
Sergey13 (2006-05-26 13:43:00) [5]>Но для вставляемой записи надо заполнить поля ID и Data (ведь в НД ID равно НУЛЛ, а Data нет вообще).
Запросить
select gen_id(my_gen,1) from rdb$database
и вставлять полученное значение в ИД-шник. В тигере, разумеется поправить (если надо) заполняемость только пустых new.id.
В Data подсказать что написать? 8-)
_RusLAN (2006-05-26 13:28:00) [6]ANB © (25.05.06 20:22) [1]
ОК, прочитал сегодня, что написал вчера - и правда трудно понять.
Приведу приверные структуры таблиц и запроса
Есть таблица 1 - список объектов.
ID,
Name
Таблица два 2 - характеристика объекта на дату,
ID,
ID объекта,
Дата,
и разные поля описывающие состояние объекта
Запрос выбирает Всеобъекти и их характеристики на конкретную дату( если есть).
Select t1.Name, t2.ID, t2.разные доп. поля
from Table 1 t1
left outer join Table2 t2 on t2.ID_объекта = t1.ID
where t2.Date = '01.01.2006'
в гриде пользователь редактирует только t2.разные доп. поля
Так вот, в OnUpdateRecord я смотрю в t2.ID, если оно содержит значение, то я просто вызываю TUpdateSQLW.Apply(ukModify), если оно НУЛЛ, то мне надо вызвать TUpdateSQLW.Apply(ukInsert). Но для вставляемой записи надо заполнить поля ID и Data (ведь в НД ID равно НУЛЛ, а Data нет вообще).
Как мне присвоить значения этих параметров запроса на вставку.
спасибо!
ANB (2006-05-25 20:22:00) [7]Ничего не понял, но для генерации ID вообще то в IB есть генераторы.
Для лучшего понимания запости структуру таблиц (в виде DDL) и текст запроса.
А также объясни, чего ты хочешь логически (в терминах бизнес-логики).