Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   KbmMemTable Problem, Lookup Felder bleiben leer (https://www.delphipraxis.net/187983-kbmmemtable-problem-lookup-felder-bleiben-leer.html)

BlackGuest 21. Jan 2016 10:05

Datenbank: KbmMemTable • Version: 7.62 • Zugriff über: KbmMemTable

KbmMemTable Problem, Lookup Felder bleiben leer
 
Ich bin dabei ein Projekt von ClientDataset auf KbmMemTable umzustellen.
Die Struktur der Datenbank habe ich von dem ClientDataset übernommen. Allerdings funktionieren meine Lookup Datenfelder nicht, sie bleiben einfach leer.

Das komische an der Sache ist, füge ich die Daten aus dem Clientdataset in die KbmMemTable ein, funktioniert alles. Die Lookupfelder werden richtig gefüllt. Speichere ich die KbmMemTable mit SaveToFile ab und lade sie wieder mit LoadFromFile, sind die Daten in den Lookupfeldern wieder weg. Also wird irgendetwas falsch geladen. Ich habe schon so ziemlich alle Kombinationen der Flags der kbmBinaryStreamFormat Struktur ausprobiert aber es funktioniert einfach nicht.

Was könnte ich übersehen?

Danke schon mal für alle Antworten.

nahpets 21. Jan 2016 13:12

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Lookupfelder werden für gewöhnlich aus einer anderen Tabelle gefüllt, da sie Nachschlagwerte enthalten.

Bei der Nutzung nur einer Tabelle kann das eigentlich nicht wirklich funktionieren.

Für die Lookup-Werte würd' ich hier eine zweite Tabelle erwarten.

Häng' doch bitte mal den Quelltext und das Formular hier an, damit man da mal reingucken kann. So abstrakt ist der (potentielle) Fehler kaum zu finden.

BlackGuest 21. Jan 2016 14:22

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Danke für die Antwort.
Die Lookup Daten kommen natürlich aus einer anderen Tabelle. Geht ja gar nicht anders.

Das Projekt ist ziemlich umfangreich. Ich werde mal versuchen ob ich das Ganze mit einer einfachen Demoanwendung nachvollziehen kann. Die stelle ich dann hier rein. Wird aber erst am Montag was.

Falls zwischendurch jemand eine Idee hat, immer her damit.

Gruß
Steffen

BlackGuest 25. Jan 2016 10:23

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal ein kleines Demoprojekt zusammengeklickt.
Tab1 ist die LookupTable. Fülle ich Tab2 mit Werten, werden die Lookupfelder sauber aus Tab1 übernommen.
Speichere ich Tab2 mit SaveToFile und Lade sie wieder zurück sind die Lookup-Felder komplett verschwunden.

Setzte ich sfSaveLookup und sfLoadLookup beim Format auf true bekomme ich bei LoadFromFile die Fehlermeldung "Opperation bei geschlosser Datenmenge nicht ausführbar.


Edit:
Bei der Demoanwendung habe ich gemerkt, dass die Felddefinition nach dem Laden komplett weg ist. Habe also an der falschen Stelle gesucht. Setze ich sfSaveDef und sfLoadDef auf false funktioniert es wie es soll.

nahpets 25. Jan 2016 15:16

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Zitat:

Zitat von BlackGuest (Beitrag 1328085)
Edit:
Bei der Demoanwendung habe ich gemerkt, dass die Felddefinition nach dem Laden komplett weg ist. Habe also an der falschen Stelle gesucht. Setze ich sfSaveDef und sfLoadDef auf false funktioniert es wie es soll.

Das ist ein Fehler, über den ich schon oft gestolpert bin. Je nach Änderung von Attributen im Objektinspektor, werden die Felddefinitionen entfernt, Indexdefinitionen bleiben erhalten.

Es empfiehlt sich die Felddefinitionen aus der DFM irgendwohin zu kopieren, damit man sie nach so einem "Unfall" einfach wieder einfügen kann und nicht komplett neu erstellen muss.

BlackGuest 25. Jan 2016 20:16

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Das Problem ist denke ich, dass während der Entwurfszeit durch Öffnen und Schließen der Tabelle diese ebenfalls incl. der Felddefinitionen geladen werden, wenn die Table persistent ist. Also man kann machen was man will aber so bald man active auf true setzt werden die Felddefinitionen überschrieben.

Das hat mir heute wieder alles mehrfach zerschossen.

Morgen also die kompletten Strukturen neu aufbauen aber diesmal nicht persistent sondern das Laden und Speichern mache ich im Programm selbst, so wie es vorher mit den ClientDatasets auch war.
Zwischendurch hat ein Teil wenigstens funktioniert und ich muss sagen es hat sich gelohnt auf KbmMemTable umzusteigen. Der Geschwindigkeitszuwachs ist enorm. Von dem Lehrgeld mal abgesehen.

Gruß
Steffen

nahpets 25. Jan 2016 20:33

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Also meine Art, das "Zerschießproblem" zu umgehen ist eher von der einfachen Art.

Die Tabellen sind letztlich nichts weiter als CSV-Dateien mit 'nem besonderen Kopf.

Zuerst erstelle ich mal in der IDE das Grundgerüst (also das gerade bekannte Tabellenlayout).

Habe ich das einmal, dann mache ich mir von der persistenten Datei eine Kopie.

Alle eventuell später nötigen Änderungen mache ich dann mit 'nem Texteditor in der Datei.

Das ewige Zerschießen der Felddefinitionen in der Entwicklungsumgebung war ich irgendwann leid.

Die Tabellen selbst öffne ich nie in der Entwicklungsumgebung, sondern erst im FormCreate oder zu einem späteren Zeitpunkt.

Zumindest setze ich für die Tabellen vor dem Kompilieren Active immer auf false und schaue vor dem ersten Programmstart, ob die Tabellendateien noch in Ordnung sind.
Wenn nicht, ersetzte ich sie durch die Kopie.

Ist lästig, aber eine andere Möglichkeit hab' ich nicht gefunden.

BlackGuest 27. Jan 2016 08:52

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Danke Dir für die Tipps.

Ich hänge aber immer noch fest. Importiere ich die Daten aus meiner alten Datenbank in die KbmMemTable, werde die Lookup Felder sauber ausgefüllt. Nach dem Import speichere ich die Daten mit SaveToFile ab.
Lade ich die Daten jetzt mit LoadFromFile, ist alles noch in Ordnung.

Lade ich die Daten ohne vorherigen Import (also so, wie es dann laufen sollte) sind die Lookupfelder wieder leer.

Keine Ahnung, wo ran das liegen könnte. Die Datenfelder sind da, werden aber nicht ausgefüllt.?

nahpets 27. Jan 2016 18:33

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Hab' jetzt geschlagene 2 Stunden an dem Problem rumgedaddelt.
Alle Lookups entfernt, bekomme aber trotzdem die Meldung, dass nicht alle Lookupinformationen verfügbar sind.

Fügt man die Lookup-Informationen wieder (vermeintlich?) korrekt ein, dann gibt es beim Öffnen der Tabelle mit dem Lookup-Feld die Meldung, dass die Operation nur zulässig ist, wenn eben diese Tabelle bereits geöffnet ist.

Oder kurz: Das Öffnen der Tabelle setzt ihr Geöffnetsein voraus.

Kommt mir nicht schlüssig sondern nur rekursiv vor :-(

Was mir nur aufgefallen ist:

Wenn man in der Entwicklungsumgebung die Tabelle mit dem Lookup-Feld öffnet, fehlt nach der Fehlermeldung in den FieldDefs das Schlüsselfeld für die Lookup-Informationen. Man muss also jeweils die FieldDefs neu machen.

Wenn das aber ein Fehler ist, der nicht nur in der Entwicklungsumgebung, sondern auch zu Laufzeit auftritt?
Wäre das dann irgendwie lösbar? Habe keine Ahnung und keine Idee :-(

BlackGuest 10. Feb 2016 07:20

AW: KbmMemTable Problem, Lookup Felder bleiben leer
 
Irgendwie scheinen da doch ein paar Bugs drin zu sein.
Nach ewigem herumprobieren habe ich herausgefunden wo bei mir das Problem lag.

Ich habe mehrere KbmMemTables auf einer Form. Die habe ich alle geöffnet, also activ auf true und dann die Daten per LoadFromFile eingelesen. Ergebnis: Die Lookupfelder bleiben leer.
Lade ich die Daten für jede Tabelle sofort nach dem Öffnen, dann funktionierts. Erkläre mir mal einer warum...

Was mir noch aufgefallen ist, setze ich sfSaveDef und sfLoadDef auf true, dann bekomme ich bei einigen Tabellen beim Laden die Meldung, das die Felddefinitionen falsch sind. Kann aber nach mehrmaliger Kontrolle keinen Fehler finden.
Mit den IndexDefs scheint es auch ein paar Probleme zu geben, die man aber umgehen kann, wenn man direkt IndexFieldNames verwendet.

Hoffe mal das erspart dem einen oder anderen vielleicht so eine lange Suche wie mir. ;-)

Gruß
Steffen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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