Toon posts:

[VB/sql server] kweerie voor laatste insert

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraagje. Is er een select query voor de laatste insert? Ik heb namelijk een tabel met twee colums. Eentje met een ID (auto encrement) en een naam. Als ik een insert doe, dan wil ik die graag boven aan in m'n listview hebben. enige suggesties?

Alvast bedankt voor reacties.

  • muis|IA
  • Registratie: Oktober 2001
  • Laatst online: 18-11-2022
select * from table order by ID desc;

:?

Een vergissing is menselijk maar om er een puinhoop van te maken heb je een computer nodig (met mij erachter)


Verwijderd

Topicstarter
Het ID is nog niet bekend (auto encrement)
dus hoe schrijf ik dan m'n select?
het kan niet op naam (dubbelenamen zijn namelijk mogelijk)

  • Glock
  • Registratie: November 2001
  • Niet online
Op vrijdag 24 mei 2002 16:42 schreef Helerion het volgende:
Het ID is nog niet bekend (auto encrement)
dus hoe schrijf ik dan m'n select?
het kan niet op naam (dubbelenamen zijn namelijk mogelijk)
waarom zou je ID moeten weten :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Als je gebruik maakt van autonummering kun je
code:
1
select @@identity from table

gebruiken.

https://fgheysels.github.io/


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Je ID is toch een veld uit de tabel?
Dus kun je er op query'en.

Dus werkt:
code:
1
2
3
SELECT ID, Naam
FROM TabelNaam
ORDER BY ID DESC

uitstekend.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Wie zegt er dat het hoogste ID altijd het laatste gaat zijn?

https://fgheysels.github.io/


  • Tassadar
  • Registratie: September 1999
  • Laatst online: 03-09 22:12

Tassadar

l33t h4x0r :)

Op zaterdag 25 mei 2002 11:10 schreef whoami het volgende:
Wie zegt er dat het hoogste ID altijd het laatste gaat zijn?
auto increment

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Dat zeg ik.
Op het moment dat er een nieuw record gepost wordt, wordt er automatisch een nieuw nummer gegenereerd, dat 1 hoger is dan het tot nu toe hoogste nummer.
Dit is ook het geval als er nummers verwijderd zijn in het midden.
Die worden dan niet opnieuw gebruikt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Ben je dat zeker dat nummers die weggelaten zijn later nooit meer gebruikt worden? Stel dat de auto-incr. aan zijn limiet is, wat gebeurd er dan denk je?

En wat als er tussen uw insert en de select max() die je doet, iemand anders een record insert?

ps: en mocht je het toch zo willen doen, waarom gebruik je geen select max() ipv alles te selecteren en dan nog eens te sorteren?

https://fgheysels.github.io/


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Maar wat is nu precies je bedoeling?

Aan de Max kom je volgens mij nooit.
Dus die open nummers worden niet meer gebruikt.
(weet ik (bijna) zeker)

Als iemand anders tussendoor een record toevoegt, dan komt dat record natuurlijk bovenaan te staan.

Met SELECT MAX selecteer je dus de laatst toegevoegde record.

Maar wil je nu alleen de laatst toegevoegde hebben?
Of een hele lijst met de laatst toegevoegde boveaan?

Je kunt ook een trigger maken op de tabel.
CREATE TRIGGER ON INSERT

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Ik denk dat de topicstarten het ID wil hebben van het record dat hij net geinserted heeft.

Dus als user A een record insert, wil hij het ID van het record dat user A heeft geinserted.
Als er tegelijk een user B een record insert, dan wil hij dat user B het id krijgt van zijn record dat hij heeft geinserted.

Volgens mij is een select max() en ook een select @@identity geen afdoende oplossing.

Wat wel een goeie oplossing zou zijn, is om een tabel bij te houden met daarin voor iedere tabel in uw DB een record. En per tabel hou je dan bij wat het laatste geinserte id is.
Als je een record in een tabel wilt inserten, ga je vlak voor de insert de tabel met ID's locken, het hoogste ID van de betreffende tabel ophalen, dat met 1 verhogen en die waarde terug gaan saven in die tabel. Dan heb je ook onmiddellijk het gewenste ID en zullen er volgens mij geen problemen zijn als de applicatie multi-user is.

https://fgheysels.github.io/


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Maar met een tabel voor het laatste ingevoerde record hou je toch nog steeds het probleem dat als er meteen een andere user een record toevoegt dat die dan in die speciale tabel komt te staan.

Ik ben er van overtuigd dat je na de insert meteen een select max kunt doen om de ID van de ingevoerde record te krijgen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Ik had er wel bij vermeld dat je die tabel (of dat record) moet locken als je een nieuwe ID bepaald.

https://fgheysels.github.io/


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Het antwoord is echt al gegeven hoor. Iedereen blaat maar door maar kennelijk leest niemand.

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Wat is het goede antwoord dan?

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:30
Het is toch niet omdat er al een antwoord gegeven is, dat er niet verder mag 'geblaat' worden over eventuele alternatieven?
mbravenboer:
2. Wat mij betreft moet een programmeur nooit tevreden zijn met zijn werk en altijd naar verbetering zoeken. Commercieel vast geen geslaagd plan, maar goed ;) . Herschrijven van je werk en het weggooien van code is fantastisch werk :o ;) .

https://fgheysels.github.io/


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Op zaterdag 25 mei 2002 14:40 schreef whoami het volgende:
Het is toch niet omdat er al een antwoord gegeven is, dat er niet verder mag 'geblaat' worden over eventuele alternatieven?
[..]
Voorzover ik weet is Bravenboer nog student ;)
Ik hoor hem over 2 jaar wel >:)

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Het goede antwoord is:
tabel exclusive locken.
Dan inserten, dan max bepalen (dat is je ID)
dan lock releasen (commit geven)
dan lekker doorgaan met de rest van je programma.

BTW onderwerp van dit topic komt me erg bekend voor. Search gebruikt?

Verwijderd

Topicstarter
Echt bedankt voor alle reacties!

Heb het volgende gedaan. Zoals het eigenlijk zou moeten is dat er in een tabel, met twee kolommen (waarvan 1 een id is), beide colommen uniek zijn. Waarom? nou omdat dit namelijk de regels zijn om een database consistent te houden. Echter is eht zo dat ik de database niet heb ontworpen en wil er zo weinig mogelijk aan veranderen. Dus nu check ik gewoon, bij het inserten, of de naam al bestaat. als hij dus niet bestaat kan ik een select doen op de naam. Deze is nu namelijk uniek.
Maar evengoed is het goed te weten hoe je dit soort dingen oplost. Dus bedankt voor alle reacties.
Pagina: 1