Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi table.insert überspeichert daten ?! (https://www.delphipraxis.net/150364-table-insert-ueberspeichert-daten.html)

veetschal 14. Apr 2010 23:54

Datenbank: paradox • Version: 7 • Zugriff über: DBE

table.insert überspeichert daten ?!
 
hey!

hab folgendes problem:

arbeite mit delphi 7 in verbindung mit paradox 7 datenbanken

daten werden aus tabelle per ganz normal per table und datasource in delphi eingelesen und in diversen DBlookupcomboboxen angezeigt

wenn ich nun in meine "haupttabelle" einen neuen datensatz einfügen möchte, so wird per button click zuerst
tablehaupttabelle.insert gesetzt dann die nebentabelle(1)
tabletermin.insert

soweit so gut
die neuen werte der haupttabelle werden vom benutzer per DBEdit felder direkt in die tabellen eingeschrieben während die nebentabelle(1) alleine zum daten aus dblookupboxen auswählen benötigt wird und mit table.post in die tabelle gespeichert

anmerkung: die haupttabelle ist nicht direkt per fremdschlüsselfeld mit der nebentabelle(1) verbunden sondern über eine zweite nebentabelle(2)
also:
haupttabelle - nebentabbele(2) - nebentabelle(1)

jetzt kommt die eigentliche knifflige stelle:
aus einem kalender (datetimepicker) sollen zusätzlich noch neue daten in nebentabelle(1) gespeichert werden. da datetimepicker keine DB komponente ist werden die daten per SQL eingeschrieben:

Delphi-Quellcode:

    tablelv.Post; //haupttabelle

    tabletermin.Post; //nebentabelle(1)

    datum:= frame21.DateTimePicker1.Date;
    Query1.SQL.Text := 'INSERT INTO tabellen\Datum(Datum) VALUES(:datum)';
    Query1.ParamByName('datum').AsDateTime := frame21.DateTimePicker1.Date;
    Query1.ExecSQL;
da delphi was das schließen von tables angeht manchmal leicht verwirrt scheint steht in TForm1.FormClose() noch:

tableLV.FlushBuffers;
tabletermin.FlushBuffers;
tableLV.close;
tabletermin.close;


so jetzt zum springendem punkt:
wenn ich den speicher button drücke wird nur das kalenderdatum (datetimepicker wert) in die tabelle gespeichert die andern felder bleiben vorerst leer.
sobald ich mein programm schließe wird dieser wert überspeichert(?), es wird eine leeres feld während die anderen felder der anderen spalten welche mittels tabletermin.post gespeichert wurden eingeschrieben werden


meine frage lautet also: warum ist das so? wie kann ich das ändern? muss ich statt den wert von datetimepicker direkt in SQL zu speichern ihn zuerst irgendwie in table speichern? wenn ja wie?

hoika 15. Apr 2010 06:57

Re: table.insert überspeichert daten ?!
 
Hallo,

Delphi-Quellcode:
da delphi was das schließen von tables angeht manchmal leicht verwirrt scheint steht in TForm1.FormClose() noch:

tableLV.FlushBuffers;
tabletermin.FlushBuffers;
tableLV.close;
tabletermin.close;
Das liegt nicht an Delphi, sondern an Paradox.
Damit wirst du keine Freude haben.


Zitat:

sobald ich mein programm schließe wird dieser wert überspeichert(?),
Erst beim Beenden werden die Daten tatsächlich auf die Platte geschrieben (dein FlushBuffers).

Schreibe das nach dem Post und prüfe deine Daten per DBD.

Mehr kann ich ohne Quellcode nicht sagen.

Benutze den Debugger und Breakpoints, um den Fehler zu finden.


Heiko

veetschal 15. Apr 2010 10:01

Re: table.insert überspeichert daten ?!
 
was? nein!!!

habs jetzt nochmal so probiert wie du vorgeschlagen hat ändert aber leider nichts an der tatsache..

also am besten 2 tabellen daraus machen oder? hm.. das heißt ganze datenbank überarbeiten na super

hachgott wenn delphi/paradox einmal das machen würde was ich will^^ :wall:

sonst noch wer eine idee wie man das anders lösen könnte?

hoika 15. Apr 2010 10:55

Re: table.insert überspeichert daten ?!
 
Hallo,

du hast dann wohl einen Logik-Fehler im Programm.

Zeige doch noch mal den Schreib-Code.

F5, F7, F8 sind dein Freund.

Update:
Den DBD darfst du erst nach dem Speichern in deinem Programm öffnen,
sonst sieht der deine gespeicherten Änderungen nicht.
Der darf also nicht offen bleiben.
Das FlushBuffers speichert das zwar ab auf die Platte,
Paradox (und damit der DBD) hat aber auch noch einen Lese-Puffer,
der über Table.Refresh geleert wird. Der DBD macht das aber glaube ich nicht.


Heiko


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