Вставка записи в таблицу sybase db с использованием хранимой процедуры - программирование в Delphi

Я новичок в программировании на делфи. В настоящее время я создаю простую программу для ноутбуков, и мне нужна помощь. У меня есть форма с контактами с 5 полями tEdit. Я думаю, что мог бы создать хранимую процедуру в моей базе данных sybase для вставки записи в таблицу контактов, чтобы я мог вызвать ее с помощью моей программы Delphi. Как мне вызвать эту процедуру в delphi? значения, которые будут вставлены, должны быть взяты из пользовательского ввода в эти поля tEdit. У кого-нибудь есть предложения? Или я неправильно мыслю? заранее спасибо


person TechnoA    schedule 09.11.2014    source источник
comment
Я бы начал here.   -  person TLama    schedule 09.11.2014
comment
Я уже подключен к своей базе данных через компоненты FireDac. Дело в том, что я не уверен, что это хороший способ вставить запись с помощью хранимой процедуры, и я не знаю, как перевести текст из полей tEdit в значения, которые необходимо вставить: / Я запутался   -  person TechnoA    schedule 09.11.2014
comment
Использование SP для добавления записей — это хорошо, но разработчики Delphi не всегда могут позволить себе роскошь решать, что поместить на сервер базы данных (я имею в виду доступные SP, а не данные). Google для хорошего онлайн-учебника по использованию элементов управления с поддержкой БД в приложении Delphi - вы понимаете, что Delphi поставляется с элементами управления, такими как TDBEdit, которые работают с данными базы данных через TDataSet, поэтому вам вообще не нужны TEdits? Смотрите ОЛХ.   -  person MartynA    schedule 09.11.2014


Ответы (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;
person user1009073    schedule 10.11.2014