Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Параметры в fibdataset...   Найти похожие ветки 

 
malefik   (2005-02-25 12:33) [0]

Есть датасет....его запрос select выглядит как

SELECT
   TYPES,
   RESOURCES,
   POSITIONS,
   MAX_Q,
   MAX_P,
   MAX_T,
   CONSTANT
FROM
   "_MESTO_EDIT"
// это представление на сервере FB

Соответственно к нему подключен DBGrid который все это отображает..
соответственно запрос insert необходимо переделать...

INSERT INTO "_MESTO"(
   KOD_RES, KOD_POS, KOD_MAX_Q, KOD_MAX_P, KOD_MAX_T, KOD_TYPE, KOD_CONST
)
VALUES(
   :KOD_RES, :KOD_POS, :KOD_MAX_Q, :KOD_MAX_P, :KOD_MAX_T, :KOD_TYPE, :KOD_CONST
)

дальше делаю так....

_data_module->_position_pFIBTransaction->StartTransaction();
_data_module->_position_pFIBDataSet->Append();
_data_module->_mesto_pFIBDataSet->ParamByName("KOD_RES")->AsInteger = _mesto_data->kod_res; на этой строчке ругается на отсутствующий параметр
_data_module->_mesto_pFIBDataSet->Post();
_data_module->_mesto_pFIBTransaction->Commit();
_data_module->_mesto_pFIBDataSet->Open();

пробовал ...

int zzz = _data_module->_mesto_pFIBDataSet->ParamCount();

= 0

КАК С ПАРАМЕТРАМИ РАБОТАТЬ???? И ВОЗМОЖНО ЛИ ТО ЧТО Я ПОСТАРАЛСЯ ОБЬЯСНИТЬ???


 
DSKalugin ©   (2005-02-25 12:57) [1]

1
не все представления могут быть обновляемыми. Т.к. они могут содержать несколько таблиц со сложными выборками и группировками.
Поэтому обновлять надо не представление, а исходную таблицу.
Глупо присваивать полю представления, которо получено как max(price) новое значение. Ты меня понимаешь?
2
Append(),Post() не нужны в данном случае если речь идет о явных транзакциях
делается этто так

 EngineDM.EngineIBT.StartTransaction;
 with EngineDM.VocabIBQ do begin
   Close;
   SQL.Clear;
   SQL.Add("insert into "Opt_Nacenki" ("id_optclient", "id_seller", "Nacenka")");
   SQL.Add("values (:"p_client", :"p_seller", :"kf")");
   ParamByName(""p_client"").AsInteger:=id_cl;
   ParamByName(""p_seller"").AsInteger:=id_Sel;
   ParamByName(""kf"").AsFloat:=Koeff;
   Prepare;
   ExecSQL;
 end;
 EngineDM.EngineIBT.Commit;
и перечитать результирующую таблицу


 
Johnmen ©   (2005-02-25 12:57) [2]

1. Делай INSERT/DELETE/UPDATE в твоём VIEW, а не в реальной тбл. При этом значения параметров, стандартно, берутся из текущей записи, и их не надо прописывать.
2. Этот VIEW будет обновляемым, и чтобы изменения в нём отображались в реальную тбл/тблы сделай соответствующие триггеры на VIEW.


 
DSKalugin ©   (2005-02-25 13:07) [3]

>int zzz = _data_module->_mesto_pFIBDataSet->ParamCount();

разберись что у тебя находиться в датасете _mesto_pFIBDataSet
ИНСЁТ или СЕЛЕКТ?
для выборки ясно дело ParamCount()=0
для программной правки лучше использовать отдельный от этого датасета запрос на компоненте TpFIBQuery
для ручной правки в гриде надо установить свойство АвтоКоммит=Истина и заполнить все SQL соответствующими запросами для правки, вставки и удаления


 
Johnmen ©   (2005-02-25 13:11) [4]

>DSKalugin ©   (25.02.05 13:07) [3]
>для ручной правки в гриде надо установить свойство АвтоКоммит=Истина

Какая связь ?


 
malefik   (2005-02-25 13:12) [5]

