Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TDFTable erkennt AutoInc Felder nicht (https://www.delphipraxis.net/206928-tdftable-erkennt-autoinc-felder-nicht.html)

Sinspin 9. Feb 2021 16:56

Datenbank: ADS • Version: ADS11.10 • Zugriff über: FireDAC

TDFTable erkennt AutoInc Felder nicht
 
Hallo,

ich ziehe gerade in mein größtes Projekt (500K LOC) FireDAC als Zwischenschicht zum Zugriff auf die DB ein.
Bisher war es Advantage Database Server im Direktzugriff, jetzt via FireDAC.

Nun ist mir etwas sehr merkwürdiges aufgefallen.
Mit TFDQuery wird mir beim öffnen einer Tabelle ein enthaltenes AutoInc Feld korrekt als TFDAutoIncField erzeugt.
Mache ich das gleiche mit TFDTable kommt TIntegerField bei raus.

Führe ich ein Insert aus, wird mir via Query correkt ein neuer Record erzeugt, nach Post stehe ich auch drauf.
Bei der Tabelle geht es in die Hose, mir wird jedesmal der erste Datensatz in der Tabelle überschrieben und geliefert.

Was ich beim besten Willen nicht verstehe, warum TFDQuery es hinbekommt, TFDTable nicht.
Connection und Tabellen sind unverändert. Nur halt Connection auf ADS driver.

Woran kann das liegen?

Ich verwende Delphi 10.3 Update 3, wohl dann auch FireDAC in der Version. ADS ist 11.10.0.24.

Uwe Raabe 9. Feb 2021 17:14

AW: TDFTable erkennt AutoInc Felder nicht
 
Ist in FetchOptions.Items das fiMeta gesetzt?

Sinspin 9. Feb 2021 17:38

AW: TDFTable erkennt AutoInc Felder nicht
 
Jawoll, fiMeta ist gesetzt. Das hatte ich auch schon gefunden.

Hier mal die DFM Auszüge aus meinem Test. Da würde man alle Änderungen sehen die ich an den Komponenten gemacht habe.
Und man kann sehen was die Komponenten an Feld info erzeugt haben.
Code:
object Query: TFDQuery
  Active = False
  Connection = TestConnection
  SQL.Strings = (
    'Select * from contacts')
  Left = 287
  Top = 578
  object QueryID: TFDAutoIncField
    FieldName = 'ID'
    Origin = 'ID'
    ProviderFlags = [pfInWhere, pfInKey]
    ReadOnly = True
  end
end
object Table: TFDTable
  Active = False
  Connection = TestConnection
  UpdateOptions.UpdateTableName = 'Contacts'
  TableName = 'Contacts'
  Left = 335
  Top = 578
  object TableID: TIntegerField
    FieldName = 'ID'
    Origin = 'ID'
  end
end
Für alle anderen felder werden die gleichen FeldTypen erzeugt.
Allerdings werden bei TFDTable für keines der Felder "ProviderFlags" geliefert.

himitsu 9. Feb 2021 17:59

AW: TDFTable erkennt AutoInc Felder nicht
 
Da ist doch bereits ein TIntegerField (FieldName "ID") eingebaut.

Lösche das mal. (ich denke die FDTable wird den Field-Typ nicht eigenständig böswillig ändern wollen)
Oder ändere dessen Typ zu TFDAutoIncField (in der DFM. in der PAS könnteste das auch machen, aber beim Speichern bietet dir Delphi eh an den Typ anhand der DFM zu ändern)

Sinspin 9. Feb 2021 18:12

AW: TDFTable erkennt AutoInc Felder nicht
 
Genau. Das Integer Feld wurde so erzeugt als ich Felder abgerufen habe. Für die Query das erwartete TFDAutoIncField. Für die Tabelle eben nicht.

RSF 9. Feb 2021 20:11

AW: TDFTable erkennt AutoInc Felder nicht
 
Ich denke mal FireDAC hat nicht den vollständigen Funktionsumfang für ADS als die
originalen ADS Komponenten. Den schließlich sind ADS Datenbanken eigentlich tot.:pale:
Das wird zwar die Frage nicht beantworten
aber erklärt vielleicht warum FireDAC für ADS nicht vollkommen ist.

Sinspin 10. Feb 2021 06:24

AW: TDFTable erkennt AutoInc Felder nicht
 
Wie kommst du darauf?
Wenn Emba Geld für ein Produkt nimmt (und nicht gerade wenig) dann sollte das auch zu 100% funktionieren.
Und, solange ein Produkt verkauft wird halte ich es auch nicht für tot.

RSF 10. Feb 2021 07:23

AW: TDFTable erkennt AutoInc Felder nicht
 
Zitat:

Zitat von Sinspin (Beitrag 1482636)
Wie kommst du darauf?
Wenn Emba Geld für ein Produkt nimmt (und nicht gerade wenig) dann sollte das auch zu 100% funktionieren.
Und, solange ein Produkt verkauft wird halte ich es auch nicht für tot.

Erstens verkauft EMBA keine ADS Datenbanken.8-)
Zweitens siehe hier:https://www.delphipraxis.net/191721-...twicklung.html

Mit besten Grüßen
Ronald

Uwe Raabe 10. Feb 2021 08:23

AW: TDFTable erkennt AutoInc Felder nicht
 
Zitat:

Zitat von Sinspin (Beitrag 1482612)
Was ich beim besten Willen nicht verstehe, warum TFDQuery es hinbekommt, TFDTable nicht.

Wenn niemand hier eine Erklärung hat (und ADS ist tot gilt nicht), wäre vielleicht ein QP-Eintrag hilfreich.

RSF 10. Feb 2021 08:50

AW: TDFTable erkennt AutoInc Felder nicht
 
Ich glaube nicht das noch jemand eine Korrektur/Erweiterung an Komponenten (FireDAC) für eine veraltete Datenbank (ADS) vornimmt.
Aber die Hoffnung stirbt zuletzt.
Ich hatte viele Jahre mit ADS gearbeitet. Alle Projekte wurden bei mir auf eine noch „lebende“ DB umgestellt.
Ich hatte einige Gespräche mit meinen Ansprechpartnern bei SAP.
Warum verwendet er nicht einfach die Originalen Komponenten Bibliothek von ADS?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.
Seite 1 von 2  1 2      

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