Results 1 to 12 of 12

Thread: ADO SQL insert open en terug

  1. #1

    Question ADO SQL insert open en terug

    In mijn programma maak ik gebruik van een ADO verbinding en de database wordt bewerkt met SQL. De database werkt onder SQL server. Het werkt geweldig en op wat onduidelijkheden na is het ook voor een amateur als ondergetekende goed te begrijpen en mee te werken.

    Nu ben ik tegen een schoonheidsfoutje aangelopen en zie er nog geen oplossing voor. Ik hoop dat iemand mij verder kan helpen.

    Met insert voeg ik een record toe in de tabel.
    Code:
    SQL.Text := 'Insert into NAW (Naam,VoorL) ' +
                        'Values(:Naam,:VoorL)';
    Parameters.ParamByName('Naam').Value := EditNaam.Text;
    Parameters.ParamByName('VoorL').Value := EditVoorL.Text;
    Try
       ExecSQL;
    Except
    
    end;
    Dit voert het uit maar er wordt geen resultaat teruggegeven.
    Code:
    Try 
      Open;
    Except
    end;
    Geeft wel resultaten terug maar nu staat de cursor op het eerste record. Nog niet erg met het commando LAST naar het laatste record en het is haast zeker dat dit het toegevoegde record is. Een wat onzekere oplossing maar het werkt. Tot ik een tabel gebruik welke in een andere volgorde wordt getoond. Sorteer ik op kolom twee en drie met
    Code:
      With ADOQ1 do
      Try
        DisableControls;
        SQL.Text := 'SELECT * FROM Artikelen ORDER BY ArtGroep, ArtPlaats';
        Try
          Open;
        Except
    
        end;
      Finally
        EnableControls;
      end;
    Dan staat de ID kolom ArtikelNr helemaal door elkaar en is LAST bijna zeker een ander record dan ik zojuist heb toegevoegd.

    De vraag is :
    Hoe kom ik op het zojuist toegevoegde record na een insert. Voor velen ligt de oplossing voorhanden. Voor mij binnenkort ook, hoop ik.

    Tot ziens en bedankt, resultaat of niet.
    Last edited by walterheck; 29-Feb-04 at 19:57.

  2. #2
    Zou je je code even netjes willen weergeven, zoals ook gevraagd is toen je deze thread aanmaakte? Wanneer het beter leesbaar is heb je meer kans op een antwoord.
    We adore chaos because we like to restore order - M.C. Escher

  3. #3
    In mijn programma maak ik gebruik van een ADO verbinding en de database wordt bewerkt met SQL. De database werkt onder SQL server. Het werkt geweldig en op wat onduidelijkheden na is het ook voor een amateur als ondergetekende goed te begrijpen en mee te werken.

    Nu ben ik tegen een schoonheidsfoutje aangelopen en zie er nog geen oplossing voor. Ik hoop dat iemand mij verder kan helpen.

    Met insert voeg ik een record toe in de tabel.
    Code:
    SQL.Text := 'Insert into NAW (Naam,VoorL) ' +
                        'Values(:Naam,:VoorL)';
    Parameters.ParamByName('Naam').Value := EditNaam.Text;
    Parameters.ParamByName('VoorL').Value := EditVoorL.Text;
    Try
      ExecSQL;
    Except
    
    end;
    Dit voert het uit maar er wordt geen resultaat teruggegeven.
    Code:
    Try 
      Open;
    Except
    
    end;
    Geeft wel resultaten terug maar nu staat de cursor op het eerste record. Nog niet erg met het commando LAST naar het laatste record en het is haast zeker dat dit het toegevoegde record is. Een wat onzekere oplossing maar het werkt. Tot ik een tabel gebruik welke in een andere volgorde wordt getoond. Sorteer ik op kolom twee en drie met
    Code:
    With ADOQ1 do
    Try
       DisableControls;
       SQL.Text := 'SELECT * FROM Artikelen ORDER BY ArtGroep, ArtPlaats';
      Try
        Open;
      Except
    
      end;
    Finally
      EnableControls;
    end;
    Dan staat de ID kolom ArtikelNr helemaal door elkaar en is LAST bijna zeker een ander record dan ik zojuist heb toegevoegd.

    De vraag is :
    Hoe kom ik op het zojuist toegevoegde record na een insert. Voor velen ligt de oplossing voorhanden. Voor mij binnenkort ook, hoop ik.

    Tot ziens en bedankt, resultaat of niet.

    Het internet is voor mij nog vreemder dan Delphi. Hekjes plaatsen las ik na de link te hebben aangeklikt. Straks kijk ik of het werkt en anders maak ik een heel nieuw bericht, want in dit kleine reply kader werken maakt het niet eenvoudiger.

    Tot ziens.

  4. #4
    Misschien moet je de locate functie gebruiken en dan zoeken op de laatst ingevoerde waardes EditNaam.Text en EditVoorL.Text Maar ook dit garandeer niet of je op de nieuwe toegevoegde record terecht komt.

    PS Je leest het bericht van marcel niet goed. Er staat duidelijk Druk op de knop # en niet typ #

  5. #5
    Allereerst bedankt aan degeen die het bericht leesbaar heeft gemaakt. Ik beloof bij deze dat het voortaan goed zal gaan.

    Van Link begrijp ik dat er geen standaard oplossing voor is, dat is jammer. Ook op deze manier blijft er een kans dat er meerdere records bestaan voor locate.

    Bedankt, ook de wetenschap dat het niet kan is rustgevend.

    Ronald Siemons.

  6. #6
    Ik weet niet of je bij het toevoegen van een nieuwe record ook een nieuwe uniek id genereert? Anders gebruik je locate met behulp van die nieuwe id.

  7. #7
    De tabel heeft een uniek ID dat ArtikelNr wordt genoemd.
    Dit nummer wordt aangemaakt na de SQL instructie ExecSQL. Maar is vervolgens niet in te lezen omdat er van ExecSQL geen resultaat terug komt. Pas na OPEN kan ik informatie uit de tabel lezen, dus ook de ArtikelID en dan staat de tabel op het eerste record.

    Ronald

  8. #8
    Ok omdat je MS SQL gebruikt kan je natuurlijk ook gebruik maken van de stored procedure. Je maakt een insert stored procedure in MS SQL die als resultaat een unieke id teruggeeft of anders -1 oid. Volgens mij is dat wel mogelijk (ben niet 100% zeker). Je voert aan de delphi kant de stored procedure uit. Misschien moet je maar daar naar eens kijken

  9. #9
    Hoi,

    Als je ID-veld een Autonumeriek veld is, kun je naar de MAX van je ID locate'n

    Wat je ook kunt doen,

    je Query gesorteerd ophalen met ArtikelNr ASC, je laatst ingevoerde is dan je hoogste ArtikelNr, je kunt dan na het openen van je query met .Last; naar het laatste record gaan.

    Je kunt ook gebruik maken van een ClientDataSet en dan een Append doen, dan komt ie automatisch onderaan en zie je hem ook op 't scherm.

    Succes

  10. #10
    Het is toch moeilijker dan ik dacht.

    In een programma met paradox tabellen maakte ik gebruik van een aparte tabel voor het aanmaken van de ID'ts, dit om gelijktijdig gebruik van de tabellen door meerdere gebruikers te verminderen. Het leek mij niet nodig in SQLServer maar ik zie dat het hier een oplossing had kunnen zijn. De Stored procedure ga ik bekijken en het voorstel om de tabel op het artikelNr te sorteren gebruik ik in een anderde tabel maar hier moet ik wel sorteren op anderel kolommen en eerste op kolom 1 en dan op kolom 2 en 3 te sorteren kost mischien veel tijd. Natuurlijk ga ik dit ook bekijken. De Clientdataset vindt ik een minder goed idee. Het is wellicht een oplossing maar het moet toch kunnen in SQL.

    Bedankt, Ronald

  11. #11
    Originally posted by Dees
    Hoi,
    Als je ID-veld een Autonumeriek veld is, kun je naar de MAX van je ID locate'n

    Wat je ook kunt doen,

    je Query gesorteerd ophalen met ArtikelNr ASC, je laatst ingevoerde is dan je hoogste ArtikelNr, je kunt dan na het openen van je query met .Last; naar het laatste record gaan.

    Je kunt ook gebruik maken van een ClientDataSet en dan een Append doen, dan komt ie automatisch onderaan en zie je hem ook op 't scherm.
    Deze methoden zijn niet aan te raden als er meerdere mensen tegelijk met je database werken.

    Als je geen SQL query gebruikt, maar het via de componenten doet (Table/Query.Insert) gaat het precies zoals jij wilt. De record die je insert blijft het huidige record en je kan de waarde van het autoinc meteen opvragen.
    We adore chaos because we like to restore order - M.C. Escher

  12. #12
    Ik heb een hoop om over na te denken.

    Ronald.

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Replies: 20
    Last Post: 28-Oct-04, 10:10
  2. Date-time in SQL (zonder Delphi parameters)
    By Baldo in forum Databases
    Replies: 16
    Last Post: 14-Jan-04, 16:23

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
  •