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