Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

UpdateSQL

2.0K
11 февраля 2004 года
laifik
37 / / 23.10.2003
Есть база, из котрой делаю запрос,подключаю UpdateSQL к запросу.
В гриде работает все нормально: удаляет ,вставляет,модифицирует(изменяет) записи.
Но при выходе из формы все остается по- прежнему , словно и ничего не изменяла.
При явном вызове Apply(ukModify);Apply(ukInsert);Apply(ukDelete);
выдает 'Update failed'
:x
1.8K
11 февраля 2004 года
MishaSt
170 / / 11.08.2003
Цитата:
Originally posted by laifik
Есть база, из котрой делаю запрос,подключаю UpdateSQL к запросу.
В гриде работает все нормально: удаляет ,вставляет,модифицирует(изменяет) записи.
Но при выходе из формы все остается по- прежнему , словно и ничего не изменяла.
При явном вызове Apply(ukModify);Apply(ukInsert);Apply(ukDelete);
выдает 'Update failed'
:x


Дык, может надо транзакцию завершить?

2.0K
12 февраля 2004 года
laifik
37 / / 23.10.2003
Дык, может надо транзакцию завершить?

I)А разве такой код ее не завершает?
Query1->ApplyUpdates();
Query1->CommitUpdates();
Query1->Close();
Query1->Open();

II)Эта проблема мне встретилась на форуме. Там вскользь прозвучало, что UpdateSQL будет работать, только если все поля таблицы - not null. Проверила, все так. Значит, в программе я все сделала правильно.
Вопросы теперь такие:
1) Как программно написать код, который бы запрещал оставлять пустые поля в таблице. Знаю, что это можно запретить в самой таблице БД. Но хотелось бы обойтись без этого.
2) А если мне не требуется заполнять все поля, какие-то могли бы остаться и пустые. Что делать в этом случае? :o
Да, а действительно, как быть в этом случае. В моей таблице около 40 полей. Не все они должны быть заполнены. Часто просто остаются пустыми. А если сделать not null, то что должно находится в полях при отсутствии значений?
1.8K
12 февраля 2004 года
MishaSt
170 / / 11.08.2003
Query1->ApplyUpdates();
Выполняет исправление
Query1->CommitUpdates();
Как раз и завершает транзакцию.
Query1->Close();
Закрывает связь с сервевером.
Query1->Open();
Открывает связь с сервевером.


Прости, не общался с Builder только с Visual C++ и API mysql(mysqlclient library).

И что, у тебя даже Table1->Post() есть?
293
13 февраля 2004 года
SEDEGOFF
586 / / 06.10.2002
У каждого поля есть такое событие OnValidate
Вот в этом событии и можно организовать проверку на пустату
Ну вот например у всех полей ставишь один обработчик и проверяешь
Вот мой пример
[COLOR=darkblue]
void __fastcall TForm40::STR_DOCPRICE_NEWValidate(TField *Sender)
{
if(prov)
{
if(STR_DOCSTATUS->AsInteger != 3 && STR_DOCSTATUS->AsInteger != 10)
{
String mess = "";
double max, min, nac;
max = STR_DOCPRICE_OFFICE->AsFloat*(1+procent);
min = STR_DOCPRICE_OFFICE->AsFloat*(1-procent);
nac = (max/STR_DOCPRICE_ENTER->AsFloat - 1)*100;

if(STR_DOCPRICE_NEW->AsFloat > max)
{
mess = "Öåíà íå äîëæíà ïðåâûøàòü "+FloatToStrF(max,ffFixed,10,3)+".\n Íàöåíêà íå äîëæíà ïðåâûøàòü "+FloatToStrF(nac,ffFixed,10,3);
Application->MessageBox(mess.c_str(), "Îøèáêà1",MB_OK|MB_ICONHAND);
Abort();
}
if(STR_DOCPRICE_NEW->AsFloat < min)
{
mess = "&Ouml;&aring;&iacute;&agrave; &iacute;&aring; &auml;&icirc;&euml;&aelig;&iacute;&agrave; &aacute;&ucirc;&ograve;&uuml; &igrave;&aring;&iacute;&uuml;&oslash;&aring; "+FloatToStrF(min,ffFixed,10,3)+".\n &Iacute;&agrave;&ouml;&aring;&iacute;&ecirc;&agrave; &iacute;&aring; &auml;&icirc;&euml;&aelig;&iacute;&agrave; &aacute;&ucirc;&ograve;&uuml; &igrave;&aring;&iacute;&uuml;&oslash;&aring; "+FloatToStrF(nac,ffFixed,10,3);
Application->MessageBox(mess.c_str(), "&Icirc;&oslash;&egrave;&aacute;&ecirc;&agrave;1",MB_OK|MB_ICONHAND);
Abort();
}
}
}

}
[/COLOR]

проверка происходит перед вставкой данных, если ты не хочешь чтобы вставлялась возбуждаешь исключение фунцией Abort().

А еще лучше сделай форму ввода новой строки, то есть чтобы чтобы новая строка добавлялась через форму, а не в гриде. Ну а в гриде соответственно запрети Insert
2.0K
14 февраля 2004 года
laifik
37 / / 23.10.2003
За подсказку - огромное спасибо. В ней еще предстоит разобраться.
А насчет проверки я уже догадалась. Правда она у меня осуществляется при вставке записи. И если значения отсутствуют, то в поля вставляется "". И все потом работает. Проблемма в том, что есть поля форматы даты и блоб-поля. В них то что вставлять?
Все это я затеяла потому, что полностью отказалась в этой программе от компонента TTable, поскольку БД на удаленном сервере и в ней много информации. БД пользуются много юзеров. Когда они запускают программу, сервер начинает тормозить. Поэтому Table1->Post() я в данной программе уже не использую.;)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог