Topic: При удалении записи в одной таблице изменить запись в другой

Есть две таблицы, не связанные между собой: statia и sprava. Записи в последней формируются процедурой переноса значений с формы редактирования первой:

procedure frmAddSprava_Button1_OnAfterClick (Sender: string);
var
sStatiaNum: string;  // номер статьи
sStatiaName: string;  // содержание статьи
sStatiaNote: string;     // примечание
sTerm: string;              // срок хранения  
sLinesNum: string;    // номер строки = ID записи в таблице statia
begin
sStatiaNum  := '"'+frmAddSprava.Edit1.Text+'"';
sTerm  := '"'+frmAddSprava.Edit2.Text+'"';
sLinesNum  := '"'+frmAddSprava.Edit4.Text+'"';
sStatiaName  := '"'+frmAddSprava.Memo4.Text+'"';
sStatiaNote  := '"'+frmAddSprava.Memo5.Text+'"';
SQLExecute ('INSERT INTO sprava (linesNum, statiaNum, statiaName, term, statiaNote)' +
'VALUES ('+sLinesNum+', '+sStatiaNum+', '+sStatiaName+', '+sTerm+', '+sStatiaNote+')');
frmAddSprava.Close;
frmTipNom.Close;
frmMain.TableGrid1.dbUpdate;
frmMain.TableGrid2.dbUpdate;
end;

Одновременно из Edit3 на frmAddSprava в поле otmetka таблицы statia записывается "Внесено".
СУТЬ ВОПРОСА: Как сделать, чтобы при удалении записи из таблицы sprava  с неким  linesNum ("Целое число") у записи в таблице statia, имеющей значение ID равное этому linesNum, очищалось поле otmetka?

Post's attachments

Attachment icon 2015-05-03_104914.jpg 48.9 kb, 353 downloads since 2015-05-03 

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

У кнопки удаления, необходимо создать событие OnClick

procedure Form1_Button5_OnClick (Sender: string; var Cancel: boolean);
var
    ilinesNum: integer;
begin
    ilinesNum := SQLExecute ('SELECT linesNum FROM sprava WHERE '+Form1.TableGrid1.sqlValue);
    SQLExecute ('UPDATE statia SET otmetka=NULL WHERE id='+IntToStr(ilinesNum) );
end;
Dmitry.

3 (edited by kunar80 2015-05-03 13:11:37)

Re: При удалении записи в одной таблице изменить запись в другой

Спасибо, Дмитрий. Работает не корректно. Добавляю записи 2, 4, 6, Если удалять их в таком порядке, то, будто-бы, нормально. При другом порядке даёт сбои - либо убирает отметку у другой записи, либо вообще не работает. Проект прилагаю. Специально в гридах добавил колонки с ID и linesNum, чтобы было видно идентичность номеров. Ещё один момент: возможно добавление в sprava нескольких записей с одинаковым linesNum (такова специфика). Может быть процедуру логичнее привязать не к кнопке удаления, а к OnChange грида? Т.е.  отметка "Внесено" есть если в гриде есть хотя бы одна запись с linesNum = ID
Входите в проект как пользователь.

Post's attachments

Attachment icon Nomenklatura.zip 219.41 kb, 535 downloads since 2015-05-03 

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

К сожалению не смогу помочь это сделать в проекте, так как сложно понять быстро, что к чему.
Можете сделать тестовый проект с примером, в котором это не работает, постараюсь помочь.

Dmitry.

5 (edited by kunar80 2015-05-04 13:42:20)

Re: При удалении записи в одной таблице изменить запись в другой

Делаю тестовый. Работает, но при запуске выскакивает такая ошибка. Что это значит?

Post's attachments

Attachment icon 2015-05-04_162651.jpg 19.84 kb, 342 downloads since 2015-05-04 

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

Приложите пожалуйста проект, посмотрю где ошибка.

Dmitry.

Re: При удалении записи в одной таблице изменить запись в другой

