čtvrtek 25. března 2021

RAD Studio 10.4.2 - Novinky

Připravili jsme pro Vás stručný přehled novinek, které Embarcadero připravilo pro druhé vydání RAD Studia 10.4. Sydney.

Jedná se o záznam webináře, který proběhl 24. 03. 2021.


Zde jsou odkazy týkající se témat, která byla v rámci webináře zmiňována:


View Petr Houf's LinkedIn profilePetr Houf na LinkedIn


čtvrtek 25. června 2020

RAD Studio 10.4. Sydney


Záznam webináře k uvedení nové verze rodiny vývojových nástrojů Embarcadero RAD Studio 10.4. Sydney.



Odkazy k videu:
https://my.embarcadero.com/ (nový EDN portál)
https://community.idera.com/developer-tools/ (komunitní stránky společnosti Idera a Embarcadero)
http://reg.codegear.com/ (stránky pro "offline" registraci produktů)
https://www.embt.cz/aktualni-nabidka-bonusu/ (aktuální cenové nabídky)
https://www.embt.cz/embt-instalace/ (instalační média od Delphi7/C++Builder6 po aktuální verze)
https://reg.codegear.com/srs6/promotion.jsp?promoId=544 (nárokování starších verzí Pro a Ent)
https://reg.codegear.com/srs6/promotion.jsp?promoId=546 (nárokování starších verzí Architect)
https://supportforms.embarcadero.com/ (technická pomoc - instalace  a registrace)
https://www.embarcadero.com/support (technická podpora - v rámci předplatného)
https://quality.embarcadero.com/ (bezplatné hlášení problémů)
https://delphi.cz/ (komunitní portál Radka Červinky pro ČR a SR)
https://torry.net/ (tržiště komponent, technické články a další informace pro vývojáře)

sobota 19. ledna 2019

Přenesení stávajících nastavení



Ruku v ruce s rostoucí komplexností programovacích nástrojů se bohužel prodlužuje i čas, který je třeba věnovat jejich nastavení a přizpůsobení konkrétním potřebám či zvyklostem. Reinstalace nebo aktualizace tak je pro mnohé vývojáře noční můrou.

Prostředí RAD Studia, Delphi i C++Builder byla proto rozšířena o nástroj "Migration Tool". S jeho pomocí lze všechna nastavení, která se provádí v rámci prostředí (nabídka "Tools => Options") zálohovat a následně uložit. Nástroj je primárně určen k přenesení existujících nastavení a přizpůsobení do vyšší verze prostředí, například při přechodu na aktuální verzi nebo jeho aktualizaci. Lze jej ale stejně dobře použít i k uchování uživatelem ověřeného, funkčního stavu.

Nástroj "Migration tool" je samostatně spustitelná aplikace (.exe), která je umístěna v adresáři "bin" instalace RAD Studia, Delphi nebo C++Builderu. Standardní cesta k adresáři bin (pro verzi Rio) je "C:\Program Files (x86)\Embarcadero\Studio\19.0\bin".



Po spuštění nástroje je třeba zvolit, která operace má být provedena. Pro zálohu "Export settings to a migration file", pro přenesení nastavení do novější verze pak "Migrate settings to a newer product version".



Je třeba vybrat verzi, jejíž nastavení mají být uložena:



Následně je možné vybrat nastavení, která mají být zálohována. Lze tak provést částečnou zálohu/obnovu pro zvolené sekce nastavení:



Určíme umístění a název souboru do kterého budou nastavení uložena:



Po stisknutí tlačítka "Finish" se provede záloha všech vybraných nastavení. Nyní můžeme původní verzi odinstalovat a nainstalovat novou a spustit obsažený "Migration Tool" a načíst příslušnou konfiguraci:



Díky možnosti vybrat jen některá nastavení, je možné uloženou konfiguraci použít i k sjednocení důležitých nastavení v rámci týmu, přenést je na jiný počítač, nebo opravit nastavení, která byla poškozena při "experimentování".

úterý 17. října 2017

Podnikové konektory společnosti CData

S aplikacemi, které se obejdou bez jakékoliv integrace, se již dnes často nesetkáme. Zajištění propojení s externími systémy či službami se tak stává pro vývojáře a programátory jednou z největších výzev. Znamená to opustit důvěrně známé vody vlastního kódu a spoléhat se na nabízená rozhraní a k nim dostupnou dokumentaci. Jedná se tak zpravidla o časově náročnou záležitost a čas jsou peníze.

To si uvědomila i společnost CData a přišla s řešením, které je jednoduché, a především rychle aplikovatelné. Myšlenku, na které je technologie konektorů založena, nejlépe charakterizuje slogan, který má společnost CData na svých webových stránkách: "Dívejte se na svět jako na databázi".
CData vytvořila mezivrstvu, která využívá nativní API integrovaných systémů, aby ji následně uživatelům zpřístupnila, jako by se jednalo o standardní relační databázi, se kterou lze komunikovat s využitím standardního jazyka SQL. Tím odpadá nutnost studovat nové protokoly či API, které se navíc neustále vyvíjí a mění. Speciálně pro vývojová prostředí Delphi a C++Builder pak vznikla (a je dále rozšiřována) sada ovladačů pro použití s populární technologií FireDAC.

RAD Studio a konektory CData

Použití v aplikaci

Instalace jednotlivých konektorů jsou dostupné přímo z prostředí Delphi, C++Builderu nebo RAD Studia. Stačí spustit "GetIt Package Manager", (Hlavní nabídka prostředí -> Tools -> GetIt) a pro rychlejší nalezení požadovaného ovladače použít filtrování (je zde přímo kategorie "Connectors") nebo vyhledávání. Následně již jen spustíte instalaci zvoleného ovladače kliknutím na tlačítko "INSTALL".
GetIt - Instalace zvoleného konektoru

Po dokončení instalace nalezneme vybrané konektory v paletě nástrojů, v sekci "FireDAC Links".

Zobrazení ovladačů v paletě komponent

Práci s konektory si můžeme ukázat na propojení s emailovou službou Seznam. Založíme novou aplikaci VCL a pro uživatelské rozhraní použijeme komponenty "FDConnecion", "FDTable", "DBMemo", "ComboBox", "FDGUIxWaitCursor", "DataSource" a "DBGrid".

Pro vlastní připojení k serverům společnosti Seznam použijeme komponentu TFDConnection, kterou si pojmenujeme například "EmailCnn":

procedure TwMain.btnConnectClick(Sender: TObject);
begin
  EmailCnn.Connected := False;
  EmailCnn.Params.Clear;
  EmailCnn.Params.Add('DriverID=CData.Email');
  EmailCnn.Params.Add('User=adresa@email.cz');
  EmailCnn.Params.Add('Password=heslo');
  EmailCnn.Params.Add('Server=imap.seznam.cz');
  EmailCnn.Params.Add('SMTPServer=77.75.76.48');
  EmailCnn.Params.Add('Port=993');
  EmailCnn.Params.Add('MaxItems=10');
  EmailCnn.Params.Add('SMTPPort=465');
  EmailCnn.Params.Add('IncludeMessage=True');
  EmailCnn.Params.Add('IsHTML=False');
  EmailCnn.Connected := True;
  FDTable.Connection := EmailCnn;
end;

Po úspěšném připojení je třeba zvolit, která data má aplikace zobrazovat. V praxi to znamená vybrat si z tabulek, které jsou pro daný systém (v našem případě email) definovány. Zde se buď musíme podívat do dokumentace, zvolit tabulku dle názvu v okně ObjectInspector (musí být vybrána komponenta "FDTable" a připojena k aktivní "FDConnection"), nebo můžeme využít vlastností technologie FireDAC, načíst dostupné tabulky z „metadat“ a nechat výběr na uživateli.

procedure TwMain.ComboBox1Click(Sender: TObject);
var
  tbName: String;
  i: Integer;
begin
  tbName := ComboBox1.Text;
  FDQuery1.Active := False;
  FDQuery1.SQL.Clear;
  if tbName.Length > 0 then
    FDQuery1.SQL.Add('select * from ' + tbName);
  FDQuery1.Open();
  DataSource1.DataSet := FDTable;
  DBGrid.DataSource := DataSource1;
  DBMemo1.DataSource := DataSource1;
  DBMemo1.DataField := 'MessageBody';
end;

Protože tabulky, se kterými pracujeme jsou pouze virtuální a neříkají nic o skutečné struktuře systému, není zpravidla možné jednoduše vložit data do některé z tabulek. Může zde být řada vazeb a integritních omezení.
Pokud se budeme držet příkladu s e-mailovým serverem, je celkem zřejmé, že vložením záznamu do tabulky odeslané pošty k odeslání zprávy nedojde. I toto však CData řeší databázovými prostředky. Podobně jako virtuální tabulky, vytváří ovladač také sadu uložených procedur. Do projektu tak stačí přidat komponentu "FDStoredProcedure" a napojit ji na dříve definovanou "FDConnection". Pro požadovanou operace pak již jen stačí zavolat příslušnou proceduru.

procedure TwMain.btnSendEmailClick(Sender: TObject);
var
  result: Integer;
begin
  FDStoredProc1.Close;
  FDStoredProc1.FetchOptions.Items := FDStoredProc1.FetchOptions.Items - [fiMeta];
  FDStoredProc1.StoredProcName := 'CData.SendMailMessage';
  FDStoredProc1.Prepare;
  FDStoredProc1.Params.ParamByName('To').AsString := 'adresa@embt.cz';
  FDStoredProc1.Params.ParamByName('Subject').AsString := 'Předmět zprávy';
  FDStoredProc1.Params.ParamByName('From').AsString := 'adresa@email.cz';
  FDStoredProc1.Params.ParamByName('MessageBody').AsString := 'Tělo zprávy';
  FDStoredProc1.Params.ParamByName('Attachment#').AsString := 'C:\TMP\Priloha.txt';
  FDStoredProc1.Params.ParamByName('IsHTML').AsString := 'True';
  FDStoredProc1.Open;
  result := FDStoredProc1.Params.ParamByName('MessageId').AsInteger;
  if result > 0 then
    ShowMessage('ID odeslané zprávy: ' + IntToStr(result));
end;

Aktuálně je k dispozici 83 ovladačů pro populární podnikové systémy z oblastí ekonomiky, účetnictví, řízení vztahů se zákazníky (CRM) nebo řízení podnikových zdrojů (ERP). Dále jsou zde obsaženy konektory pro cloudové služby, platební systémy, datové formáty či sociální sítě.
Konektory nejsou nabízeny jednotlivě, ale v sadách. Vybrat si můžete variantu Enterprise nebo více vybavenou Enterprise+. Sada Enterprise obsahuje:

Sada Enterprise

V sadě Enterprise+ naleznete navíc ještě tyto konektory:

Sada Enterprise Plus



čtvrtek 31. srpna 2017

Vývoj databázových aplikací VII

Metadata

Ne vždy je možné programovat komunikaci s databázovým strojem "natvrdo". Důvodem může být, že chceme navrhnout aplikaci tak, aby se byla schopna vypořádat s případnými změnami ve struktuře databáze, nebo chceme poskytnout uživateli možnost sestavovat některé dotazy takzvaně "Ad-Hoc" (tedy v daném okamžiku).
Aby bylo možné sestavit funkční SQL příkaz, musíme mít přístup k "metadatům", které popisují strukturu a vlastnosti jednotlivých objektů databáze. Tyto informace můžeme zjistit hned několika způsoby.

Systémové tabulky

Každý databázový stroj si udržuje informace o objektech, které spravuje. Tyto informace jsou dostupné v závislosti na typu databáze prostřednictvím systémových tabulek, pohledů a procedur. Například seznam existujících tabulek tak lze zjistit spuštěním standardního SQL dotazu:

