Получение информации во Frontol Win32 из сторонней внешней базы данных

В некоторых случаях может возникать задача по использованию во Frontol Win32 информации, которая хранится в сторонней внешней БД, например, для получения информации по скидкам или бонусам. Для того, чтобы эту задачу решить, необходимо воспользоваться механизмом сценариев, из которого выполнить запрос во внешнею БД с помощью ActiveX компонентов, предоставляющих интерфейс для работы с базами данных, например ADO.

Рассмотрим подробнее процесс написания такого сценария на следующем примере.

Поскольку пример ориентирован на описание процесса подключения к внешней БД, то поставим себе следующую задачу стоит следующим образом: необходимо из внешней базы данных получить имя клиента по введенной во Frontol Win32 карте.

Допустим, что внешняя база данных работает под управлением Microsoft SQL Server и содержит в себе следующие 3 таблицы:

Таблица client, содержащая информацию о клиенте

Таблица ccard, содержащая информацию о дисконтных картах

Таблица clientcard, в которой хранится связь карт и клиентов

Поскольку наша база данных работает под управлением Microsoft SQL Server, то нет необходимости в установке дополнительных драйверов. В случае использования другой СУБД может потребоваться установка дополнительного драйвера для доступа к базе данных.

Итак для получения необходимой нам информации достаточно просто написать сценарий, срабатывающий, например, при вводе карты в чек:

function BeforeAct(AO, RO, E, O)
{
/* Объект Connection обеспечивает механизм для инициализации и установки
соединения, выполнения запросов и использования транзакций   */
var Conn = new ActiveXObject(“ADODB.Connection”);

/* Password – Пароль
User ID – Имя входа
Initial Catalog – Имя БД, к которой подключаемся
Data Source – Имя сервера */

Conn.Provider = “SQLOLEDB.1″;
Conn.Open(“Password=Ntcnbhjdobr123;Persist Security Info=True;User ID=Test;Initial Catalog=Test_bd;Data Source=andrianov”);

val=AO.InputString(“Введите карту”,” “,20);
// Открываем транзакцию для работы с данными
Conn.BeginTrans;
//Объект Command позволяет вызывать команды БД.
var Cmd = new ActiveXObject(“ADODB.Command”);

/* Присваеваем свойствуву ActiveConnection значение объекта Connection  для того, чтобы объект Command использовал созданное ранее соединение */
Cmd.ActiveConnection = Conn;

//Строка запроса определяется свойством CommandText
Cmd.CommandText=”SELECT id FROM ccard where val=”+String(val);

// Выполняем запрос и получаем набор записей (объект типа Recordset)
var table=Cmd.Execute;

/* Так как наш запрос возвращает 1 значение 1 поля, получаем строку содержащую склеенные данные нашего набора записей методом GetString. Если полей и/или записей больше несколько удобнее использовать другие методы объекта Recordset  для перемещения поним*/

var rez=table.GetString;
Cmd.CommandText=”SELECT client.name FROM client LEFT JOIN clientcard ON client.id=clientcard.clientid where clientcard.ccardid=”+String(rez);
table=Cmd.Execute;
rez=table.GetString;
AO.ShowMessage(rez);

// Закрываем транзакцию для работы с данными
Conn.CommitTrans; }

Как уже говорилось выше компоненты ADO позволяют работать с различными СУБД. Например, рассмотрим текст сценария для получения данных из БД, работающей под управлением СУБД Firebird. В этом случаем нам предварительно необходимо установить IBProvider – драйвер, предоставляющий интерфейс для доступа к БД.

Сценарий же в этом случае будет иметь следующий вид:

function BeforeAct(AO, RO, E, O)
{
var Conn = new ActiveXObject(“ADODB.Connection”);
Conn.Provider = “LCPI.IBProvider.3″;
Conn.Open(“data source=localhost:J:\\Kafe\\main.gdb;ctype=win1251″, “sysdba”, “masterkey”);
val=AO.InputString(“Введите карту”,” “,20);
Conn.BeginTrans;
var Cmd = new ActiveXObject(“ADODB.Command”);
Cmd.ActiveConnection = Conn;
Cmd.CommandText=”SELECT id FROM ccard where val=”+String(val);
var table=Cmd.Execute;
var rez=table.GetString;
Cmd.CommandText=”SELECT client.name FROM client LEFT JOIN clientcard ON client.id=clientcard.clientid where clientcard.ccardid=”+String(rez);
table=Cmd.Execute;
rez=table.GetString;
AO.ShowMessage(rez);
Conn.CommitTrans; }

Как все отличие состоит лишь в строках подключения к базе данных, а именно в строке, определяющий используемый драйвер для доступа к БД,

Conn.Provider = “LCPI.IBProvider.3″;

и в формате строки подключения к БД

Conn.Open(“data source=localhost:J:\\Kafe\\main.gdb;ctype=win1251″, “sysdba”, “masterkey”);

Более полное описание объектов ADO можно найти на сайте http://msdn.microsoft.com , указав в поиске “ActiveX Data Objects (ADO)”.

Рубрики Мастер класс · Таги

Speak Your Mind

Tell us what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!

You must be logged in to post a comment.