Этой ошибки уже нет. Проект прилагаю. Не хочет корректно работать удаление отметки "Внесено"

Post's attachments

Attachment icon Test_Doc.zip 54.6 kb, 489 downloads since 2015-05-04 

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

поправил

Post's attachments

Attachment icon Test_Doc2.zip 53.87 kb, 473 downloads since 2015-05-04 

Dmitry.

9 (edited by kunar80 2015-05-04 20:27:02)

Re: При удалении записи в одной таблице изменить запись в другой

Спасибо, Дмитрий. Вопрос всё же решён лишь частично.
1) Не учтён случай, когда одна и та же статья из типового перечня внесена в ведомственный перечень несколько раз. Например, ст.22 "Переписка с высшими органами власти" трижды внесена в ведомственный перечень: "Переписка с Президентом...", "Переписка с Верховным Советом" и "Переписка с Кабинетом министров". При удалении одной из трёх записей удаляется отметка "Внесено" у ст.22 в типовом перечне. Но ведь две записи, созданные на основе этой статьи, в ведомственном перечне остались! А значит и отметка не должна быть удалена. Может, всё же не к кнопке удаления привязывать, а к OnChange грида? Если в гриде есть хотя бы одна запись, созданная на основе ст.22, отметка "Внесено" у статьи присутствует, в противном случае её нет. Алгоритм, по-моему, должен быть таким. Вот только не знаю, как реализовать.
2) На главной форме есть надобность иметь две кнопки "Открыть запись" и, соответственно, две формы редактирования. При двойном клике на записи открываются обе формы редактирования. Как прописать для двойного клика открытие одной конкретной формы или вообще отменить открытие форм редактирования по двойному клику?

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

2) Такой вопрос я уже задавала. Посмотрите вот эту тему:
http://myvisualdatabase.com/forum/viewtopic.php?id=1174

Re: При удалении записи в одной таблице изменить запись в другой

sataline wrote:

2) Такой вопрос я уже задавала. Посмотрите вот эту тему:
http://myvisualdatabase.com/forum/viewtopic.php?id=1174

Спасибо

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

kunar80
1. К сожалению мне не известна предметная область вашего проекта, пожалуйста, задайте вопрос в более общей форме.
Но  если я правильно понял, вам необходимо сделать SQL запрос для проверки, сколько записей есть в базе в определенными критериями, это можно сделать так

if SQLExecute ('SELECT COUNT(*) FROM tablename WHERE fieldname=4') = 1 then ...
Dmitry.

Re: При удалении записи в одной таблице изменить запись в другой

DriveSoft wrote:

если я правильно понял, вам необходимо сделать SQL запрос для проверки, сколько записей есть в базе в определенными критериями

Прошу в таблице tipovoiDoc посмотреть и исправить вычисляемое поле otmetka:

(CASE WHEN ('SELECT Count(*) FROM myDoc WHERE myDoc.linesTipDoc=tipovoiDoc.id AND linesTipDoc=4')>0 then 'Внесено' else '' end)

При такой формуле вычисляемого поля пишет "Внесено" у всех записей таблицы tipovoiDoc. Если вместо ">0" записать "=1",  то не пишется ничего. Отметка "Внесено" должна быть только у записей, присутствующих в таблице myDoc (условие: myDoc.linesTipDoc=tipovoiDoc.id)

Post's attachments

Attachment icon Test_Doc3.zip 55.86 kb, 487 downloads since 2015-05-05 

Не боги горшки лепят!

Re: При удалении записи в одной таблице изменить запись в другой

kunar80
Попробуйте пожалуйста такое выч. поле

(CASE WHEN (SELECT Count(*) FROM myDoc WHERE myDoc.linesTipDoc=tipovoiDoc.id) > 0 then 'Внесено' else '' end)

в предыдущем примере fieldname=4 я дал лишь в качестве примера.

Dmitry.

Re: При удалении записи в одной таблице изменить запись в другой

Большое спасибо. Отлично работает!

Не боги горшки лепят!