Главная страница
    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.46 MB
Время: 0.036 c
7-1079075427
smu
2004-03-12 10:10
2004.05.02
Как очистить кэш дисковода?


3-1081419593
ev
2004-04-08 14:19
2004.05.02
Как через SQL запрос найти значения подстроки, без учета регистра


14-1081414096
Ivolg
2004-04-08 12:48
2004.05.02
Таймер


4-1078389788
evvcom
2004-03-04 11:43
2004.05.02
Побочный эффект от перехвата API-вызова


8-1075134301
ST
2004-01-26 19:25
2004.05.02
FFT





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