Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.036 c
3-1109041953
Киря
2005-02-22 06:12
2005.03.27
Проблема с отображением кириллицы


6-1106571984
Zloy
2005-01-24 16:06
2005.03.27
как создать подлючение к интернету через прокси


3-1109592041
ANB
2005-02-28 15:00
2005.03.27
Проверка запроса SQL


3-1109060114
Term
2005-02-22 11:15
2005.03.27
Как открыть OLE документ из BLOB-поля


8-1102433128
Sergonoid
2004-12-07 18:25
2005.03.27
LineTo или рисование по мм?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский