Magistr(ru) |
Отправлено: 01.08.2003, 04:32 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 20
|
Следующий код сохраняет данные с подтверждением. Но даже если не делалать никаких изменений в Query и нажать кнопку сохранить, то все равно MessageBox!
{
if(Application->MessageBox(
("Действительно хотите изменить?"),
"Подтвердите занесение в базу данных!",
MB_YESNO + MB_ICONQUESTION) == IDYES)
{
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET NOM='"+Edit1->Text+"'" );
Query2->SQL->Add("where NOM='"+Query1NOM->Value+"'");
Query2->ExecSQL();
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET SS='"+Edit2->Text+"'" );
Query2->SQL->Add("where SS='"+Query1SS->Value+"'");
Query2->ExecSQL();
Query1->Close();
Query1->Open();
}
else
Abort();
}
|
|
TimoN |
Отправлено: 01.08.2003, 07:59 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 7
|
QUOTE (Magistr(ru) @ 01/08/2003, 05:34) | Следующий код сохраняет данные с подтверждением. Но даже если не делалать никаких изменений в Query и нажать кнопку сохранить, то все равно MessageBox!
{
if(Application->MessageBox(
("Действительно хотите изменить?"),
"Подтвердите занесение в базу данных!",
MB_YESNO + MB_ICONQUESTION) == IDYES)
{
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET NOM='"+Edit1->Text+"'" );
Query2->SQL->Add("where NOM='"+Query1NOM->Value+"'");
Query2->ExecSQL();
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET SS='"+Edit2->Text+"'" );
Query2->SQL->Add("where SS='"+Query1SS->Value+"'");
Query2->ExecSQL();
Query1->Close();
Query1->Open();
}
else
Abort();
} |
У тебя ведь этот код выполняется при нажатии клавиши. Попробуй установи флаг в event для редактирования Query. И вставь ещё одно условие перед MessageBox'om (проверка были ли изменены данные). И всё... |
|
Magistr(ru) |
Отправлено: 02.08.2003, 03:42 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 20
|
Пробовал if(application.....)..
делать if(Query1->Modified), но это тоже не помогает |
|
Admin |
Отправлено: 02.08.2003, 11:04 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Приведите более полный код что и как делаете
и объясните понятней что не так.
|
|
Magistr(ru) |
Отправлено: 02.08.2003, 11:13 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 20
|
if(Query1->Modified)\если Query1 изменён
if(Application->MessageBox(
("Действительно хотите изменить?"),
"Подтвердите занесение в базу данных!",
MB_YESNO + MB_ICONQUESTION) == IDYES)
{
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET NOM='"+Edit1->Text+"'" );
Query2->SQL->Add("where NOM='"+Query1NOM->Value+"'");
Query2->ExecSQL();
Query2->SQL->Clear();
Query2->SQL->Add("UPDATE a SET SS='"+Edit2->Text+"'" );
Query2->SQL->Add("where SS='"+Query1SS->Value+"'");
Query2->ExecSQL();
Query1->Close();
Query1->Open();
}
else
Abort();
} |
|
Admin |
Отправлено: 02.08.2003, 14:20 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Понятно, что ничего не понятно,
и как-то это не совсем правильно организовано.
QUOTE |
if(Query1->Modified){
|
это вообще срабатывает ?
Во-первых: Modified
Indicates whether the active record is modified.
Во-вторых: А разве запрос типа "Selet * from a"
может быть вообще Modified, ладно бы уж Table
----
Тогда уж создавать некий флаг наличия изменений
bool isDateChange = false;
и в событии OnDataCghange компонента DataSource
CODE |
void __fastcall TForm1::DataSource1DataChange(TObject *Sender,
TField *Field)
{
isDateChange = true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(isDataChange && Application->MessageBox(" Изменить?",
"Подтвердите изменения !",MB_YESNO + MB_ICONQUESTION) == IDYES)
{
.....
isDataChange = false;
}
else Abort();
}
}
//---------------------------------------------------------------------------
// |
что-то типа того,
или включить режим кэширования CashedUpdates
и подтверждать или отменять изменения,
или подтверждать изменения транзакцией — Commit
А то как-то неясно — если уже Query1->Modified,
то есть например где-то в DBGrid изменили значение,
то зачем еще нужен Update по этой таблице ?
Другими словами, вот примерная схема:
CODE |
// нажимаем кнопку сохранить
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if((Edit1->Modified || Edit2->Modified) &&
(Application->MessageBox(("Изменить ?"),
"Подтвердите",MB_YESNO + MB_ICONQUESTION) == IDYES))
{
// сохраняем изменения
// ...
ShowMessage("Modified");
}
else ShowMessage("Not Modified");
}
|
а при чем там if(Query1->Modified) я не понял...
|
|