Пример доступа к базам RS-Bank из C++Builder через RslSrv Кубрина

Автор:Александр
Дата:26.12.2002
Просмотров:2399
Скачиваний:1719
Оценка: - , Оценок - 0
Сохранить в файле

Обсудить в форуме

Описание

Просто недавно попробовал эту технологию, может кому пригодится.
Практической пользы кроме иллюстрации нет.
На форме 3 поля редактирования, 6 кнопок и статус панель.

Текст примера

 //---------------------------------------------------------------------------
#include <vcl.h>
#include <comobj.hpp>

#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"

Variant ob1,ob2,fl;
AnsiString datadir  = "\\\\bank2\\vol2\\rsbank\\dbfile\\"; //Директория баз данных
AnsiString dataname = "document.dbt";                //Используемая база данных
AnsiString dicname  = "\\\\bank2\\vol2\\rsbank\\dbfile\\bank.def"; //Путь к словарю
int keynum          = 3;                             //Номер используемого ключа
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
    Caption = datadir + dataname;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BOpenClick(TObject *Sender)
{
  try {
     ob1 = CreateOleObject("RSLSrv.RslEngine");
     ob2 = ob1.Exec(Function("LoadModule") << "system");
  }
  catch(Exception &e) {
     ShowMessage(e.Message);
  }
  fl = ob2.Exec(Function("TBfile") << dataname << "r" << keynum << datadir+dataname << dicname);
  int n = fl.Exec(Function("nrecords"));
  Status->SimpleText = IntToStr(n);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BClick(TObject *Sender)
{
  char str1[100];
  try {
     if (Sender == BNext) {
        fl.Exec(Function("next"));
     }
     else if (Sender == BPrev) {
        fl.Exec(Function("prev"));
     }
     else if (Sender == BFirst) {
        fl.Exec(Function("rewind"));
        fl.Exec(Function("next"));
     }
     else if (Sender == BLast) {
        fl.Exec(Function("rewind"));
        fl.Exec(Function("prev"));
     }
     else if (Sender == BFind) {
        AnsiString acc_P = fl.Exec(PropertyGet("item") << "real_payer");
        if( InputQuery("Поиск по счету плательщика", "Счет", acc_P) ) {
           fl.Exec(PropertySet("item") << "sum" << 0);
           fl.Exec(PropertySet("item") << "real_payer" << acc_P);
           fl.Exec(Function("getGE"));
        }
     }
  }
  catch(...) {
    ShowMessage("Файл базы данных не открыт !!!");
    return;
  }
  AnsiString str   = fl.Exec(PropertyGet("item") << "ground");
  OemToChar(str.c_str(),str1);
  Ground->Text     = str1;
  Sum->Text        = fl.Exec(PropertyGet("item") << "sum");
  Real_Payer->Text = fl.Exec(PropertyGet("item") << "real_payer");
}
//---------------------------------------------------------------------------