FireDAC - z praxe 1

vložil Radek Červinka 16. března 2013 02:01

Jsem v procesu konverze větší DB aplikace z ADO -> FireDAC. Takže pár drobností.

Wait Cursor a spol

Nejdříve něco ohledně komponenty pro WaitCursor, která tak rozčiluje Bullheada a díky které Pawel v Brně nebyl schopen přeložit FireMonkey aplikaci s FireDAC. Vše je vysvětleno v dokumentaci, ale ve zkratce:

Jelikož je FireDAC (budu to používat místo AnyDAC) multiplatformní, bylo nutné navrhnout něco co by pokrývalo rozdíly v GUI frameworku, případně dokonce pokud není GUI dostupné (služba, konzole). Proto bylo zavedeno platformové GUI rozhraní a mezi nimi i IADGUIxWaitCursor. Takže když FireDAC potřebuje šachovat s kurzorem, volá metody rozhraní.

Standardně jsou dodávány 3 provideři - VCL (LCL), FMX a console. Stačí někam do projektu přidat do uses patřičný unit, nebo někam na formulář šoupnout patřičnou komponentu. Pawel v Brně šoupl IMHO VCL komponentu na FMX formulář a problém byl na světě.

Takže ideálně i programátor by měl používat:

  oWait: IADGUIxWaitCursor;
  ……
  ADCreateInterface(IADGUIxWaitCursor, oWait);
  oWait.StartWait;
  try
    ……
  finally
    oWait.StopWait;
  end;

ale to už je třešinka na dortu a podle mne nutná jen v případě x platform vývoje.

Řazení

U ADO jsem používal pro lokální řazení např.

Sort := 'ddValid DESC,dcName'

nově se to musí přepsat na

  IndexFieldNames := 'ddValid:D;dcName';

tedy nahradit čárky za středníky a místo DESC psát :D.

Všechny volby jsou:

  • 'D' - DESC
  • 'A' - ASC
  • 'N' - case-insensitive sort

DateTime Field x DateStamp

Tak tohle byl zákys na dvě hodiny. Jak jsem později zjistil, tak se problém netýká jen FireDAC, ale i jiných DB komponent. V podstatě jde o to, že ADO mapuje snad všechny DB pole typu čas a spol. na MS SQL na Field typu TDateTime. Novější komponenty jsou přesnější a některé druhy polí mapují i na Field typu TDateStamp. Jenže s tím některé vizuální komponenty moc nepočítají a Delphi RTL asi taky moc ne, čímž může vzniknout problém (a nebyl jsem s ním sám).

Řešením je nastavit u TADConnection mapování jednoho typu na druhý. To je celkem příjemná záležitost, kdy můžete specifikovat jak se který typ bude přemapovávat. Lze to specifikovat i jen u Query, ale já jsem chtěl obecnou platnost, takže jsem skončil u ADConnection.

Ještě poznámka: osvědčilo se mi vždy používat vlastní následníky DB komponent. V mém případě pak stačilo změnit předchůdce z ADO na FireDAC a měl jsem většinu práce hotovu. Takže jsem v mém následníku Connection nastavil:

  with FormatOptions do
  begin
    OwnMapRules := True;
    with MapRules.Add do
    begin
      SourceDataType := dtDateTimeStamp;
      TargetDataType := dtDateTime;
    end;
  end;

Tagy: ,

Praxe

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců