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

Вниз

Проблемы с добавлением данных в базу данных   Найти похожие ветки 

 
lockheed_man ©   (2004-04-03 01:12) [0]

Проблема в том, что после добаления в DBGrid записей они не заносятся в базу данных ни после UpdateSQL(ukModify) ни после FlushBuffers. Выдает сообщение о том, что невозможно внести изменения в закрытый датасет.
 Self.MainQuery.Close;
{  Self.MainUpdateSQL.Apply(ukModify);}
 Self.MainQuery.FlushBuffers;
 Self.MainQuery.Prepare;
 Self.MainQuery.Open;

ukModify:
update Materials
set
 CardNum = :CardNum,
 Title = :Title,
 Metriks = :Metriks,
 Amount = :Amount,
 Price = :Price
where
 CardNum = :OLD_CardNum and
 Title = :OLD_Title and
 Metriks = :OLD_Metriks and
 Amount = :OLD_Amount and
 Price = :OLD_Price


 
kaif ©   (2004-04-03 02:42) [1]

А зачем закрывать запрос? Apply нужно применять при открытом запросе, а не при закрытом. При закрытом естественно ругаться будет.


 
Anatoly Podgoretsky ©   (2004-04-03 12:57) [2]

update не возвращает набор данных, поэтому Open не применимо.


 
kaif ©   (2004-04-04 01:53) [3]

2 Anatoly Podgoretsky ©   (03.04.04 12:57) [2]
Я думаю, что у автора вопроса все же прописан Select запрос тоже. Ошибка в том, что он его пытается сначала закрыть, а потом применять Apply(ukModify).


 
lockheed_man ©   (2004-04-05 01:51) [4]

Прочитал Ваши замечания. Запрос уже не закрываю и выполняю следующий код:
 Self.MainUpdateSQL.Apply(ukModify);
 Self.MainQuery.Prepare;
 Self.MainQuery.ExecSQL;

Первоначальный запрос в MainQuery такой:
select * from Materials
group by Title, CardNum,Amount,Price, Metriks, ID

В результате,когда выполняю Modify,получаю такую ошибку: Update Failed. Может вместо Modify использовать Insert?


 
ЮЮ ©   (2004-04-05 03:05) [5]

Moжет не парится, пока не понимаешь, что есть что, и просто создать TUpdateSQL (который потом указать у MainQuery.UpdateObject) и в нём прописать нужные запросы для MainQuery, после чего просто использовать MainQuery.Insert/Edit/Post


 
kaif ©   (2004-04-05 14:32) [6]

Если в запросе прописано:

select * from Materials
group by Title, CardNum,Amount,Price, Metriks, ID

то нужно юзать не ExecSQL, а метод Open или свойство
Active := True
(что то же самое).

Честно говоря, я вообще не понимаю, в чем цель происходящего.
Например, зачем group by, если поле ID уникально и нет агрегатных функций. И зачем модифицировать по условиям
CardNum = :OLD_CardNum and
Title = :OLD_Title and
Metriks = :OLD_Metriks and
Amount = :OLD_Amount and
Price = :OLD_Price
если имеется поле ID.
Или я не понимаю, что это за ID такое. Надеюсь все же, что суррогатный ключ...
----------------------------
Подойди к задаче так:
1. Есть ли в таблице первичный ключ?
2. Если нет - то его следует создать в первую очередь.
3. Всякая модификация данных (update) в условии where должна иметь сравнение с этим первичным ключем. Тогда это будет работать гарантированно быстро и предсказуемо.
4. Разберись с тем, какие поля обязательны, а какие - нет (могут иметь значение null). Постарайся, чтобы как можно большее число полей было not null по определению, иначе потом в отчетах могут возникнуть проблемы при суммировании по таким полям (хотя в Paradox могут и не возникнуть - не помню, но в любом случае суммирование по полям null - плохой стиль).
5. Возьми, как советует ЮЮ ©   (05.04.04 03:05) [5], комбинацию компонентов TQuery и TUpdateSQL и постарайся добиться работы этой парочки во всех режимах (вставка, удаление, модификация).



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
6-1078366060
gogi
2004-03-04 05:07
2004.05.02
Как узнать имя файла аттачмента не загружая письмо ?


7-1079083787
Term
2004-03-12 12:29
2004.05.02
Как определить раскладку клавиатуры?


3-1081223497
КиТаЯц
2004-04-06 07:51
2004.05.02
FireBird не ставится на Windows95, что делать?


1-1082212686
PeterTambov
2004-04-17 18:38
2004.05.02
Автоматическое отображение формы до команды Application.Run


14-1081878366
Ig
2004-04-13 21:46
2004.05.02
Создание компонент в Delphi !?