Oracle:
SELECT owner, table_name FROM dba_tables;
MSSQL:
SELECT * FROM INFORMATION_SCHEMA.TABLES;
Sybase:
SELECT * FROM sys.objects WHERE type = 'U';
InterBase / Firebird:
select rdb$relation_name from rdb$relations
where rdb$view_blr is null and (rdb$system_flag is null or rdb$system_flag = 0);

Na první pohled je zřejmé, že tento přístup má dvě úskalí. Abychom mohli získat informace o existujících objektech (které neznáme), musíme znát strukturu systémových tabulek. A co je horší, řešení založené na systémových tabulkách je "svázáno" s konkrétním databázovým strojem. Z hlediska přenositelnosti tedy nic moc.

Komponenty FireDAC

FireDAC se snaží na rozdíl od systémových tabulek nabídnout obecný koncept, co nejvíce nezávislý na databázové platformě. Protože databázové stroje mohou mít různou architekturu a jednotná není ani terminologie dodavatelů, vychází FireDAC z obecného uspořádání:

Obecná struktura databázového serveru


Komponenty FireDAC nabízí hned několik způsobů, jak je možné
informace o struktuře databáze získat.

1) Na úrovni připojení

Pokud potřebujeme informace o aktuálním připojení (k jaké databázi je aplikace připojena, pod jakým účtem apod.), stačí zavolat funkci "GetInfoReport". Ta vrací seznam hodnot, kterou zapíše do určené proměnné typu "TStrings". Pokud tedy jako parametr této funkce použijeme odkaz na řádky komponenty "TMemo", dojde k zobrazení všech požadovaných informací.

Příklad 1: načtení informací z "GetInfoReport"

procedure TForm1.btnGetCnnInfoClick(Sender: TObject);
begin
  FDCnn.GetInfoReport(mCnnInfo.Lines);
end;

Výpis vlastností DB připojení

 Pro zjištění informací o jednotlivých objektech pak můžeme využít konkrétní funkce:

GetCatalogNames - pro přehled instancí, katalogů nebo databází, které server spravuje.
GetSchemaNames - pro seznam schemat, jmenných prostorů nebo vlastníků objektů ve vybraném katalogu.
GetTableNames - pro seznam tabulek ve vybraném katalogu a schematu.
GetFieldNames - pro seznam sloupců určené tabulky.
GetKeyFieldNames - pro seznam sloupců obsažených v primárním klíči.
GetIndexNames - pro seznam indexů určené tabulky.
GetPackageNames - pro seznam balíčků ve vybraném katalogu a schematu.
GetStoredProcNames - pro přehled uložených procedur obsažených ve zvoleném balíčku.
GetGeneratorNames - vrací přehled generátorů primárních klíčů.
GetLastAutoGenValue - vrací poslední hodnotu generátoru, sekvence nebo autoikrement určeného sloupce.

Vstupní a výstupní parametry:
Všechny uvedené funkce předávají seznam názvů objektů do určené proměnné typu "TStrings".

TFDPhysObjectScopes
osMy - zahrne do seznamu objekty přihlášeného uživatele
osSystem - zahrne do seznamu systémové objekty
osOther - zahrne do seznamu ostatní objekty

TFDPhysTableKinds
tkSynonym - zahrne do seznamu synonyma
tkTable - zahrne do seznamu tabulky
tkView - zahrne do seznamu tabulkové pohledy

Pattern
Umožňuje specifikovat název objektu za pomoci textového řetězce. Syntaxe je shodná se standardním SQL operátorem "Like", kde '%' nahrazuje libovolný počet znaků a '_' právě jeden libovolný znak.

Příklad 2: Získání přehledu všech tabulek v DB InteBase:

FDCnn.GetTableNames('', '', 'FI%', ListBox.Items, [osMy, osSystem], [tkSynonym, tkTable, tkView], True);

Pozn.: InteBase nevyužívá členění do Katalogů a Schemat. V takovém případě se jako parametr použije prázdný řetězec.

2) Komponenta "FDMetaInfoQuery"

