1 (edited by savage 2014-10-15 05:32:10)

Topic: [Решено] Удалить запись с получением id для послед действия

Всем привет.
есть необходимость в получении id записи строки в гриде с дальнейшим использованием а скрипте.
проблема в том, что действие скрипта должно выполняться после нажатия на кнопку " удалить". Использование связки onclick-after click нежелательно.

2 (edited by savage 2014-10-14 07:22:35)

Re: [Решено] Удалить запись с получением id для послед действия

DriveSoft, почему возможность получения id предусмотрена только при использовании кнопки "Сохранить"? Имхо, она (такая возможность) как раз и пригодилась бы...

Re: [Решено] Удалить запись с получением id для послед действия

Не совсем понял в чем проблема.
OnClick - получаем id записи, которая будет удалена
OnAfterClick - работает с этим id после удаления (почему такая связка нежелательна?)


либо можно все сделать в OnClick, удалить запись с помощью SQL и далее использовать id удаленной записи.

Dmitry.

4 (edited by savage 2014-10-14 10:24:30)

Re: [Решено] Удалить запись с получением id для послед действия

У меня при удалении в таблице 1 происходит проверка и если проверка удалась, удаляется запись в таблице 2. Если вешать все на onclick, то не получится так, что я после отмены удаления в таблице 1 получу, все равно, удаленную запись в  таблице 2?

5 (edited by savage 2014-10-14 10:29:00)

Re: [Решено] Удалить запись с получением id для послед действия

Не совсем понял в чем проблема.
OnClick - получаем id записи, которая будет удалена
OnAfterClick - работает с этим id после удаления (почему такая связка нежелательна?)

Не хочу вместо 1 процедуры получить 2... и так скрипт стал увеличился до критических размеров...

DriveSoft, почему возможность получения id предусмотрена только при использовании кнопки "Сохранить"?

  Может имеет смысл повесить эту возможность (считки с кнопки id) на  Action "Удалить" тоже?

Re: [Решено] Удалить запись с получением id для послед действия

savage wrote:

У меня при удалении в таблице 1 происходит проверка и если проверка удалась, удаляется запись в таблице 2. Если вешать все на onclick, то не получится так, что я после отмены удаления в таблице 1 получу, все равно, удаленную запись в  таблице 2?

у кнопки "Удалить запись" можно отключить подтверждение удаления, и организовать это подтверждение через скрипт с функцией MessageDlg



savage wrote:

DriveSoft, почему возможность получения id предусмотрена только при использовании кнопки "Сохранить"? Имхо, она (такая возможность) как раз и пригодилась бы...

Хорошая идея, спасибо, реализовал, но само собой доступ к этому id можно получить только в событии OnAfterClick

procedure Form1_Button1_OnAfterClick (Sender: string);
begin
     ShowMessage(IntToStr(Form1.Button1.dbGeneralTableId));
end;

для этой возможности, скачайте бета версию 1.46
https://www.dropbox.com/s/30ysr48sd8ca4 … 6.zip?dl=0

Dmitry.

7 (edited by savage 2014-10-15 05:30:54)

Re: [Решено] Удалить запись с получением id для послед действия

ок. Спасибо. Жаль, что только дома смогу воспользоваться. Вечером отпишусь
все работает штатно. Спасибо!

8 (edited by savage 2014-10-15 19:23:11)

Re: [Решено] Удалить запись с получением id для послед действия

DriveSoft,
мой код:

// процедура корректного удаления подзадачи с учетом созданной на ее базе задачи подчиненного
procedure NewTask_BtDelSubTask_OnAfterClick (Sender: string);
var
 idST, idT: string;

begin
 idST:= IntToStr(NewTask.BtDelSubTask.dbGeneralTableId);

 idT:= IntToStr(SQLExecute('SELECT id FROM Tasks WHERE idSubTask = '+idST +';'));

 if idT <> '' then SQLExecute ('DELETE FROM Tasks WHERE idSubTask ="'+idST+'";');

