Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTable) (https://www.delphipraxis.net/95685-manuelles-speichern-v-daten-paradox-tabelle-mit-ttable.html)

wk2001 11. Jul 2007 15:21

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:
  Table1.Active := True;
  Table1.Insert;
  Table1.FieldValues['ArtNr'] := edtArtNr.text;
  Table1.FieldValues['Nettopreis'] := edtPreisBrutto.text;
  Table1.Post;
Dies funktioniert aber nicht, es wird nichts in die Tabelle eingetragen...

Ich benutze Delphi 6.


Kann mir jemand helfen?

Horu98716 11. Jul 2007 16:48

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!

mkinzler 11. Jul 2007 17:13

Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
 
Zitat:

Zitat von Horu98716
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!

Wir haben wieder ein Cache-Problem

hoika 11. Jul 2007 19:00

Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
 
Hallo,

also ich hatte damals immer

Delphi-Quellcode:
Table.Append;
Table.FieldByName('bla').AsString:= Edit_Bla;
Table.Post;

DbiSaveChanges(Table.Handle);
gemacht
also kein Insert


Heiko

marabu 11. Jul 2007 19:30

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

haentschman 11. Jul 2007 20:18

Re: Manuelles Speichern v. Daten in Paradox-Tabelle (mit TTa
 
Hallo...

vieleicht ist es ja einfacher...
Delphi-Quellcode:
Table1.Active := True;
  Table1.Insert;
  Table1.FieldValues['ArtNr'] := edtArtNr.text;
  Table1.FieldValues['Nettopreis'] := edtPreisBrutto.text;
  Table1.Post;
dein Feld in der Tabelle heißt ' Nettopreis ' ... dein EditFeld 'edtPreisBrutto'...

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:

wk2001 11. Jul 2007 21:34

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;

hoika 12. Jul 2007 07:41

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

haentschman 12. Jul 2007 09:48

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:
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;
...das einzige: beim Start des Programmes Table1.Active:= True, beim Beenden False.
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 16:00 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