![]() |
Datenbank: Paradox • Version: 7 • Zugriff über: TTable
Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTable)
Hallo,
ich habe folgendes Problem: Ich habe ein Formular und einige TEdit Felder. Auf der Form habe ich eine TTable Komponente, bei der ich die TableName-Eigenschaft auf die vorher mit dem DB-Editor erstellte Paradox7-Tabelle gesetzt habe. Nun will ich manuell die eingegeben TEdit-Felder in die Tabelle speichern. Das mache ich so:
Delphi-Quellcode:
Dies funktioniert aber nicht, es wird nichts in die Tabelle eingetragen...
Table1.Active := True;
Table1.Insert; Table1.FieldValues['ArtNr'] := edtArtNr.text; Table1.FieldValues['Nettopreis'] := edtPreisBrutto.text; Table1.Post; Ich benutze Delphi 6. Kann mir jemand helfen? |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo,
der Code ist syntaktisch und sachlich richtig. Habe das schon 100 mal so gemacht ! Es kann evtl. sein, das irgendetwas mit den Spaltennamen nicht stimmt.(groß-klein-Schreibung etc.) habe mal testweise auf table1 die Tabelle animals Datenbankname : dbdemos ( diese Tabelle sollte bei jeder Installation dabei sein) In dieser Tabelle gibt es eine Spalte 'NAME' auf das onClick-Ereignis eines Buttons habe ich die 3 Zeilen testweise eingegeben: Table1.Insert; Table1.FieldValues['NAME'] := Edit1.text; Table1.Post; Der eingebene Name des Editfelds wird problemlos in die Tabelle eingetragen! Arbeite mit D7. Mit D6 sollte es aber genauso gehen! |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Zitat:
|
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo,
also ich hatte damals immer
Delphi-Quellcode:
gemacht
Table.Append;
Table.FieldByName('bla').AsString:= Edit_Bla; Table.Post; DbiSaveChanges(Table.Handle); also kein Insert Heiko |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo wk2001,
wenn kein Fehler gemeldet wird, dann sollte der Datensatz eingetragen worden sein. Wenn die Table1 allerdings Detail-Tabelle in einer Master-Detail-Beziehung ist oder ein Filter gesetzt wurde, dann wird der Datensatz nicht angezeigt, obwohl er gespeichert wurde. Wenn die Kontrollanzeige über eine andere Dataset-Komponente als Table1 erfolgt, dann muss diese Komponente per Refresh auf den neuen Datensatz aufmerksam gemacht werden. Wie hast du denn festgestellt, dass dein Code nicht funktioniert? Hast du den Datensatz mal im Database-Desktop gesucht? Grüße vom marabu |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo...
vieleicht ist es ja einfacher...
Delphi-Quellcode:
dein Feld in der Tabelle heißt ' Nettopreis ' ... dein EditFeld 'edtPreisBrutto'...
Table1.Active := True;
Table1.Insert; Table1.FieldValues['ArtNr'] := edtArtNr.text; Table1.FieldValues['Nettopreis'] := edtPreisBrutto.text; Table1.Post; kann es sein, daß du zwar in dein Nettopreisfeld eine Eingabe machst aber dein Bruttopreisfeld (was u.U. noch leer ist ) in die Tabelle eingetragen wird und du dich wunderst, daß der eingetragene Wert nicht angekommen ist ? manchmal sieht man den Wald vor Bäumen nicht.... :hi: |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Danke erstmal für eure Antworten, nun habe ich folgendes seltsame Verhalten (hatte ich vorher sicher auch, nur nicht bemerkt).
Wenn ich den Button klicke, der die TEdit-Felder in die Tabelle eintragen soll, macht er das wohl. Aber trotz diverser Refreshs, Setzen der Active-Eigenschaft auf False und dann wieder auf True aktualisiert er zur Laufzeit nicht die Datensätze (dafür habe ich einen DBGrid)! Wenn ich nun das Programm beende und in der Delphi IDE bei der TTable Komponente, mit der der DBGrid verbunden ist, die Eigenschaft Active auf False setze und anschließend wieder auf True, sind auf einmal die hinzugefügten Datensätze da! Irgendwo habe ich wohl etwas nicht beachtet... Habt ihr eine Ahnung, was es sein könnte? @marabu: ich habe keine master-detail beziehungen, sondern wie du sagtest, 2 forms, auf der einen habe ich den Grid mit eigener TTable-komponente zur kontrolle. und einen button, der eine zweite form aufmacht, auf welcher eine weitere TTable-Kompo ist und die besagten tedit-felder. ich mache aus dieser zweiten form auch einen refresh, aber er zeigt es dennoch nicht an.. @haentschman: danke für den hinweis :) das ist ein bug, aber hat mit der funktion nichts zu tun, weil beide felder benutzt werden... Hier meine komplette button-click methode:
Delphi-Quellcode:
procedure TfrmEditArt.Button1Click(Sender: TObject);
begin Table1.Active := True; Table1.Append; Table1.FieldValues['ArtNr'] := edtArtNr.text; Table1.FieldValues['ArtBez1'] := edtArtBez1.text; Table1.FieldValues['ArtBez2'] := edtArtBez2.text; Table1.FieldValues['MwSt'] := FloatToStr(mwst); Table1.FieldValues['Nettopreis'] := edtPreisNetto.text; Table1.Post; Table1.Refresh; Table1.Active := false; frmMain.Table1.Active := false; frmMain.Table1.Active := true; frmMain.Table1.Refresh; end; |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo,
aha, das hast du so nicht geschrieben ! Dir fehlt nach dem Post das besagte DbiSaveChanges(Table1.Handle), danach das frm1. close / open (über dein Active). Das ist zwar normalerweise nur notwendig im Netz, vielleicht ist das aber auch dein Problem. Falls das immer noch nicht klappt, frmMain.Table1.DisableControls; frmMain.Table1.EnableControls; Das DbiSaveChanges muss aber auf jeden Fall rein. Heiko |
Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
Hallo...
wieso benutzt Du 2 TTable Komponenten ? es reicht eine... :roll: MainForm: - TTable 'Table1' ( DatabaseName / TableName auf File setzen ) - TDatasource 'Datasource1' ( Datasource auf Tabelle Table1 setzen ) Form2: - DbGrid 'DbGrid1' ( Datasource auf Datasource1 setzen ) Edits auf Form1 wie gehabt... Code wie gehabt...
Delphi-Quellcode:
...das einzige: beim Start des Programmes Table1.Active:= True, beim Beenden False.
procedure TfrmEditArt.Button1Click(Sender: TObject);
begin Table1.Append; Table1.FieldValues['ArtNr'] := edtArtNr.text; Table1.FieldValues['ArtBez1'] := edtArtBez1.text; Table1.FieldValues['ArtBez2'] := edtArtBez2.text; Table1.FieldValues['MwSt'] := FloatToStr(mwst); Table1.FieldValues['Nettopreis'] := edtPreisNetto.text; Table1.Post; end;
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin Table1.Active:= True; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Table1.Active:= False; end; Das ganze Active:= True / False und Refresh kannst du dir schenken. durch Post wird automatisch Refresh aufgerufen.... Ich denke, das das Durcheinander zustande kommt wegen der 2 Tabellenkomponenten, welche noch auf das gleiche File verbunden sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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