602SQL-Úplná dokumentace Index  

Datové typy 602SQL x Delphi

Datové typy používané v databázových komponentách Delphi (TFieldType z unity DB) nejsou v některých případech totožné s typy 602SQL serveru. Pro případy, kdy je třeba provádět převody typů mezi oběma systémy (např. při definování vstupních a výstupních parametrů (typu TParam) SQL příkazu v TSQL602Statement nebo uložené procedury v TSQL602StoredProc) nebo vstupních parametrů SELECTu v datasetu TSQL602DataSet, je k dispozici následující tabulka. Ve sloupci Typ Delphi je ukázán typ, v němž je možné uchovávat host variables (viz příklad dole).


typ 602SQLpopis typ TFieldTypetyp Delphi
CHARZnakftFixedCharString
CHAR(n)Řetězec znakůftStringString
NCHAR(n)Řetězec znaků v UNICODEftWideStringWideString
CLOBTextftMemoString
NCLOBText v UNICODEN/AWideString
BLOBBinární řetězec proměnné délkyftBlobpole znaků
BINARYBinární řetězec pevné délkyftBytespole znaků
BOOLEANAno/NeftBooleanBoolean
TINYINTjednobajtový integerN/AShortInt
SMALLINTdvoubajtový integerftSmallintSmallInt
INTEGERčtyřbajtový integerftIntegerInteger
BIGINTosmibajtový integerftLargeintInt64
MONEYstarý typ PenízeftCurrencyCurrency
NUMERIC(x,y<=4)přesný číselný typftBCDCurrency
REALReálné čísloftFloatDouble
DATEDatumftDateTdate
TIMEČasftTimeTTime
TIMESTAMPČasová značkaftDateTimeTDateTime

Poznámka

NUMERIC(14,2) se nadále konvertuje na ftCurrency ostatní NUMERIC se konvertují na ftBCD, Delphi používají pro reprezentaci ftBCD typ Currency, který může mít maximálně 4 desetinná místa, proto i CDK podporují pouze NUMERIC s maximálně čtyřmi desetinnými místy. Pokus o přístup ke sloupci typu NUMERIC s více než čtyřmi desetinnými místy vyvolá výjimku s kódem WBE_UNSUPATTRTYPE.

Příklad:

Testovací tabulka Types obsahuje sloupce různých typů, pomocí SQL příkazu INSERT vložíme nový záznam s danými hodnotami. Pro vytvoření parametrů je použito metod SetParam.

procedure TForm1.Button1Click(Sender: TObject);
var
  bol : Boolean;
  sh : smallint;
  integ : longint;
  big : int64;
  realne : double;
  datum : TDate;
  cas : TTime;
  stamp : TDateTime;
  text : String;
  str : String;
  wstr : WideString;

  sqlstat : String;
begin
  bol := true;   // hodnoty vstupních parametrů
  sh := -150;
  integ := 202;
  big := 1234567890123;
  realne := 3.14e-1;
  datum := StrToDate('31.12.2002');
  cas := StrToTime('12:59:01');
  stamp := StrToDateTime('31.12.2003 12:59:01');
  str := 'řetězec';
  wstr := 'unicodový řetězec';
  text := 'první řádek'#13#10'druhý řádek';

  sqlstat := 'INSERT INTO Types (bol,sh,integ,big,realne,datum,cas,stamp,str,wstr,text) '
                    + 'VALUES(:bol,:sh,:integ,:big,:realne,:datum,:cas,:stamp,:str,:wstr,:text)';

  with SQL602Statement1 do begin
    Statement := sqlstat; // text SQL příkazu

    SetParam('bol',ftBoolean,bol,0,ptInput);   // vytvoření parametrů
    SetParam('sh',ftSmallint,sh,0,ptInput);
    SetParam('integ',integ);                   // overloadovaná metoda pro Integer
    SetParam('big',ftLargeInt,big,0,ptInput);
    SetParam('realne',ftFloat,realne,0,ptInput);
    SetParam('datum',ftDate,datum,0,ptInput);
    SetParam('cas',ftTime,cas,0,ptInput);
    SetParam('stamp',ftDateTime,stamp,0,ptInput);
    SetParam('str',str);                      // overloadovaná metoda pro String
    SetParam('wstr',ftWideString,wstr,0,ptInput); // unicodový řetězec
    SetParam('text',ftMemo,PChar(text)^,Length(text),ptInput); // způsob předání hodnoty!!

    Execute;
  end;
end;