Příklady: SQL



dim DB : Word;
dim Set : Word;
dim SErr : String;

SQLDBOpen(DB, "Test", "flux", "flux", DBTYPE_ORACLE8_NATIVE);
if _SQLResult(SErr) <> 0 then
  _MsgBox(0, SErr, 0)
  Exit
endif
SQLOpen(DB, Set);
SQLSelect(Set, "TestTab", "IDENT>=100 AND IDENT<=200", "IDENT");
. . .
SQLRequery(Set);
. . .
SQLClose(Set);
SQLDBClose (DB);

dim DB : Word;
dim Set : Word;
dim LI : LongInt;
dim S : String;

{ Průchod tabulkou }

SQLDBOpen(DB, "Test", "flux", "flux");
SQLOpen(DB, Set, SQL_READONLY);
SQLBind(Set, "COL1", SQL_INTEGER, LI,"COL2", SQL_CHAR, S);
SQLSelect(Set, "TestTab", "IDENT>0", "IDENT");
if _SQLFirst(Set) then
  repeat
    Trace("LI: ",LI, " S:",S);
  until _SQLNext(Set) = False;
endif
SQLClose(Set);
SQLDBClose(DB);

dim DB : Word;
dim Set : Word;
dim LI : LongInt;
dim S : String;

{ Update jedné řádky }

SQLDBOpen(DB, "Test", "", "");
SQLOpen(DB, Set);
SQLBind(Set, "COL1", SQL_INTEGER, LI,"COL2", SQL_CHAR, S);
SQLSelect(Set, "TestTab", "IDENT=10", "IDENT");
if _SQLFirst(Set) then
  if _SQLEdit(Set) then
    LI := 99;
    S := "Testovací hodnota";
    if _SQLUpdate(Set)=false then
      Trace("Chyba při _SQLUpdate")
    endif
  endif
endif
SQLClose(Set);
SQLDBClose(DB);

dim DB : Word;
dim Set : Word;
dim Ident : LongInt;
dim LI : LongInt;
dim S : String;

{ Přidání řádky }

SQLDBOpen(DB, "Test", "", "");
SQLOpen(DB, Set);
SQLBindPK(Set, "IDENT, Ident);
SQLBind(Set, "COL1", SQL_INTEGER, LI);
SQLBind(Set, "COL2", SQL_CHAR, S);
{ Zvolí se podmínka, která nevybere žádnou větu }
SQLSelect(Set, "TestTab", "IDENT=-1", "IDENT");
if _SQLAddNew(Set) then
  { Nyní již je proměnná Ident naplněná novou hodnotou }
  LI := 99;
  S := "Testovací hodnota";
  if _SQLUpdate(Set)=false then
    Trace("Chyba při _SQLUpdate")
  endif
endif
SQLClose(Set);
SQLDBClose(DB);

{ Založení tabulky }

dim NumDB : Word;
SQLDBOpen(NumDB, "Test", "flux", "flux", DBTYPE_MSSQL);
SQLExecute(NumDB, "CREATE TABLE TMP_TEST " +
                  "(IDENT " + _SQLGetColTypeName(NumDB, SQL_INTEGER) + " NOT NULL," +
                  " POPIS " + _SQLGetColTypeName(NumDB, SQL_VARCHAR) + "(20),"      +
                  " SUMA "  + _SQLGetColTypeName(NumDB, SQL_DOUBLE)  + ")");

SQLExecute(NumDB, "CREATE INDEX TMP_TEST_IDENT ON TMP_TEST (IDENT)")

Transakce

...
SQLBeginTrans(NumDB);
{ Transakce je platná }
...

  SQLBeginTrans(NumDB);
  { Transakce je platná }
  ...
  SQLCommitTrans(NumDB);
  { Transakce je stále platná, ale data zatím v DB viditelně nejsou }
  ...

SQLCommitTrans(NumDB);
{ Transakce již není a data jsou v DB }
...

Předčasné ukončení transakce

...
SQLBeginTrans(NumDB);
{ Transakce je platná }
...

  SQLCommitTrans(NumDB);
  { Transakce již není a data jsou v DB }
  ...

SQLCommitTrans(NumDB);
{ Lze to takto použít, ale transakce v tuto dobu již neexistuje !!! }
...

Odvolání transakce

...
SQLBeginTrans(NumDB);
{ Transakce je platná }
...

  SQLBeginTrans(NumDB);
  { Transakce je platná }
  ...

    SQLRollbackTrans(NumDB);
    { Změněná data v db byla vrácena a transakce již neexistuje }

  ...
  SQLCommitTrans(NumDB);
  { Lze to takto použít, ale transakce v tuto dobu již neexistuje !!! }
  ...

SQLCommitTrans(NumDB);
{ Lze to takto použít, ale transakce v tuto dobu již neexistuje !!! }
...

Existence

procedure SQLExist
    dim db   : Longint;
    dim set  : Longint;
    dim st   : Longint;
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "status", SQL_INTEGER, st);
    SQLSelect(Set, "PVS_SUB_STATUS", "exists(select * from PVS_SUB_STATUS where status=0)", "status");
    if _SQLFirst(Set) then
        printup("OK");
    else
        printup("None");
    endif
    SQLClose(set);
    SQLDBClose(db);	
