понедельник, 31 октября 2011 г.

О MSEIDE. Параметры в tmsesqlscript.

Что такое вообще так называемые "параметры" с точки зрения компонент, связанных с работой с СУБД? Это переменные в SQL скрипте. Т.е. перед моментом исполнения скрипта, на место переменной в скрипте поставляется конкретное текстовое или численное значение и скрипт отправляется СУБД на исполнение.
Синтаксис параметров в скрипте такой:
:VAR_NAME
Пример использования:
SELECT PASS, MAIL FROM MEMBERS WHERE MAIL = :pEMAIL;
:pEMAIL в данном случае - параметр.
Параметры добавляются в сам компонент скрипта (во всяком случае я так делал и это работало). Как всегда способа добавления два: "run-time"и графический.


В графическом:
  • Выделяем нужный компонент скрипта;
  • В инспекторе объектов ищем свойство params.coumt и задаем нужное количество параметров;
  • Раскрываем (слева плюсик появляется), перед нами появляется список параметров, которые можно спокойно редактировать. 
Поле name - имя параметра в SQL скрипте (тот же pEMAIL), двоеточие указывать не надо. Имена параметрам принято давать заглавными буквами с префиксом "p".
Поле DataType - тип данных.
Поле Size - размер параметра (поля value).


В "run-time" на мой взгляд все гораздо проще:
var VAR:TYPE;NAME:STRING;
...
script.params[0].AsTYPE:=VAR;
script.params[0].Name:=NAME;
Например:
var email:string;
...
query.SQL.SetText:=SELECT PASS, MAIL FROM MEMBERS WHERE MAIL = :pEMAIL;
query.params[0].AsString:=EMAIL;
query.params[0].Name:='pEMAIL';

Все! MSEIDE автоматически создает поля параметров при разборе sql-оператора. К ним обращается по номеру. Номер параметра - его номер от начала скрипта. При помощи AsType мы указываем тип параметра и задаем его значение. Так же можно обращаться к параметру по его имени.
Всегда сначала идет "AsType", а затем заполняются поля параметра.
Параметры есть и в tMseSqlScript и в tMseSqlQuery и во многих других компонентах, где нужно писать SQL-скрипты. Но об этом, и в частности о query, в следующей статье.

суббота, 8 октября 2011 г.

О MSEIDE. Добавление элементов интерфейса в программном коде, создание и соединение с БД.

Добавление элементов интерфейса в программном коде.
Для этого необходимо:
1) Создать виджет, принадлежащий или форме или другому потомку класса TComponent
2) Вставить созданный виджет туда, куда он принадлежит.
3) ...
4) PROFIT!!!


Например:
  var mainfo:tmainfo;Mark:tbooleanedit;
  ...
  Mark:=tbooleanedit.Create(mainfo.MainTable);
  mainfo.Maintable.InsertWidget (Mark);
  ...


Виджет создан! Если он не отображается, то надо свойству visible:=true, если не работает, что свойству enabled:=true. Примерно так! =)


Создание базы данных.
В MSEIDE богатый инструмент для работы с базами данных. Мы будет рассматривать это на примере работы с firebird 2.5.
Для создания базы данных firebird надо перетащить на форму следующие компоненты с вкладки DB окна Component Palette:
1) tmseibconnection - компонент подключения
2) tmsesqltransaction - компонент транзакции для каких-то темных делишек подключения (типа создания БД) =)
3) tmsesqlscript - компонент sql скрипта, который потом будет создавать нашу таблицу.
Дальше необходимо заполнить все поля связанные с местоположением и доступом к базе данных через инспектор объектов у компонента типа tmseibconnection.
После устанавливаем связь между tmseibconnection и tmsesqltransaction. Т.е. указываем через инспектор у компонента типа tmsesqltransaction в поле database наш компонент подключения, а у компонента подключения в поле transaction указываем наш компонент типа tmsesqltransaction.
Теперь они связаны и готовы к работе.
В mseide у компонента tmseibconnection есть специальный метод для создания базы данных - createdatabase (sql оператор создания базы данных).


Например:
var reg_tran:tmsesqltransaction; con:tmseibconnection;
...
con.createdatabase ('CREATE DATABASE ''C:\firdt.fdb'' user ''sysdba'' password ''MASTERKEY'' PAGE_SIZE 4096 DEFAULT CHARACTER SET ASCII;');
con.connected;//База данных создана и приложение выполнило к ней подключение


Теперь надо связать наш tmsesqlscript с подключением и транзакцией в рамках которой мы сейчас работаем. В принципе для скрипта без разницы через какую транзакцию работать. Но мы не будем их плодить, так что пускай все компоненты будут работать через одну и ту же транзакцию.
Чтобы связать tmsesqlscript опять надо воспользоваться инспектором объектов и указать в поле database наше подключение, а в поле transaction соответственно транзакцию.
В поле SQL компонента типа tmsesqlscript пишем скрипт. Для его исполнения необходимо будет сделать вызвать метод выполнения скрипта Execute и подтвердить транзакцию, через которую он работает.


Например:
  var reg_sctipt:tmsesqlscript;reg_tran:tmsesqltransaction;
  ...
  REG_SCRIPT.EXECUTE;//метод выполнения скрыпта
  reg_tran.commit;


Без подтверждения транзакции никакие изменения в БД не сохранятся!
Кстати, как вы заметили, я не сказал про параметры в tmsesqlscript. А они там есть! Увы, но о этом я расскажу в следующий раз =)