Содержание
ModifyTable(TableName : String; Mode : Integer; Record : Variant)
ModifyTable(TableName : String; Mode : Integer; Record : Variant; AltPk : String)
Вставка/изменение/удаление записи из таблицы БД.
Функция ModifyTable добавляет, изменяет или удаляем записи таблицы БД с именем TableName.
Аргумент TableName содержит имя таблицы базы данных.
Аргумент Mode определяет действие над записью:
Если Mode=emAdd, то функция добавляет запись. Если у таблицы есть поле счетчик, то в соответствующее поле Record будет записано значение этого счетчика. Если Record не содержит такого поля, то оно будет добавлено. Если добавить поле в Record невозможно, то при использовании функции с 3-мя аргументами, поле счетчика не сохраняется. А при использовании функции с 4-мя аругментами происходит ошибка.
При добавлении в таблицу БД содержащую поле счетчик, при использовании функции с 4-мя аргументами, 4-ый аргумент этой функции должен содержать настоящее имя первичного ключа таблицы БД. Иначе происходит исключение. Таким образом этот аргумент можно использовать для контроля структуры БД.
Если Mode=emEdit, то функция изменяет запись у которой первичный ключ равен соответствующему полю Record. То есть в таблице должен присутствовать первичный ключ, а в Record должно присутствовать поле с именем первичного ключа.
С помощью 4-ого аргумента можно в качестве первичного ключа использовать любое поле. При этом вы можете изменить более одной записи.
Если Mode=emDelete, то функция удаляем запись у которой первичный ключ равен соответствующему полю Record. Значения остальных полей игнорируются.
С помощью 4-ого аргумента можно в качестве первичного ключа использовать любое поле. При этом вы можете удалить более одной записи.
Аргумент Record содержит объект типа Record.
Вместо этой функции лучше использовать непосредственные запросы (insert ...) и (update ...). Потому что при использовании непосредственных запросов наличие таблицы и типы полей проверяются во время ввода программы.
Пример вставки:
Type
MyRecord = Record
Id : Integer;
Name, Inn, Kpp : String;
Country, City : Integer;
End;
Procedure OnCreate;
Var
R : MyRecord;
Begin
R.Name := 'Иванов П. С.';
R.Country := 1;
R.City := 1;
ModifyTable('Client', emAdd, R);
// Функция ModifyTable выполнит запрос:
// Insert Into Client(Name, Inn, Kpp, Country, City) Values ('Иванов П. С.', '', '', 1, 1)
// Функция добавит новый элемент Id, как это это поле является полем счетчиком таблицы.
Warning('Код добавленной записи ' + ToStr(R.Id));
End;
Пример изменения:
Type
MyRecord = Record
Id : Integer;
Name : String;
End;
Procedure OnCreate;
Var
U : MyRecord;
Begin
U.Id := 1;
U.Name := 'Иванов Петр Сидорович';
ModifyTable('Client', emEdit, U, 'Id'); // 4-ый аргумент контролирует, что бы Id был первичным ключом.
// Функция ModifyTable выполнит запрос:
// Update Client Set Name='Иванов Петр Сидорович' Where Code=1
End;
Пример с CreateRecord и Variant:
Procedure OnCreate;
Var
R : Variant;
Begin
R := CreateRecord;
R.Name := 'Иванов П. С.';
R.Inn := '';
R.Kpp := '';
R.Country := 1;
R.City := 1;
ModifyTable('Client', emAdd, R);
Warning('Код добавленной записи ' + R.Id As String);
End;
Пример изменения с CreateRecord и Variant:
Procedure OnCreate;
Var
U : Variant;
Begin
U := CreateRecord;
U.Id := 1;
U.Name := 'Иванов Петр Сидорович';
ModifyTable('Client', emEdit, U);
End;
справка