endproc

Počet

procedure SQLCount
    dim db  : Longint;
    dim set : Longint;
    dim st  : Longint;
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "count(*)", SQL_INTEGER, st);
    SQLSelect(Set, "PVS_SUB_STATUS", "status=0", "");
    if _SQLFirst(Set) then
        printup(st);
    else
        printup("None");
    endif
    SQLClose(set);
    SQLDBClose(db);	
endproc

Datum a čas serveru (MSSQL)

procedure SQLCasServeru
    dim db  : Longint;
    dim set : Longint;
    dim st  : DateTime;
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "GETDATE()", SQL_DateTime, st);
    SQLSelect(Set, "PER", "", "");
    if _SQLFirst(Set) then
        printup(st);
    else
        printup("None");
    endif
    SQLClose(set);
    SQLDBClose(db);	
endproc

Volání uložené procedury (MSSQL)

{
CREATE PROCEDURE [xxx].[Test]
AS
...
return 77
}

procedure SQLUlozenaProc_1
    { Funkce vracející integer hodnotu }
    dim db  : Longint;
    dim set : Longint;
    dim st  : Longint;
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "RETURN_VALUE", SQL_INTEGER, st);
    SQLSelect(Set, "{? = call Test}", "", "");
    printup(st);
    SQLClose(set);
    SQLDBClose(db);	
endproc

{
CREATE PROCEDURE [xxx].[Test]
@Data varchar(25)
AS
...
return 88
}

procedure SQLUlozenaProc_2
    { Funkce vracející integer hodnotu a posílající jeden in parametr }
    dim db  : Longint;
    dim set : Longint;
    dim st  : Longint;
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "RETURN_VALUE", SQL_INTEGER, st);
    SQLSelect(Set, "{? = call Test('Nějaká data')}", "", "");
    printup(st);
    SQLClose(set);
    SQLDBClose(db);	
endproc

{
CREATE PROCEDURE [xxx].[Test]
@TableName varchar(25),  
@sData varchar(100) output
AS
set @sData = 'SEQ_' + @TableName 
return 99
}

procedure SQLUlozenaProc_3
    { Funkce vracející integer hodnotu a posílající jeden in parametr a vracející jeden out parametr }
    dim db  : Longint;
    dim set : Longint;
    dim st  : Longint;
    dim NoveJmeno : StringZ;  { Používejte StringZ! }
    SQLDBOpen(db, ...); 
    SQLOpen(db, set);
    SQLBind(set, "RETURN_VALUE", SQL_INTEGER, st);
    SQLBind(set, "sData", SQL_VARCHAR, NoveJmeno);
    SQLSelect(Set, "{? = call Test('CEN',?)}", "", "");
    printup(st,"  ",NoveJmeno);
    SQLClose(set);
    SQLDBClose(db);	
endproc
Podívejte se na: SQL makrofunkce