Forum Delphi.cz

Delphi => FireDAC => Téma založeno: Stanislav Hruška 30-06-2019, 12:16:29

Název: Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 12:16:29
Môj pokus
Kód: [Vybrat]
FTable.Close/Cancel - pre vyvolanie výnimky;
  try
    FTable.Post;
  except
    on E: EFDDBEngineException do  // 1
    begin
      ShowException(AAutoCommit, E);
      raise;
    end;
    on E: Exception do                   // 2
    begin
      ShowMessage(E.Message);
      raise;
    end;
  end;
Problém je v tom, že mi to skočí do 2. A ja chcem samozrejme 1 - EFDDBEngineException.
Ako to dosiahnem?
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: pf1957 30-06-2019, 12:25:12
Ako to dosiahnem?
No musis se podivat, co presne za tridu (ClassName) ti ta operace vyvola, podivat se, kam patri v taxonomii exceptions a ev. ji vhodne obslouzit tj. vedle 1 a 2 pridat pred 2 jeste dalsi vetev.
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 16:00:35
Aby som si otestoval vrátenú vlastnú textovú správu. Mal by tam byť názov tabuľky a akosi tam chýba. Preto sa pokúšam o tú výnimku.
Teraz už viem, že to nemusí byť EFDDBEngineException.
Už si s tým dám rady.
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 17:44:22
To je iba pre užívateľa. Len tak. Aby som rezal frajera ;)  Pre laikov som preložil hlavné anglické oznamy. Možno to niekedy niektorým pomôže.
Ten názov je v slovenčine. V DB sú len anglické názvy.
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 20:16:39
Dávam tu kód. Viem, že sa Ti zježia vlasy na hlave, ale už tu nič nerieš ;)
Kód: [Vybrat]
procedure TCustomDB.ShowException(const E: EFDDBEngineException; const ContenSupplement: string);var
  TaskDlg:  TAdvTaskDialog;
begin
  TaskDlg := TAdvTaskDialog.Create(nil);
  TaskDlg.Clear;
  TaskDlg.Title := 'Chyba pri práci s databázou';
  TaskDlg.Icon := tiError;
  TaskDlg.FooterIcon := tfiWarning;
  TaskDlg.Footer := 'Vami požadované zmeny nebudú zapísané';
  TaskDlg.ExpandControlText := 'Zobraz menej';
  TaskDlg.CollapsControlText := 'Zobraz viac';
  TaskDlg.CommonButtons := [cbOK];
  TaskDlg.DialogPosition := dpOwnerFormCenter;
  FGetFDExceptionText.GetTextContenInstruction(E, FConten, FInstruction);
  try
    TaskDlg.Instruction := FInstruction;
     if Length(ContenSupplement) = 0 then
      TaskDlg.Content := FConten
    else
      TaskDlg.Content := FConten + sLineBreak + sLineBreak + ContenSupplement;
 
    TaskDlg.ExpandedText := E.Message;
    TaskDlg.Execute;
  finally
    TaskDlg.Free;
  end;
end;
procedure TGetFDExceptionText.GetTextContenInstruction(const E: EFDDBEngineException; var AConten,
  AInstruction: string);
begin
  case E.Kind of
    ekOther: GetTextOther(AConten, AInstruction);
...
  else
    AInstruction := 'Neznámy druh chyby.';
    AConten := 'Vrátená chyba nie je v zozname chýb.';
  end;
   Assert(AInstruction <> '', '  sting Instruction is empty  ');
end;
procedure TGetFDExceptionText.GetTextOther(var AConten, AInstruction: string);
begin
  // The error does not fall into any of the CATEGORIES listed below
  AInstruction := 'Bližšie neurčená chyba.';
  AConten := 'Databáza nedokázala identifikovať druh chyby.';
end;
Toto bolo len také odskočenie.
Teraz sa snažím, dosť silné slovo :) , pochopiť ako mám riešiť výnimky v celom programe na základe mnou založeného vlákna v časti Obecné. Je celkom možné, že ak tie výnimky pochopím a vyriešim, tak tieto veci vypadnú.
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 21:18:48
Veď som písal, aby si už nereagoval :D
Citace
precti si obsah property ObjName objektu chyby z kolekce Errors. Pokud pracujes s objektem tabulky TFDTable, nazev tabulky definujes property TableName. Jak umele vyvolat chybu EFDDBEngineException jsem popsal prispevku #2.
K ObjName a spol sa ešte len dostanem. Názov tabuľky nie je problém. Tu výnimku mám zvládnutú.
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: Stanislav Hruška 30-06-2019, 22:07:18
Mysli pozitívne!
Název: Re:Vyvolanie výnimky pre ladenie programu
Přispěvatel: miroB 30-06-2019, 22:51:04
.. 5 hvezdickove Mahou ..
Ak by niekto nevedel, o čo ide, tak pre istotu : 
https://www.ratebeer.com/beer/mahou-cinco-estrellas/14863/ (https://www.ratebeer.com/beer/mahou-cinco-estrellas/14863/)
Tuším si idem do komory aspoň pre Svijanský Máz :)