[ brenas @ 08.01.2011. 14:35 ] @
primer sam iskopirao bukvalno iz help-a

TTransactionDesc TD;
TD.IsolationLevel=xilReadCommitted //ovde kompajler prijavljuje gresku.
TD.TransactionID=1;

Aplikacija rađena u Turbo C++, firebird baza i DBMS.

ne znam šta dalje, pročitao sam 10 puta help, čačkao po net-u, ali nisam našao neko objašnjenje?
[ mmix @ 08.01.2011. 15:04 ] @
TD.IsolationLevel = TTransIsolationLevel.xilReadCommitted;

?
[ brenas @ 08.01.2011. 15:24 ] @
neće: "inproper use of typedef TTransIsolationLevel"
[ brenas @ 08.01.2011. 15:26 ] @
Ranije sam radio nešto u Turbo Delphiju i koliko se sećam nisam imao problema sa tim.
Sada sam nabavio Turbo C++ builder, pa reko ajde da probam - kad ono...
[ X Files @ 08.01.2011. 15:37 ] @
Na osnovu fragmenta iz Help-a:
Citat:

Code:

// ...
typedef enum { xilDIRTYREAD, xilREADCOMMITTED, xilREPEATABLEREAD, xilCUSTOM } eXILType;
typedef struct
{
  UNINT32  TransactionID;
  UNINT32  GlobalID;
  eXILType IsolationLevel;
  UNINT32  CustomIsolation;
} TTransactionDesc;
// ...


...i tvog koda:
Citat:

Code:

// ...
TD.IsolationLevel=xilReadCommitted;
// ...


... zakljucuje se da je C++ za razliku od Delphi-ja "osetljiv na slucajeve".

Dakle, umesto xilReadCommitted pokusaj da stavis xilREADCOMMITTED.

Ako nece ni to, pokusacemo sa operatorom :: da dohvatimo enum identifikator preko tipa. Sada se sve nesto menja u headerima, nisam u toku, pa se umesto klasicnog "enum" sve cesce koristi "enum class", ali da ne duzim.


EDIT: I naravno, ne zaboravi "tacku zarez" pre komentara...
[ brenas @ 08.01.2011. 16:03 ] @
Probao sam i kao xilREADCOMMITTED ali neće ni tako. ista poruka kompajlera.
[ brenas @ 08.01.2011. 16:08 ] @
sada sam probao da kreiram pokazivac tipa TTransadesc

TTransactionDesc *TD=new TTransactionDesc();

SQLConnection1->StartTransaction(*TD);
// zatim tu SQLQuery upisuje u bazu
SQLConnection1->Commit(*TD);



sada kompajler ćuti dok se ne dođe do stvarnog upisa u bazu a onda kompajler prijavljuje nešto u vezi sa alokacijom memorije!

nemam ideju dalje...
[ X Files @ 08.01.2011. 16:31 ] @
Ovako, ovaj kod:
Code:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TTransactionDesc TD;
    TD.IsolationLevel=xilREADCOMMITTED; //ovde kompajler VISE NE prijavljuje gresku.
    TD.TransactionID=1;
}

... kod mene NE prijavljuje gresku ni na BCB6 ni na najnovijoj XE verziji. Da bi svi HEADERI bili ukljuceni, prethodno sam na formu stavio TSQLConnection iz dbExpress sekcije.

Ako se ne varam, headeri koji su ukljuceni su kod XE verzije:
Code:

#include <DB.hpp>
#include <SqlExpr.hpp>

... a kod BCB6:
Code:

#include <DB.hpp>
#include <DBXpress.hpp>
#include <SqlExpr.hpp>


Proveri da li Turbo C++ ukljucuje ovo. Secam se da pojedine komponente (headeri) kod besplatnih verzija nisu bile po defaultu ukljucivane, pa ih je trebalo rucno ukljuciti.
[ brenas @ 08.01.2011. 16:57 ] @
uključeni su mi ti header-i
DB.hpp
DBXpress.hpp
SqlExpr.hpp

greska koju mi javlja doslovce je "ambiquity between xilREADCOMMITTED and Bde::xilREADCOMMITTED"
[ X Files @ 08.01.2011. 17:07 ] @
Google: "ambiguity between xilREADCOMMITTED and Bde::xilREADCOMMITTED"

Ako se ne varam, onda pokusaj ovo:
TD.IsolationLevel= Dbxpress::xilREADCOMMITTED;
[ brenas @ 08.01.2011. 17:21 ] @
Bravo X-e. Već su živci počeli da mi igraju.
Sada radi kako treba.
Hvala!
[ X Files @ 08.01.2011. 17:34 ] @
Ma da, jos u prvom odgovoru sam posumnjao da ce mozda zatrebati i :: ;)