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();
В первую таблицу записывает в вставленную строку. А во второй таблице записывает не в вставленную строку, а заменяет первую строку.
|
|