C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Update и MessageBox
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) я не понял...


Вернуться в Работа с базами данных в C++Builder