Dalším způsobem, jak za běhu zjišťovat informace o databázových objektech je použití komponenty "FDMetaInfoQuery". Jedná se o standardní "DataSet", jehož obsah lze snadno konfigurovat za pomoci vstupních parametrů.
Typ objektu, jehož metadata potřebujeme získat, určuje parametr "MetaInfoKind". Jeho hodnota může být mkNone, mkCatalogs, mkSchemas, mkTables, mkTableFields, mkIndexes, mkIndexFields, mkPrimaryKey, mkPrimaryKeyFields, mkForeignKeys, mkForeignKeyFields, mkPackages, mkProcs, mkProcArgs, mkGenerators, mkResultSetFields nebo mkTableTypeFields.

Příklad 3: Zjištění informací o sloupcích tabulky FIRMA

procedure TForm1.btnFindClick(Sender: TObject);
begin
  FDMetaInfoQuery1.Active := False;
  FDMetaInfoQuery1.MetaInfoKind := mkTableFields;
  FDMetaInfoQuery1.ObjectName := 'FIRMA';
  FDMetaInfoQuery1.Wildcard := '';
  FDMetaInfoQuery1.Active := True;
end;

Zobrazená datová sada

3) Objekty "FDTable", "FDQuery" nebo "FDStoredProc"

Pokud známe jméno tabulky nebo uložené procedury, můžeme získat podrobné informace přímo ze získané datové sady.

Příklad 4: Zjištění názvů sloupců z komponenty "FDQuery"

procedure TfrmMain.ButtonGetFields(Sender: TObject);
var
  AList: TStringList;
  i: Integer;
begin
  AList := TStringList.Create;
  FDQuery1.GetFieldNames(AList);
end;

Příklad 5: Zjištění vstupních parametrů uložené procedury:

procedure TfrmMain.ButtonGetSPParams(Sender: TObject);
var
  i, n: Integer;
  pname: String;
  pType: TParamType;
begin
  n := FDStoredProc1.ParamCount;
  for i := 0 to n - 1 do
    begin
      pname := FDStoredProc1.Params[i].Name;
      pType := FDStoredProc1.Params[i].ParamType;
      if pType = TParamType.ptInput then
         Memo1.Lines.Add(pname);
    end;
end;

Pokud potřebujete navrhnout aplikaci tak, aby se dokázala pružně přizpůsobit případným změnám ve struktuře databáze, nabízí Vám RAD Studio a FireDAC víc než dostatečné možnosti, jak toho dosáhnout.

čtvrtek 13. dubna 2017

Příliš dlouhé cesty

Při instalaci RAD Studia, Delphi nebo C++Builderu se můžete setkat s chybovým hlášením "Maximum Path Length Limitation". Překročení maximální délky proměnné PATH bývá zpravidla způsobeno větším počtem instalovaných aplikací. Už samo RAD Studio, Android SDK, Windows SDK a doplňkové komponenty z maximálního limitu dokáží ukrojit notnou dávku :-).

Chyba v PATH

Problém se také často objevuje při přechodu na vyšší verzi RAD Studia. Standardní odinstalace bohužel nepotřebné záznamy z PATH neodstraňuje, a tak proměnná postupně bytní:

Proměnná PATH před úpravou

Řešení

1) Odstranění nepotřebných záznamů
2) Nahrazení opakujících se sekvencí proměnnou - Cesty k souborům, které RAD Studio pro svůj běh využívá se liší až v poslední části textového řetězce. Opakující se část je tak možné jednoduše nahradit pomocnou proměnnou. Například tedy:

Domovská složka RAD Studia „C:\Program Files (x86) \Embarcadero\Studio\19.0“ = RX
Uživatelská složka „C:\Users\Public\Documents\ Embarcadero\Studio\19.0“ = RXU

Přidání pomocné proměnné

Výsledný obsah proměnné PATH tak může vypadat následovně:

Proměnná PATH po úpravě

3) Navýšení limitu pro proměnnou PATH - Windows 10 (ve verzi Anniversary Update a novějších) umožňuje povolení „dlouhých cest“ a definovat proměnnou PATH delší než 260 znaků. Ale pozor: aplikace typu Win32, které nemají ve svém manifestu nastaveno „longPathAware“ na „true“ pak nemusí být schopny cesty z proměnné PATH načíst.


