Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field ) (https://www.delphipraxis.net/199860-tfdquery-select-ermitteln-ob-ein-feld-berechnet-ist-computed-field.html)

Emwykey 26. Feb 2019 12:51

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC

TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Hallo Zusammen,

ich hole per SQL mit einem TFDQuery über Select * From XXX den Inhalt einer Tabelle. Ich möchte die bestehenden Daten in einem neuen Query leicht verändert wieder via Insert als neuen Datensatz speichern. Es soll eine Routine für mehrere verschiedene Tabellen geben, daher möchte ich das ganze variabel programmieren. Ich erstelle aus den mit dem Select gefundenen Daten und der Felderdefinition im TFDQuery also mein Insert Query. Mein Problem ist, dass wenn in einer Tabelle Computed Fields vorhanden sind diese beim Insert natürlich einen Fehler verursachen. Wie kann ich über die Felder aus meinem Select Query oder die Felderdefinition ermitteln, ob es sich um ein Berechnetes Feld handelt oder nicht?
Die Optionen ReadOnly und FieldKind funktionieren bei mir leider nicht ( ReadOnly ist immer false, FieldKind immer fkData ).
Ich erstelle das Query per Create, ordne die Connection zu, schreibe den SQL in den SQL Text und öffne die Daten mit Open. Muss ich vielleicht noch einen weiteren Schritt machen, damit mir der FieldKind korrekt angezeigt wird? Oder suche ich ganz an der falschen Stelle?

Edit: Die Variable Calculated ist ebenfalls false

Lieben Dank im Voraus!

Delphi.Narium 26. Feb 2019 13:17

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Zitat:

Zitat von Delphi 7-Hilfe
InternalCalcField (Eigenschaft von TFieldDef)

property InternalCalcField: Boolean;

Also z. B.:
Delphi-Quellcode:
for i := 0 to TFDQuery.FieldCount - 1 do begin
  if TFDQuery.Fields[i].InternalCalcField then begin
    // berechnete Logik
  end else begin
    // unberechenbare Logik
  end;
end;

Emwykey 26. Feb 2019 13:32

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Hallo, danke für die Antwort, die Eigenschaft ist leider auch false :(

hier mal ein Code Ausschnitt, vielleicht fällt ja noch was auf:
Code:

  QuCloneData := TFDQuery.Create( nil );
  QuCloneData.Connection := fConnection;
  QuCloneData.Sql.Text := 'Select * from !Tabelle ';
  QuCloneData.MacroByName( 'Tabelle' ).AsRaw := fTableName;
  QuCloneData.Open;

  for i := 0 to QuCloneData.Fields.Count-1 do begin
    if ((  not QuCloneData.FieldDefs[i].InternalCalcField )
    and ( AnsiUpperCase(QuCloneData.Fields[i].FieldName) <> AnsiUpperCase( fKeyFieldName ) )) then begin
      if Trim( FieldString ) <> '' then begin
        FieldString := FieldString + ',';
        ParamString := ParamString + ',';
      end;
      FieldString := FieldString + QuCloneData.Fields[i].FieldName;
      ParamString := ParamString + ':' + QuCloneData.Fields[i].FieldName;
    end;
  end;

Delphi.Narium 26. Feb 2019 13:58

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Und was verbirgt sich hinter !Tabelle?

Mal ein Createstatement, damit man 'nen Vorstellung davon bekommt, was gemeint sein könnte?

Sherlock 26. Feb 2019 14:04

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Quark, kann weg.

Sorry

Sherlock

Frickler 26. Feb 2019 14:09

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Berechnete Felder in TDataSet und berechnete Felder in der Datenbank sind zwei verschiedene Paar Schuhe:
- Berechnete Felder in TDataSet sind lokal berechnet, d.h. mittels einer OnCalcField Methode, etwa für eine spezielle Darstellung in einem Grid o.ä.
- Berechnete Felder in der Datenbank ("Computed By") sind hingegen auf dem Server berechnet.
Jede Datenbank hat spezielle Tabellen oder Views für Informationen über die Datenbankstruktur selbst. Dort musst Du nach den Tabellenfeldern suchen und nachschauen, ob diese berechnet sind.

Emwykey 26. Feb 2019 14:13

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Zitat:

Zitat von Frickler (Beitrag 1426451)
Berechnete Felder in TDataSet und berechnete Felder in der Datenbank sind zwei verschiedene Paar Schuhe:
- Berechnete Felder in TDataSet sind lokal berechnet, d.h. mittels einer OnCalcField Methode, etwa für eine spezielle Darstellung in einem Grid o.ä.
- Berechnete Felder in der Datenbank ("Computed By") sind hingegen auf dem Server berechnet.
Jede Datenbank hat spezielle Tabellen oder Views für Informationen über die Datenbankstruktur selbst. Dort musst Du nach den Tabellenfeldern suchen und nachschauen, ob diese berechnet sind.


Ja, das ist mir bekannt, hab es zwischenzeitlich auch so gelöst, ich fänd es aber dennoch klasse wenn es eine Option direkt über das Dataset gäbe ohne die Systemtabellen händisch abfragen zu müssen. Wenn also jemand noch was einfällt immer her damit :-D

Emwykey 26. Feb 2019 14:16

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1426448)
Und was verbirgt sich hinter !Tabelle?

Mal ein Createstatement, damit man 'nen Vorstellung davon bekommt, was gemeint sein könnte?


Dahinter verbirgt sich der Name einer Tabelle, die an die Funktion übergeben wird, da die Funktion dann für viele verschiedene Tabellen aufgerufen wird. Das wird dann mit der Funktion MacroByName( 'Tabelle' ).AsRaw := fTableName komplettiert ;)

Emwykey 26. Feb 2019 14:18

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Zitat:

Zitat von Sherlock (Beitrag 1426450)
Quark, kann weg.

Sorry

Sherlock

muss ich das jetzt verstehen?

Union 26. Feb 2019 14:23

AW: TFDQuery Select - Ermitteln ob ein Feld Berechnet ist ( Computed Field )
 
Lässt Du von FireDAC die Metadaten einlesen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz