Генератор
Проектов

Проект utldbstab

Проект демонстрирует использование коротких запросов в SQL-базе данных.

В качестве основы этого проекта взят проект utldbs. Отличие данного проекта в том, что вместо полноценных sql-запросов, заданных в пакете описания бызы, используется специальный механизм так называемых коротких запросов, привязанных к отдельной таблице.

Файл utldbstab.gen:

project utldbstab
  /version="01.001"
  /firm="УСТ"
  /http="http://www.ustech.ru"
  /email="managers@ustech.ru"

database orgdbs

utility utlfill

utility utlview

dbsutility orgdbs_utl

Файл orgdbs.database:

database orgdbs;
  /driver=(dbd_sqlite)

type t_orgname : char8[100];
type t_addr : char8[100];
type t_phone : char8[30];
type t_empname : char8[100];
type t_org : struct
( t_orgname orgname,
  t_addr addr,
  t_phone phone
);
type t_emp : struct
( t_orgname orgname,
  t_empname empname1,
  t_empname empname2,
  t_empname empname3,
  t_addr addr,
  t_phone phone
);

table org : t_org;
  insert input yorg org_cre(*);
  cursor output yorg org_cur():(*);
table emp : t_emp;
  insert input yemp emp_cre(*);
  cursor output yemp emp_cur(orgname):(*);
index i_org on org(orgname);
index i_emp on emp(orgname,empname1,empname2,empname3);

Файл utlfill.utility:

utility utlfill:"UTLFILL"

proc fill(orgdbs.orgdbs porgs)
{ var
    int iorg;

  rand.init();

  for ( iorg := 0; iorg < 6; iorg += 1 )
  { var
      orgdbs.org_cre sql_org,
      int iemp;

    rand_test.firm8(sql_org.yorg.orgname);
    rand_test.addr8(false,sql_org.yorg.addr);
    rand_test.phone(sql_org.yorg.phone);
    orgdbs.org_cre_insert_err(porgs,sql_org);

    for ( iemp := 0; iemp < 8; iemp += 1 )
    { var
        orgdbs.emp_cre sql_emp;

      sql_emp.yemp.orgname := sql_org.yorg.orgname;
      rand_test.name8(sql_emp.yemp.empname1,sql_emp.yemp.empname2,sql_emp.yemp.empname3);
      rand_test.addr8(true,sql_emp.yemp.addr);
      rand_test.phone(sql_emp.yemp.phone);
      orgdbs.emp_cre_insert_err(porgs,sql_emp);
    }
  }

  orgdbs.commit(porgs);
}

main
{ varobj
    orgdbs.orgdbs porgs;

  porgs.d_exe8 := xutl.d_exe8;
  porgs.drvname := "dbd_sqlite";
  porgs.srvname := "";
  porgs.dbsname += "orgdbs_bas";
  porgs.usrname := "orgdbs_log";
  porgs.passwrd := "orgdbs_pas";
  porgs.datname := "orgdbs_bas";
  porgs.logname := "orgdbs_log";
  orgdbs.init(porgs);
  orgdbs.open(porgs);
  call fill(porgs);
  orgdbs.close(porgs);
  orgdbs.finish(porgs);
}

Файл utlview.utility:

utility utlview:"UTLVIEW"

proc view(orgdbs.orgdbs porgs)
{ var
    orgdbs.org_cur sql_org;

  orgdbs.org_cur_open_err(porgs,sql_org);

  for ( ; ; )
  { orgdbs.org_cur_fetch_err(porgs,sql_org);
    if ( porgs.sqlcode <> 0 )
      break;

    dprint(U"Наименование: ",sql_org.yorg.orgname,"\n");
    dprint(U"Адрес: ",sql_org.yorg.addr,"\n");
    dprint(U"Телефон: ",sql_org.yorg.phone,"\n");

    { var
        orgdbs.emp_cur sql_emp;

      sql_emp.orgname := sql_org.yorg.orgname;
      orgdbs.emp_cur_open_err(porgs,sql_emp);

      for ( ; ; )
      { orgdbs.emp_cur_fetch_err(porgs,sql_emp);
        if ( porgs.sqlcode <> 0 )
          break;

        dprint(U"  Наименование: ",sql_emp.orgname,"\n");
        dprint(U"  Фамилия: ",sql_emp.yemp.empname1,"\n");
        dprint(U"  Имя: ",sql_emp.yemp.empname2,"\n");
        dprint(U"  Отчество: ",sql_emp.yemp.empname3,"\n");
        dprint(U"  Адрес: ",sql_emp.yemp.addr,"\n");
        dprint(U"  Телефон: ",sql_emp.yemp.phone,"\n");
      }

      orgdbs.emp_cur_close_err(porgs,sql_emp);
    }
  }

  orgdbs.org_cur_close_err(porgs,sql_org);
  orgdbs.commit(porgs);
}

main
{ varobj
    orgdbs.orgdbs porgs;

  porgs.d_exe8 := xutl.d_exe8;
  porgs.drvname := "dbd_sqlite";
  porgs.srvname := "";
  porgs.dbsname += "orgdbs_bas";
  porgs.usrname := "orgdbs_log";
  porgs.passwrd := "orgdbs_pas";
  porgs.datname := "orgdbs_bas";
  porgs.logname := "orgdbs_log";
  orgdbs.init(porgs);
  orgdbs.open(porgs);
  call view(porgs);
  orgdbs.close(porgs);
  orgdbs.finish(porgs);
}
Скачать проект utldbstab