Povolení dlouhých cest


Kde se PATH nastavuje?

  • Ve Windows 7: Počítač->Vlastnosti->Upřesnit nastavení systému->Upřesnit->Proměnné prostředí
  • Ve Windows 10: Klikněte pravým tlačítkem myši na ikonu Windows a z nabídky vyberte „System“. V okně, které se otevře, zvolte „Upřesnit nastavení systému“. Ve vlastnostech systému pak klikněte na tlačítko „Proměnné prostředí“. 
Nastavení PATH ve Windows 10

O proměnné PATH

Windows API definuje umožňuje nastavit maximální délku pro proměnnou PATH parametrem MAX_PATH. Z důvodu zpětné kompatibility pro Win32 aplikace je nastavena na 260 znaků. Délka 260 znaků je dána strukturou proměnné. Jedná se o písmenné označení úložiště, dvojtečku, zpětné lomítko, 256 znaků dlouhý řetězec a ukončovací "null" znak použité kódové stránky. Jedná se tedy 1+2+256+1=260 znaků, a to je vzhledem k možnosti používat dlouhá jména složek a souborů limit relativně snadno překročitelný.

pondělí 5. prosince 2016

Manuální odstranění starších verzí


Vúdú
Instalace vývojových nástrojů, které mají přece jen k operačnímu systému blíž, než běžné aplikace se neobejde bez zápisů do registrů Windows. Vezmeme li v úvahu jen množství nastavení pro vlastní prostředí, používané knihovny a překladače, jedná se o slušnou porci klíčů a parametrů. Řada zápisů je navíc "neveřejná", protože pomáhá chránit nástroj před jeho nelegálním používáním.

Mnoho vývojářů používá současně více verzí (například kvůli údržbě starších projektů), ale někdy přece jen potřebujeme staré verze odstranit. U nových verzí pomůže s odinstalací verze předchozí (týká se především Update, kde zachování předchozí verze postrádá smysl) sám instalátor. U verzí, které již mají svou "historickou hodnotu" je to ale právě vzhledem k zápisům v registrech trochu Voodoo.

Snad Vám tedy trochu pomůže seznam odkazů, které jsem posbíral a které obsahují návody od techniků Embarcadera na manuální odstranění starších verzí:

RAD Studio 10.3 Rio
https://community.idera.com/developer-tools/general-development/f/installation-issues-23/68076/manual-uninstall-of-rad-studio-delphi-c-builder-10-3-rio

RAD Studio 10.2 Tokyo
https://community.embarcadero.com/article/articles-support/174-rad-studio/installation-registration/16501-manual-uninstall-of-rad-studio-delphi-c-builder-10-2  

RAD Studio 10.1 Berlin
https://community.embarcadero.com/article/articles-support/174-rad-studio/installation-registration/16235-manual-uninstall-of-rad-studio-delphi-c-builder-10-1-berlin

RAD Studio 10.0 Seattle
https://community.embarcadero.com/article/articles-support/174-rad-studio/installation-registration/16203-manual-uninstall-of-rad-studio-delphi-c-builder-10-seattle

RAD Studio XE8
http://support.embarcadero.com/article/44384

RAD Studio XE7
http://support.embarcadero.com/article/44074

RAD Studio XE6
http://support.embarcadero.com/article/43769

RAD Studio XE5
http://support.embarcadero.com/article/43390

RAD Studio XE4
http://support.embarcadero.com/article/43040

RAD Studio XE3
http://support.embarcadero.com/article/43023

RAD Studio XE2
http://support.embarcadero.com/article/43283

RAD Studio XE
http://support.embarcadero.com/article/43025

RAD Studio 2009
http://support.embarcadero.com/article/39426

RAD Studio 2007
http://support.embarcadero.com/article/37311

Pokud máte s odinstalací pozitivní nebo ne až tak pozitivní zkušenost, podělte se o ni s ostatními!