end;

Вопрос - что лучше: использовать - удаление по id строки в таблице  Tasks  или по значению соответствующему значению в поле idSubTask таблицы Task (как у меня)? и тот и другой вариfнт отрабатывают в данный момент, но вопрос - который из них  оптимальнее?

PS idSubTask содержит значения id записи подзадачи в таблице SubTasks, которая и удаляется первой

Re: [Решено] Удалить запись с получением id для послед действия

честно говоря не пойму структуру, почему в таблице Task есть внешний ключ на таблицу SubTask (подзадачи), должно быть наоборот, в таблице SubTask, внешний ключ на таблицу Task


т.к. задача, может иметь много подзадач, и при создании внешнего ключа в таблице SubTask (id_Task) можно включить поддержку целостности при удалении, т.о. при удалении задачи, ее подзадачи удалялись бы автоматически.

Dmitry.

10 (edited by savage 2014-10-15 20:29:40)

Re: [Решено] Удалить запись с получением id для послед действия

именно так и есть.  idSubTask - просто доп. поле в таблице Tasks, куда я пишу при создании новой подзадачи ee id (если сотрудник не равен тому, кто ее ставит). Короче, у меня сложный случай - я вынужден привязывать подзадачи к Задаче (это нормально), но в отдельных случаях подзадача является генератором Задачи (подзадача для руководителя = задача для подчиненного).

DriveSoft, если не возражаете, то посмотрите проект. У меня все работает и есть, имхо, логика такого решения. Я просто немного путанно объясняю

Post's attachments

Attachment icon PlanWork.zip 358.97 kb, 527 downloads since 2014-10-15 

11 (edited by abgroup-artur 2017-01-30 10:50:04)

Re: [Решено] Удалить запись с получением id для послед действия

Как использовать
Form1.Button1.dbGeneralTableId)
при добавлении записи скриптом:
SQLExecute('INSERT INTO OrgUch......

Re: [Решено] Удалить запись с получением id для послед действия

abgroup-artur
Например так

SQLExecute('INSERT INTO OrgUch (id_parent, comment) VALUES ('+IntToStr(Form1.Button1.dbGeneralTableId)+',"'+your comment+'")');
Dmitry.

Re: [Решено] Удалить запись с получением id для послед действия

а вот эта кнопка : Form1.Button1 какая должна быть?

Re: [Решено] Удалить запись с получением id для послед действия

Кнопка должна  быть с действием "Сохранить запись"

Dmitry.

Re: [Решено] Удалить запись с получением id для послед действия

выдает значение -1, вместо нужного id

Re: [Решено] Удалить запись с получением id для послед действия

id записи можно получить, если например кнопка расположена на форме, где редактируется запись.
Обычно id записи удобно получить используя событие OnAfterClick

Dmitry.

Re: [Решено] Удалить запись с получением id для послед действия

У меня нет такой формы, я все добавляю через скрипт.

18 (edited by abgroup-artur 2017-01-30 20:57:00)

Re: [Решено] Удалить запись с получением id для послед действия

И почему такие трудности с получением id записи? Теоретически должно быть все просто. Я победил эту проблему так:

SQLExecute('INSERT INTO OrgUch (id_KP, id_Orgs, NomerKP) VALUES ('+IntToStr(idKP)+','+IntToStr(z)+','''+Maska_nom+''')');
id_OU:= SQLExecute('SELECT id FROM OrgUch WHERE (id_KP = '+IntToStr(idKP)+') AND (id_Orgs = '+IntToStr(z)+') AND (NomerKP = '''+Maska_nom+''') ');
Использовал обратный запрос!!! (но чувство карявости не покидает).

Re: [Решено] Удалить запись с получением id для послед действия

Пожалуйста приложите ваш проект с описанием, что вы пытаетесь реализовать.

Dmitry.

Re: [Решено] Удалить запись с получением id для послед действия

Доработаю немного, "причешу"  и обязательно Вам пришлю.