Results 1 to 6 of 6

Thread: Gegevens opslaan - TTable

  1. #1
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415

    Gegevens opslaan - TTable

    In een demo webapplicatie probeer ik gegeven, die m.b.v. een Html form zijn gewijzigt, weer op te slaan. Maar mee onderstaande code lukt dat niet. Hij geeft geen fout melding maar de wijziging zit er ook niet in.

    Verder slaat ik voor tijdelijk field[0] over want hier geeft hij de volgende melding:
    "Exception: EDBEngineError
    Message: Key violation."

    Database Paradox -> dbDemos -> Country.db

    Code:
    procedure TWebModule1.WebModule1WebActionItem7Action(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var
      n: integer;
    begin
      Table1.Open;
      try
        Table1.Edit;
        for n := 1 to Table1.FieldCount - 1 do
          Table1.Fields[n].Value :=
            Request.QueryFields.Values[Table1.Fields[n].FieldName];
        Table1.Post;
        Response.SendRedirect(Request.ScriptName + '/country');
      finally
         Table1.close;
      end; //try
    end;
    PS. Ik weet wel dat je beter niet de DBE en TTable hiervoor kan gebruiken, maar het is een demo voor mensen die geen ADO of ander DB hebben.
    Last edited by Anders; 28-Jun-02 at 17:09.
    Anders

    May your code compile!

  2. #2
    TDelphiDeveloper Baldo's Avatar
    Join Date
    Apr 2002
    Location
    Hellevoetsluis
    Posts
    498
    Het probleem zit hem in het feit dat je nu altijd het eerste record in de tabel aan het updaten bent. Als je table1.open doet, is het huidige record het eerste record in de dataset. Als je vervolgens table1.edit doet, bewerk je dus het eerste record. Vervolgens worden je wijzigingen op het eerste record gedaan. Als je vervolgens table1.post doet, worden die wijzigingen op het eerste record doorgevoerd.

    Om dit te voorkomen (met behoud van de huidig gekozen, ernstig af te raden, constructie) zul je na table1.open eerst het overeenkomstige record moeten zoeken alvorens table1.edit uit te voeren. Dit kun je doen door table1.locate('name', Request.QueryFields.Values['name'], []) te doen. Als deze method True teruggeeft kon de genoemde country gevonden worden.

    De constructie die je hier kiest is trouwens niet de mooiste, maar dat gaf je zelf al aan.

    Suuk6!
    Why is it that every time I think I'm holding all the cards, it turns out we're playing chess?
    Download Re-Depend, onmisbaar als je met packages build

  3. #3
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Hoi Baldo

    Hartstikke bedankt voor de oplossing. Ik zag gisteren gewoon niet wat er aan fout was, en toch wist ik dat er iet niet goed was. Dat heb je soms
    Ik heb het als volgt opgelost:

    Code:
    procedure TWebModule1.WebModule1WebActionItem7Action(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
    var
      n: integer;
    begin
      Table1.Open;
      try
        if not Table1.Locate('Name', Request.QueryFields.Values['Name'],[]) then
          Response.content := '<h2>Kan record niet opslaan!'
        else begin
          Table1.Edit;
          for n := 1 to Table1.FieldCount - 1 do
            Table1.Fields[n].Value :=
              Request.QueryFields.Values[Table1.Fields[n].FieldName];
          Table1.Post;
          Table1.Refresh;
          Response.SendRedirect(Request.ScriptName + '/country');
        end; // else
      finally
         Table1.close;
      end; //try
    end;
    De constructie die je hier kiest is trouwens niet de mooiste, maar dat gaf je zelf al aan.
    Bedoel je het gebruik maken van TTable of bedoel je de constructie van de code? Ik ben, zoals ik eerder zei mee eens dat je hier "normaal" en Query moet gebruiken. Maar om niet de aandacht weg te trekken van hoofd doel - Het uitleggen hoe je een cgi in Delphi kan maken, heb ik gekozen om het te doen met voor iedereen iets vertrouwt - namelijk de TTable.
    Als je de constructie van de code bedoel hoor ik het graag, want als beginnende Delphi programmeur moet ik nog veel leren.
    Anders

    May your code compile!

  4. #4
    Daar moet je altijd mee oppassen, voor je het weet wordt de demo een programma. Het grootste probleem hier is dat je een hele tabel gaat ophalen om de wijzigingen op te slaan.
    Marcel

  5. #5
    Senior Member Anders's Avatar
    Join Date
    Dec 2001
    Location
    Doetinchem
    Posts
    1,415
    Helemaal met eens.
    Maar ik wou iets maken dat iedereen van onze "Delphi Gebruikers Apeldoorn" groep zelf kan nabouwen en dat ze niet wordt afgeleid worden door moeilijke SQL kreten. Iedereen is bekend met de TTable en niet iedereen heeft de mogelijkhed om met ADO te werken - van daar
    Anders

    May your code compile!

  6. #6
    Ik snap 'm. Maar is het slim om iemand webapplicaties met databases te leren als ie nog niet weet hoe een database werkt? Ik ben dan zelf altijd een beetje bang voor wat ik de 'aapmethode' noem. Je leert mensen iets over te tikken zonder dat ze precies begrijpen wat er gebeurt.

    Begrijp me niet verkeerd, ik bedoel het niet zo kwaad, maar ik probeer mensen altijd pas iets te leren als ze er ook aan toe zijn. Programmeren op een gebied of in een omgeving waar je niet in thuis bent vind ik altijd gevaarlijk.
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. gegevens in het register opslaan
    By peterkiers in forum Algemeen
    Replies: 4
    Last Post: 28-Nov-04, 18:22
  2. Gegevens in een dialoogvenster opslaan
    By peterkiers in forum Algemeen
    Replies: 15
    Last Post: 24-Jun-04, 00:52
  3. gegevens in een listbox opslaan
    By Willem-Jan in forum Algemeen
    Replies: 11
    Last Post: 21-Apr-04, 12:43
  4. Gegevens van een Edit veld opslaan in een database
    By Control-X in forum Databases
    Replies: 4
    Last Post: 01-May-02, 23:56

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •