Autor Téma: Jakym zpusobem mapuje FireDAC pro ODBC datove typy pri volani CreateTable?  (Přečteno 161 krát)

Online Delfin

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 0
Jedna se o obecny ODBC driver, ne z podporovanych.

Jakym zpusobem mapuje FireDAC pro ODBC drivery datove typy pri volani TFDTable.CreateTable? Cekal bych implementaci TFDPhysCommandGenerator neco ve smyslu GenerateCreateTable metody, ale bohuzel k novejsim verzim nemam zdrojak (mam verzi se zdrojakem ktera tuto metodu nezna) :'(

Pta se FireDAC vne metody TFDTable.CreateTable na datove typy pomoci SQLGetTypeInfo ODBC funkce (prip. jinych na zjisteni realnych DBMS datovych typu) nebo je vse hardcodovane (implementace by mohla byt v tride TFDPhysCommandGenerator pro dany driver, v tomto pripade obecny ODBC driver, mozna se ale pletu)?

Jinak receno, jak dokaze FireDAC z TBooleanField vyrobit napr. BOOLEAN pri volani TFDTable.CreateTable? Deje se nasledujici, pro TBooleanField pro prehistoricky dBASE FireDAC generuje nasledujici CREATE prikaz:

Kód: MySQL [Vybrat]
  1. CREATE TABLE MyTable (
  2.   MyLogicalField BOOLEAN
  3. )

namisto korektniho datoveho typu LOGICAL; kde FireDAC prisel na BOOLEAN? LOGICAL je datovy typ ktery by mel pouzit (takze tohle mel byt vysledek pro TBooleanField, SQL_BIT pro dBASE):

Kód: MySQL [Vybrat]
  1. CREATE TABLE MyTable (
  2.   MyLogicalField LOGICAL
  3. )

P.S. sorry za trolling! A dekuju za pripadnou odpoved!
« Poslední změna: 22-07-2017, 06:44:27 od Delfin »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1760
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Excellent
Rated 1 time
Jakym zpusobem mapuje FireDAC pro ODBC drivery datove typy pri volani TFDTable.CreateTable? Cekal bych implementaci TFDPhysCommandGenerator neco ve smyslu GenerateCreateTable metody, ale bohuzel k novejsim verzim nemam zdrojak (mam verzi se zdrojakem ktera tuto metodu nezna) :'(
Ano, existuje interface IFDPhysCommandGenerator, ktery ma metodu GenerateCreateTable(), jehoz basalni implementaci obsahuje trida TFDPhysCommandGenerator a konkretni fyzicke generatory jsou jejimi potomky. Ta basalni trida ma virtualni metodu GetColumnType(), ktera mapuje datovy typ TFDDataType na konkretni nazev typu RDBMS, az na jednu vyjimku vzdy TFDDataType.dtBoolean na BOOLEAN, vsechny typy hard coded.

LOGICAL je pouzito ve FireDac jedine u ADS (Advanced Database Server), coz mam dojem je nejaky pohrobek Sybase. U Nexus a SQLite ho bere na milost pri inverznim prevodu tj. kdyz ziska meta data tabulky a prevadi je na TFDDataType, ale vlastni CreateTable dela s BOOLEAN.
« Poslední změna: 22-07-2017, 15:05:15 od pf1957 »

Online Delfin

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 0
Dekuji moc! Tohle by mohli dodelat. Tusim ze ODBC funkce SQLGetTypeInfo by mohla rict nazev datoveho typu.
« Poslední změna: 22-07-2017, 17:40:51 od Delfin »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 1760
  • Karma: 77
    • Verze Delphi: D2007, XE3, DX10
Excellent
Rated 1 time
Dekuji moc! Tohle by mohli dodelat. Tusim ze ODBC funkce SQLGetTypeInfo by mohla rict nazev datoveho typu.
Ja uz nemam ntb se zdrojovkama po ruce, ale zkus, co se stane, kdyz pouzijes extended data (IMHO pro ODBC nejspis nic) http://docwiki.embarcadero.com/RADStudio/Seattle/en/Extended_Metadata_(FireDAC). Tam se na nektera meta data dotazuji, treba u FB na BOOL, ktery ta DB normalne nema a mapuje se na tinyint...

Ale kdyz jsem se predtim dival do zdrojovek, tak si nepamatuju, ze by se mi to nejak pripletlo do cesty.

Jinak ty moje zdrojovky jsou nekdy z doby, kdy Dprof. verze nemely FireDac a musely se dokoupit jako extra addition, coz bude asi tak XE3? Nic novejsiho jsem nevidel, protoze s Delphi uz radu let nedelam a doufam, ze mi to vydrzi do duchodu ;-)


Online Delfin

  • Plnoletý
  • ***
  • Příspěvků: 103
  • Karma: 0
Jeste jednou diky! Radeji se smirim s tim, ze to "nejde" (nechce se mi ted kuchtit specificka implementace toho intf) ;D

Dmitry k tomu napsal:
Citace
FireDAC uses hard coded data type names according to SQL 2003 standard. This is done inside of TFDPhysCommandGenerator.GetColumnType.

https://forums.embarcadero.com/thread.jspa?threadID=253177&tstart=0

Po pravde se mi tohle moc nelibi. Kdyz uz ODBC driver dokaze popsat datovy typ, proc to nevyuzit. Si pak jeden nemuze ani vytvorit ODBC driver pro svuj vlasni DBMS pouzivajici "KyblSracek" jako nazev datoveho typu pro BLOB. Chjo :)
« Poslední změna: 25-07-2017, 00:29:25 od Delfin »

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: