Announcement

Collapse
No announcement yet.

Nach POST Daten auslesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Nach POST Daten auslesen

    Hallo Spezialisten!<BR>

    Habe folgendes Problem mit einer Paradox-Db:<BR>
    Nach einem APPEND + EDIT + POST will ich ein Datenfeld auslesen, das durch ein BEFOREPOST selbständig mit Daten gefüllt wurde.<BR>
    Dann will ich dieses Feld mit FIELDBYNAME auslesen.
    Ich dachte eigentlich, das nach einem POST der gerade geschriebene Datensatz auch der aktuelle Datensatz ist. Ist er bei mir aber nicht?!?<BR>
    Wie kann ich Delphi überzeugen, den gerade geschriebenen Datensatz zum aktuellen Datensatz zu machen?
    <BR>
    Danke für Hilfe<BR>
    Gruß Gunnar

  • #2
    die bde speichert aus effizensgründen nur die daten, wenn sichs lohnt!du mußt die api der bde aufrufen.

    übergabe ist das handle der tabelle:
    if DBiSaveChanges(Table1.handle) = DBIerr_none then
    showmessage ( 'die daten sind drin'

    Comment


    • #3
      Hallo Raik.<BR>
      DBISAVECHANGES hat leider nicht den gewünschten Erfolg gebracht. Der Fehler muß also woanders stecken. Hier nochmals die Problemdarstellung:<BR>
      <PRE>
      Tbl.Append;
      Tbl.Edit;
      ... (Daten zuweisen)
      Tbl.Post;
      DBiSaveChanges (Tbl.Handle);
      Id := Tbl.FieldByName('Id').AsInteger;
      </PRE>

      Durch POST wird per BEFOREPOST foldende Routine ausgeführt:
      <PRE>
      if Tbl.FieldByName('Id').IsNull then begin
      Tbl.FieldByName('Id').AsInteger := GetFreeId; //ermittelt freie Id
      end;
      </PRE>

      Die durch id zurückgegebene Kennung ist leider nicht die durch GetFreeId erzeugte. ;-(<BR>
      Hat jemand 'ne Idee was da klemmt?
      <BR>
      Gruß Gunna

      Comment


      • #4
        Wahrscheinlich ist ein Range gesetzt. Sobald der neue Datensatz eingetragen wird verschwindet er aus dem Range-Bereich und der Datensatzzeiger steht auf einem anderen Datensatz.<BR>
        Zum Thema DbiSaveChanges: die BDE schreibt damit die Änderungen auf die Platte. Nach einem Post stehen die Daten auch ohne DbiSaveChanges in der Tabelle zur Verfügung.<BR>
        Gruß Thoma

        Comment


        • #5
          @Thomas: Mit dem Post schreibt die BDE die Änderungen noch längst nicht auf Platte, sondern die BDE hält sie selbst vor. Kann man leicht Testen: Anwendung mal mit Taskmanager abwürgen Zum definitiv auf Platte schreiben: Flushbuffers. Nichts desto trotz sollte der User sich über den Zeitpunkt des auf Platte schreibens auch keine Gedanken machen müssen und im allgemeinen ist das ja auch egal!<p>
          @Gunnar: Ausser einem Range könnte es auch noch ein Filter sein, der Schuld ist oder der eigene Code birgt noch welche automatischen Ereignisse, die Du übersehen hast. Probehalber kannst Du auch mal die DataSource abhängen (DisableControls). Vielleicht hat ja eine DB-Kompo (Grid oder so) unangenehme Seiteneffekt....<p>
          Schöne Grüße, Mario Noac
          Schöne Grüße, Mario

          Comment


          • #6
            &gt; Mit dem Post schreibt die BDE die Änderungen noch längst nicht auf Platte<BR><BR>

            genau das wollte ich damit sagen.<BR><BR>
            Gruß Thoma

            Comment

            Working...
            X