to DSKalugin>> Я прекрасно понял это давно ...Представление у меня действительно сложное ...я вроде и не пытаюсь его обновлять ... ведь представление это "_MESTO_EDIT" а таблица "_MESTO"...

FROM
  "_MESTO_EDIT"

и

INSERT INTO "_MESTO"


Дело в том что значение InsertSQL я задал на этапе проектирования (его я привел выше с соответствующими параметрами)...а вот до параметров я не могу добратся...при

_data_module->_mesto_pFIBDataSet->ParamByName("KOD_RES")->AsInteger = _mesto_data->kod_res; на этой строчке ругается на отсутствующий параметр


Идет ругань на соответствующий параметр..
И Count параметров равен 0 ...почему я сам не пойму..


 
malefik   (2005-02-25 13:13) [6]

to DSKalugin>> Я прекрасно понял это давно ...Представление у меня действительно сложное ...я вроде и не пытаюсь его обновлять ... ведь представление это "_MESTO_EDIT" а таблица "_MESTO"...

FROM
  "_MESTO_EDIT"

и

INSERT INTO "_MESTO"


Дело в том что значение InsertSQL я задал на этапе проектирования (его я привел выше с соответствующими параметрами)...а вот до параметров я не могу добратся...при

_data_module->_mesto_pFIBDataSet->ParamByName("KOD_RES")->AsInteger = _mesto_data->kod_res; на этой строчке ругается на отсутствующий параметр


Идет ругань на соответствующий параметр..
И Count параметров равен 0 ...почему я сам не пойму..


 
malefik   (2005-02-25 13:40) [7]

В датасете находится  "_MESTO_EDIT"
Просто я хотел использовать компонент для редактирования другий таблицы написав соответствющий запрос в INSERT SQL


 
malefik   (2005-02-25 13:46) [8]

А насчет AutoCommit мне кажется ты немного не прав...


 
DSKalugin ©   (2005-02-25 17:11) [9]

1
>AutoCommit
А кто/что будет подтвердать изменения если они делаются руками в гриде? Или вызывай явно Коммит на программном уровне или изменения ничем не подтвердятся.
2
>Дело в том что значение InsertSQL я задал на этапе проектирования (его я привел выше с соответствующими параметрами)...а вот до параметров я не могу добратся...при

А дело в том, что до них и не надо добираться. Они передаются автоматически и привязываются к ключевым полям. Есть мастер/визард этиз апросов, которые сами формируются. Читай доку к фибам. Вот мой пример

UPDATE TORBA
SET
   MANAGER_ID = :MANAGER_ID,
   SKLAD_COD = :SKLAD_COD,
   MAKER_NAME = :MAKER_NAME,
   OPIS = :OPIS,
   PRICE = :PRICE,
 .......
WHERE
   ID_TB = :OLD_ID_TB

Параметр OLD_ID_TB это старое значение ключевого поля ID_TB. Суффикс OLD_ расценивается компонентами как предыдущеезначение
С вставкой еще проще. Там вообще параметров заполнять не надо.
Что видится в гриде то и вставляется.

INSERT INTO TORBA(
   MANAGER_ID,
   SKLAD_COD,
   MAKER_NAME,
  ...
)
VALUES(
   :MANAGER_ID,
   :SKLAD_COD,
   :MAKER_NAME,
...
)


Если есть скрытые поля, надо заполнять их в соответствующих обработчиках типа

procedure TdmRead.tbTorbaNewRecord(DataSet: TDataSet);
begin
 tbTorbaMANAGER_ID.AsInteger:=dbClient.dbClientID;
 tbTorbaTB_MODE.Value:="t";
end;



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.05 c
1-1110723546
Макс Т.
2005-03-13 17:19
2005.03.27
Выравнивание заголовка


1-1110639306
starmaster
2005-03-12 17:55
2005.03.27
Registry -> DWORD


1-1110614798
Timofey
2005-03-12 11:06
2005.03.27
Рисунок на TButton


9-1104785393
dRake
2005-01-03 23:49
2005.03.27
Отрисовка текстуры в текстуру под PD как лучше?


1-1110533012
AlexTregubov
2005-03-11 12:23
2005.03.27
Как узнать тип шрифта - TrueType или OpenType?