Я новичок в программировании на делфи. В настоящее время я создаю простую программу для ноутбуков, и мне нужна помощь. У меня есть форма с контактами с 5 полями tEdit. Я думаю, что мог бы создать хранимую процедуру в моей базе данных sybase для вставки записи в таблицу контактов, чтобы я мог вызвать ее с помощью моей программы Delphi. Как мне вызвать эту процедуру в delphi? значения, которые будут вставлены, должны быть взяты из пользовательского ввода в эти поля tEdit. У кого-нибудь есть предложения? Или я неправильно мыслю? заранее спасибо
Вставка записи в таблицу sybase db с использованием хранимой процедуры - программирование в Delphi
Ответы (1)
Здесь у вас есть несколько вариантов, и они будут зависеть от того, какие элементы управления VCL вы используете. (1). Вы можете вставить через компонент tTable. Это позволит вам иметь быстрый, легкий, низкоуровневый контроль. Вы бросаете компонент на форму, устанавливаете свойства компонента (имя таблицы и т. д.), а затем что-то вроде
MyTable.Open;
MyTable.Insert; (or maybe append)
MyTable.FieldByName('MY_FIELD').AsString := 'Bob'; // set the field values
MyTable.post;
(2). Используйте SQL. Поместите компонент SQL в форму. Установите свойство SQLText, используя параметры; например: «Вставить в таблицу (MyField) значения: X». Мое мнение, что это проще сделать в сложных ситуациях, коррелированных подзапросах и т.д.
MySQL.Close;
MySQL.ParamByName('X').AsString := 'BOB';
ExecSQL;
(3). Используйте хранимые процедуры. - Преимущество этого заключается в том, что они могут использоваться несколькими приложениями и могут быть легко изменены. Если вы хотите обновить код SQL, вы обновляете его один раз (в базе данных), вместо того, чтобы изменять его в приложении, а затем распространять приложение среди нескольких пользователей.
Код для этого будет почти идентичен (2), хотя я не знаю специфики вашей библиотеки VCL. Однако на самом деле вы укажете подпрограмму для запуска, укажите значения параметров, а затем выполните хранимую процедуру.
Обратите внимание, что все эти подпрограммы будут возвращать код ошибки или код исключения. Лучше всего всегда проверять это...
Вот немного более сложный пример, использующий оператор SQL под названием qLoader. qLoader существует в модуле данных. Я передаю параметр, выполняю оператор SQL, затем перебираю все результаты.
try
with dmXLate.qLoader do
begin
Close;
ParamByName('DBTYPE').AsString := DBType;
Open;
while not dmXLate.qLoader.Eof do
begin
// Here is where we process each result
UserName:= dmXLate.qLoader.FieldByName('USERNAME').AsString;
dmXLate.qLoader.Next;
end;
end;
except
on E: Exception do
begin
ShowMEssage(E.Message);
exit;
end;
end;
here
. - person TLama   schedule 09.11.2014