[SQL][ASP] als een waarde al bestaat, ga terug

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:40
Hoi,

ben nu al 3 of 4 uur mijn hoofd aan het breken over het volgende:

iemand voert wat in een form waarde, die geinsert moet worden. Alleen die formwaarde moet uniek zijn. Hoe kan ik dit nou het beste aanpakken?

Ben op dit moment tot het gefrustreerde aan toe, kan niks vinden op inet, hier ook niet (misschien zoek ik wel verkeerd) maar als iemand me hier verder kan helpen ben ik wederom een gelukkig man! :)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Je doet een select in uw tabel op die waarde. Indien de query een rij teruggeeft, dan bestaat de waarde al dus dan insert je niets. Anders insert je wel.

Of je kan ook een unique index op dat veld in uw tabel leggen, je insert gewoon uw rij en vangt een eventuele exception af die geraised wordt als de unique index constraint overtreden wordt. In dat geval onderdruk je de foutboodschap en geef je uw eigen foutboodschap.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:40
uw?? :)

verder: het is helaas niet mogelijk om een primary key aan te maken want die bestaat al. (Id van het record)

Verder, ben het nog een beetje aan het leren, zou je misschien iets preciezer kunnen zijn?

Het gaat trouwens om MS SQL (mocht dat nog verschil uit maken)

Heart..pumps blood.Has nothing to do with emotion! Bored


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

MS SQL moet ook wel unique keys hebben die je naast de primary key kunt hebben.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Op woensdag 13 maart 2002 17:44 schreef TeeDee het volgende:
uw?? :)

verder: het is helaas niet mogelijk om een primary key aan te maken want die bestaat al. (Id van het record)
Je kan ook nog op ieder ander veld een unieke index leggen. Dat veld hoeft daarvoor geen primary key te zijn.
Verder, ben het nog een beetje aan het leren, zou je misschien iets preciezer kunnen zijn?
Voor je uw insert doet, ga je een query uitvoeren die gaat gaan kijken of er al een record bestaat met die waarde, een gewone select query dus. Indien die query resultaat geeft, dan ga je niets gaan inserten. Geeft die query geen rijen terug, dan kun je wel een record gaan inserten, want er bestaat nog geen record met die value.

Als je het concept van de unique index doet:
gewoon hoedanook uw record 'proberen' te inserten. Bestaat er al een record met die waarde dan zal de unique index op dat veld ervoor zorgen dat het record niet kan geinserted worden en ervoor zorgen dat er een foutboodschap getoond wordt.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 14:40
/edit:

volgens mij iets gevonden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
<%
  Dim strSQL
  strSQL = "SELECT * FROM MyTable WHERE username = '" & _
        Request.Form("username") & "'"
  Set rs = db.Execute()

  If rs.EOF Then
    'Now do the insert
  Else
    Response.Write "Record exists"
  End If
%>

Volgens mij zou dit moeten werken (ik heb de dbwaarde van de username wel weer omgebouwd naar char :))

/edit:
Yup, het werkt ;) hij checkt nu alleen op gebruikersnaam en als die al bestaat -> hoppa, terug en opnieuw! :)

thanks all

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op woensdag 13 maart 2002 17:49 schreef whoami het volgende:
Voor je uw insert doet, ga je een query uitvoeren die gaat gaan kijken of er al een record bestaat met die waarde, een gewone select query dus. Indien die query resultaat geeft, dan ga je niets gaan inserten. Geeft die query geen rijen terug, dan kun je wel een record gaan inserten, want er bestaat nog geen record met die value.
Het werkt mischien, maar waneer iemand dit als oplossing bij mij zou komen aandragen, zou ik het toch afkeuren. Dit KAN namelijk mis gaan. De kans is natuurlijk klein, maar elke programmeur is natuurlijk op de hoogte van Murphy's law toch?

Een juistere manier is de velden die uniek moeten zijn, ook op uniek in de DB te zetten (dit zou je eigenlijk altijd moeten doen om de integriteit van je DB te kunnen behouden). Waneer je nu een al bestaande naam wil inserten krijg je een foutmelding terug van de DB. Deze kun je netjes afvangen en vervolgens kun je de gebruiker op de hoogte stellen dat hij een andere waarde zal moeten kiezen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

een read en write lock aanvragen voor de hele tabel als je dit gaat doen. Anders is het theorisch mogelijk omdat het multiuser is, dat er 2 dezelfde gebruikersnamen in de database komen te staan. Dit zal niet zo'n vaart lopen, maar als je ooit nog te maken krijgt met veel select en inserts op 1 tabel in korte tijdseenheden, dan gaat het wel een rol spelen.

maar volledig eens met Janoz. Waardes die Unique moeten zijn , als unique specificeren.

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
ALs je inderdaad sqlserver gebruikt kan je dit gewoon in 1 stored procedure regelen:

Hier stukje uit stored procedure hoe ik het gedaan heb:

Selecteer hier record om te kijken of het bestaat
IF @@ROWCOUNT = 0
Begin
Doe hier je insert
End
Pagina: 1