Napojení na SQL databáze

Z enTeam
Verze z 14. 7. 2015, 10:59, kterou vytvořil en>Kadel
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Skriptovací jazyk podporuje napojení na databáze typu

  • Microsoft SQL (MS SQL) - pomocí knihoven "dynOLEEng" a "actdocentr"
  • Oracle - pomocí knihoven "dynOLEEng" a "actdocentr"
  • Firebird - pomocí knihoven "dynOLEEng" a "actdocentr"
  • Microsoft Access (MS Access) - pomocí knihovny "AccessMTB"

Dále je uveden příklad nevizuální práce s databází pomocí knihovny "dynOLEEng" a vizuální výběr z databáze pomocí knihovny "actdocentr". Knihovna "AccessMTB" určená pro komunikaci s MS Access podporuje pouze nevizuální práci.


Nevizuální čtení z SQL databáze

Skript demonstruje možnosti napojení skriptovacího jazyka M/TeamBridge na SQL databáze. V příkladu je uvedeno napojení na databázi TeamBridge, kde její umístění je načteno z INI souboru. Proměnná DBtype může obsahovat hodnoty INTERBASE, ORACLE a nebo MSSQL. Po napojení jsou načtena loginID všech uživatelů z tabulky z tabulky MUUSER.

declare function TB_ParamsAddStr dll "dynOLEEng" (integer,string): integer
declare function TB_CreateParams dll "dynOLEEng" ():integer
declare function DB_ConnectWithParams dll "dynOLEEng" (integer,string,string):integer
declare function DB_CreateSQLQuery dll "dynOLEEng" (string):integer
declare Procedure DB_SQLQueryNext dll "dynOLEEng" (Integer)
declare procedure DB_OpenSQLQuery dll "dynOLEEng" (integer,integer,var Boolean)
declare Procedure DB_SQLQueryEof dll "dynOLEEng" (Integer,var boolean,var boolean)
declare Function DB_QueryFieldByName dll "dynOLEEng" (Integer,string,var Boolean):integer
declare Function TB_GetResultStr dll "dynOLEEng" (Integer): string
Declare procedure DB_ExecuteSQLQuery dll "dynOLEEng"(Integer,Integer,var Boolean)
Declare procedure DB_FreeSQLQuery dll "dynOLEEng"(Integer)
Declare procedure DB_Disconnect dll "dynOLEEng"(integer)
declare procedure GetItemFromMTBini dll "actualDocument" (string,string,string)

Script UkazkaKomunikaciSdatabazi (): Boolean 
var DBname, DBtype : String DBlogin, DBpass : String SQLCOL, s : String
    conn, sqlID, columnID, iParamsId : Integer
    eof, success : Boolean
Begin 
  DBlogin := "sysdba"  //výchozí uživatel v databázovém serveru Firebird
  DBpass := "masterkey"
  GetItemFromMTBini("M/TEAMBRIDGE","server",DBname) // označení databáze. Procedura GetItemFromMTBini načte hodnotu klíče ze souboru parent.ini ze sekce M/TeamBridge 
  GetItemFromMTBini("M/TEAMBRIDGE","Database",DBtype) // pro Firebird zde bude načten typ INTERBASE
  iParamsId:=TB_CreateParams()  //vytvoření objektu parametrů
  TB_ParamsAddStr(iParamsId,DBtype)  //naplnění parametrů
  TB_ParamsAddStr(iParamsId,DBname)
  TB_ParamsAddStr(iParamsId,"ANCZECH")
  TB_ParamsAddStr(iParamsId,"")
  TB_ParamsAddStr(iParamsId,"3")
  conn:=DB_ConnectWithParams(iParamsId,DBlogin,DBpass) //volání metody Connect s parametry, které jsou uloženy v objektu parametrů
  SQLCOL := "select * from muuser" // SQL dotaz nebo příkaz 
  sqlID:=DB_CreateSQLQuery(SQLCOL) //z textové SQL příkazu vytvoří objekt příkazu
  DB_OpenSQLQuery(sqlID, conn,success) // provede SQL dotaz
  //Pokud se má provádět SQL příkaz (UPDATE,INSERT), tak se místo OpenSQLQuery
  //použije příkaz DB_ExecuteSQLQuery 
  DB_SQLQueryEof(sqlID,eof,success)
  while not eof do //prochází jednotlivé řádky výsledku 
    columnID:=DB_QueryFieldByName(sqlID,"loginID",success) ¨
    s := TB_GetResultStr(columnID) //....................... zde může následovat dotaz na další sloupce z řádku výsledku.
                                   //Pro každý sloupec to budou dva příkazy, tak jako u loginID.
    DB_SQLQueryNext(sqlID)
    write(s)  //testovací zobrazení výsledku
    DB_SQLQueryEof(sqlID,eof,success) //testuje, zda ještě není konec seznamu výsledků 
  End
  DB_FreeSQLQuery(sqlID)
  DB_Disconnect(conn)
End

Vizuální čtení z SQL databáze

Příkaz provede SQL dotaz do databáze a odpovídají záznamy zobrazí v dialogovém okně s možností výběru. Je možné specifikovat, které sloupce záznamu budou zobrazeny a které bude systém vracet jako výsledek.

Declare Function SQLselectDialogSQL dll "actdocentr" (string,string,string,string,string,string,string,string,string,string,string,string,var integer): Boolean
Script ZobrazStrediska (): Boolean
Begin 
  SQLselectDialogSQL("Select Code,DescriptionCZ from CR_CodeBook","Receptury",login,password,"Výběr","Code,DescriptionCZ","Kód,Název střediska","80,200","Code,DescriptionCZ","","",s,i)
  GetFromStringListExt (1,"#$#",s,wkf.stredisko_code)
  GetFromStringListExt (2,"#$#",s,wkf.stredisko_nazev)
End

V proměnných wkf.stredisko_code a wkf.stredisko_nazev bude vrácen "kód" a "název" střediska. Detailní popis funkce SQLselectDialogSQL naleznete v popisu "ActDocEntr.txt", který je uložen v adresáři M/TeamBridge/Manuals

Zpět na stránku Prováděcí skripty