1 (edited by Владислав Косяков 2014-06-06 19:05:49)

Topic: Скрипты и таблицы базы данных

Как при помощи скрипта получить ID записи таблицы базы данных по выбранной в гриде строке. Как вставить/удалить его в другую таблицу БД?

Re: Скрипты и таблицы базы данных

Form1.TableGrid1.dbItemID
вернет id записи, если запись в гриде не выбрана, то вернет -1


все остальные действия, такие как установить связь с записью или удалить, можно выполнить только с помощью SQL запроса в скрипте, используя функцию SQLExecute (SQL запрос)

Dmitry.

3 (edited by Владислав Косяков 2014-06-08 18:52:34)

Re: Скрипты и таблицы базы данных

ID записи отловил, спасибо. Но я хочу при помощи скрипта удалить значение поля в таблице базы данных.
Пример:
Таблица БД Oborud. В ней ссылка id_DocS. Содержимое DocS отображается в таблице TabDoc. В таблице TabDocOborud отображается список оборудования (результат запроса), при нажатии на запись из таблицы TabDoc. Как должен выглядеть скрипт, чтобы при нажатии на кнопку, запись поля id_DocS из таблицы базы данных Oborud удалялась.
Помогите, пожалуйста!

Re: Скрипты и таблицы базы данных

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   id: integer;
begin
     id := Form1.TabDocOborud.dbItemID; // получаем id записи оборудования
     if id <> -1 then SQLexecute('UPDATE Oborud SET id_DocS = null WHERE id = ' + IntToStr(id)); // если id не равно -1, то выполняет SQL запрос по удалению значения id_DocS
end;

при выполнении этого скрипта, будет выведено сообщение об ошибке, не обращайте пока на него внимание, будет исправлено в версии 1.41

Dmitry.

5 (edited by Владислав Косяков 2014-06-09 18:32:00)

Re: Скрипты и таблицы базы данных

Спасибо!
На такое трудно не обратить внимание "Курсор не вернулся из запроса"... Не хватает "Kernel panic"... smile
А как на счет обратной процедуры?

id := OborudAddDoc.OborudAddDocTab.dbItemID;
SQLexecute('UPDATE Oborud SET id_DocS = (текущая строка таблицы TabDoc);

Re: Скрипты и таблицы базы данных

Владислав Косяков

id := OborudAddDoc.OborudAddDocTab.dbItemID;
SQLexecute('UPDATE Oborud SET id_DocS = '+ cbDocs.dbItemID +'  WHERE id = ' +  IntToStr(id) );

где cbDocs это комбобокс с нужным выбранным значением документа или TableGrid

Dmitry.

7 (edited by Владислав Косяков 2014-06-10 18:41:10)

Re: Скрипты и таблицы базы данных

Что-то не идет, при запуске проекта ругается на несовместимый тип, видны скрытые вкладки.
При нажатии на кнопку возникает критическая ошибка.

procedure OborudAdd_ButtonAddDoc_OnClick (Sender: string; var Cancel: boolean);
var
   id: integer;
begin
     id := OborudAddDoc.OborudAddDocTab.dbItemID;
     SQLexecute('UPDATE Oborud SET id_DocS = '+ BD.TabDoc.dbItemID +' WHERE id = ' + IntToStr(id) );
     OborudAddDoc.ButtonCancel.Click;
end;

Если закомментировать строку SQLexecute... то проект запускается штатно. Видимо там ошибка...
И вопрос вдогонку

OborudAddDoc.закрыть 

Как это правильно написать?

Re: Скрипты и таблицы базы данных

Извиняюсь, допустил ошибку, попробуйте так

procedure OborudAdd_ButtonAddDoc_OnClick (Sender: string; var Cancel: boolean);
var
   id: integer;
begin
     id := OborudAddDoc.OborudAddDocTab.dbItemID;
     SQLexecute('UPDATE Oborud SET id_DocS = '+ IntToStr(BD.TabDoc.dbItemID) +' WHERE id = ' + IntToStr(id) );
     OborudAddDoc.ButtonCancel.Click;
end;

закрыть форму
OborudAddDoc.Close;

Dmitry.

Re: Скрипты и таблицы базы данных

Спасибо!