Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
14-1081438044
TButton
2004-04-08 19:27
2004.05.02
Мониторинг сети


3-1081136342
Марат
2004-04-05 07:39
2004.05.02
Формат ячейки в DBGrid


3-1081414223
Аноним
2004-04-08 12:50
2004.05.02
MSAccess + TStream


1-1081154071
alexvir
2004-04-05 12:34
2004.05.02
Создание MDIChild-формы в фоне (не выводя наверх).


14-1081712111
Yanis
2004-04-11 23:35
2004.05.02
Такого вы еще не видели ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский