AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken KbmMemTable Problem, Lookup Felder bleiben leer
Thema durchsuchen
Ansicht
Themen-Optionen

KbmMemTable Problem, Lookup Felder bleiben leer

Ein Thema von BlackGuest · begonnen am 21. Jan 2016 · letzter Beitrag vom 11. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2      
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#1

KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 21. Jan 2016, 11:05
Datenbank: KbmMemTable • Version: 7.62 • Zugriff über: KbmMemTable
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 21. Jan 2016, 14:12
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.
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#3

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 21. Jan 2016, 15:22
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
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#4

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 25. Jan 2016, 11:23
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.
Angehängte Dateien
Dateityp: zip Test kbmMemTable.zip (63,0 KB, 8x aufgerufen)

Geändert von BlackGuest (25. Jan 2016 um 11:38 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#5

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 25. Jan 2016, 16:16
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.
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#6

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 25. Jan 2016, 21:16
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
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 25. Jan 2016, 21:33
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.
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#8

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 27. Jan 2016, 09:52
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.?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#9

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 27. Jan 2016, 19:33
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
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#10

AW: KbmMemTable Problem, Lookup Felder bleiben leer

  Alt 10. Feb 2016, 08:20
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 Uhr.
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