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

 
Помогите с UpdateSQL
Magistr(ru)
Отправлено: 24.07.2003, 21:53


Ученик-кочегар

Группа: Участник
Сообщений: 20



У меня есть запрос Query из нескольких таблиц. Как зделать Insert,Modify,Delete при помощи UpdateSQL если в этих таблицах есть одинаковые поля для связи?
Если не трудно-скиньте ссылку где можно почитать об UpdateSQL.
Nick
Отправлено: 25.07.2003, 05:02


Машинист паровоза

Группа: Участник
Сообщений: 247



Если это IBase то я делаю так.
В UpdateSQL пишу запрос на изменение главной таблицы
Например: Есть заголовок документа и данные документа
при редактировании строки данных на событие AfterPost (BeforePost)
вызывается хранимая процедура которая как раз производит измененя строк документа. При этом заголовок документа фиктивно изменяется и блокирует изменение документа другим пользователем.
Фиктивно это (Update Documents set Documents_ID = :Documents_ID where Documents_ID = :Documents_ID);
Такие же процедуры (или таже самая) производит добавление и удаление данных по соответсвующим событиям.
Magistr(ru)
Отправлено: 29.07.2003, 06:03


Ученик-кочегар

Группа: Участник
Сообщений: 20



Не обязательно UpdateSQL, можно что-нибудь другое
для редактирования целого запроса а не таблиц по очереди.
AnsiString s,sSQL;
const AnsiString s1 =",";
s="";
sSQL = "Update Pers SET ";

if (Query1->Fields->Fields[0]->AsString != Edit1->Text)
{
if (s != "") { s += s1; sSQL += s1; }
s += " фамилию";
sSQL += "Fam='"+Edit1->Text+"'";
}
if (Query1->Fields->Fields[1]->AsString != Edit1->Text)
{
if (s != "") { s += s1; sSQL += s1; }
s += " имя";
sSQL += "Nam='"+Edit1->Text+"'";
}
if (Query1->Fields->Fields[2]->AsString != Edit3->Text)
{
if (s != "") { s += s1; sSQL += s1; }
s += " отчество";
sSQL += "Par='"+Edit3->Text+"'";
}

if (s != "")
if (Application->MessageBox(
("Действительно хотите изменить "+s+"?").c_str(),
"Подтвердите занесение в базу данных",
MB_YESNO + MB_ICONQUESTION) == IDYES)
{
Query2->Close();
Query2->SQL->Clear();
Query2->SQL->Add(sSQL+" WHERE Num=" + IntToStr(Query1->Fields->Fields[3]->AsInteger));
Query2->ExecSQL();
Query1->Close();
Query1->Open();

В первую таблицу записывает в вставленную строку. А во второй таблице записывает не в вставленную строку, а заменяет первую строку.

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