![]() |
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. |
AW: TDFTable erkennt AutoInc Felder nicht
Ist in FetchOptions.Items das fiMeta gesetzt?
|
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:
Für alle anderen felder werden die gleichen FeldTypen erzeugt.
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 Allerdings werden bei TFDTable für keines der Felder "ProviderFlags" geliefert. |
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) |
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.
|
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. |
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. |
AW: TDFTable erkennt AutoInc Felder nicht
Zitat:
Zweitens siehe hier: ![]() Mit besten Grüßen Ronald |
AW: TDFTable erkennt AutoInc Felder nicht
Zitat:
|
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 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz