Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизПараметры в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c