[SQL] combinatie tussen INSERT en UPDATE

Pagina: 1
Acties:
  • 355 views sinds 30-01-2008
  • Reageer

  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Ik ben op zoek naar het SQL-statement wat INSERT en UPDATE combineert.

Dus als een bepaalde waarde al in de tabel voorkomt dan moet die geupdate worden. Komt deze nog niet voor dan Inserten.

Ik weet dat hier iets voor is maar ik kan het nu niet vinden. |:(

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:10
Dit bestaat niet.

De basis-bouwstenen van SQL voor data-manipulatie zijn:
INSERT, UPDATE en DELETE.

Je zult het programmatorisch moeten oplossen.

https://fgheysels.github.io/


  • Paxlie
  • Registratie: Oktober 2000
  • Laatst online: 09-02 10:40

Paxlie

chaos en inslag

Ik vang in een applicatie ook een waarde af en bekijk dan of die al bestaat. Dit doe ik met de functie van Dlookup
code:
1
2
3
4
5
6
If IsNull(DLookup("Retournummer", "Retournummer", "Retournummer = [Forms].[invoer_retour].[Retour_vak]")) Then
doe de code
Else
MsgBox "deze waarde bestaat al"
exit sub
End If

uitgelegd:
code:
1
If IsNull(DLookup("row-naam", "tabelnaam", "where-statement")) Then

Wie werd waar wanneer geboren en waarom werd hij door wie hoe genoemd?
braque© zijn is een keuze


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Welke database?

Voor MySQL heb je REPLACE INTO maar ik weet niet of dat ANSI-SQL is.

http://www.mysql.com/doc/R/E/REPLACE.html

Programmer - an organism that turns coffee into software.


  • noot101
  • Registratie: Februari 2002
  • Laatst online: 10-01 13:54
Op vrijdag 17 mei 2002 12:06 schreef LuCarD het volgende:
Welke database?

Voor MySQL heb je REPLACE INTO maar ik weet niet of dat ANSI-SQL is.

http://www.mysql.com/doc/R/E/REPLACE.html
Het is voor MySQL bedoeld ja. En dit is het statement waarvan ik dus wist dat die bestond, maar nu zie ik dat die dus niet helemaal voldoet aan wat ik wil doen.
Toch denk ik dat ik hier voldoende mee vooruit kan.
THX :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ikzelf voer altijd de update uit, kijk vervolgens hoeveel rijen er geupdate zijn. Als dit er nul zijn alsnog een insert uitvoeren. Aangezien je al een of een combinatie van velden uniek hebt (anders kon je immers de update niet doen) heb je geen last van race problemen aangezien 2 dezelfde inserts tegelijkertijd een 'not unique' foutmelding geven (die eventueel ook weer af te vangen is).

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


  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Voor dit soort problemen heb ik een functie gemaakt die zelf alle velden opvraagt uit de database, vervolgens kijkt of het veld van de primary key een waarde heeft. Op basis daarvan wordt het een INSERT of een UPDATE.

Als een update een aantal rijen van 0 teruggeeft, kan er ook iets anders aan de hand zijn toch, Janoz?

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


  • Martijn02
  • Registratie: September 2000
  • Laatst online: 13:48

Martijn02

/* No Comment */

Ja er kan een fout in je query zitten, maar daar ga je natuurlijk niet vanuit, want je hebt alle verboden tekens in je queries natuurlijk netjes afgevangen... Toch?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op vrijdag 17 mei 2002 13:18 schreef bigtree het volgende:

Als een update een aantal rijen van 0 teruggeeft, kan er ook iets anders aan de hand zijn toch, Janoz?
Tuurlijk, maar alle andere fouten die op zouden kunnen treden zijn op andere manieren al af te vangen (connectie wel goed, query wel juist uitgevoerd enz enz) dit betekent dat de laatst mogelijke optie overblijft :)
Op vrijdag 17 mei 2002 14:25 schreef Martijn02 het volgende:
Ja er kan een fout in je query zitten, maar daar ga je natuurlijk niet vanuit, want je hebt alle verboden tekens in je queries natuurlijk netjes afgevangen... Toch?
Dat wordt afgevangen doordat mysql_query false teruggeeft :) (addslashes is uiteraard standaard :), danwel door magic_gpc of doordat het hard in de code staat)

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


Verwijderd

Is het trouwens een beetje ok als je eerst een DELETE uitvoert en dan een INSERT? Zo doe ik dat, maar ik ben dan ook niet echt een programmeur.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op vrijdag 17 mei 2002 15:53 schreef RedDot het volgende:
Is het trouwens een beetje ok als je eerst een DELETE uitvoert en dan een INSERT? Zo doe ik dat, maar ik ben dan ook niet echt een programmeur.
Beetje irri als je dat doet met autonummer velden....

Programmer - an organism that turns coffee into software.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op vrijdag 17 mei 2002 15:58 schreef LuCarD het volgende:

[..]

Beetje irri als je dat doet met autonummer velden....
Een autonummerveld in deze context lijkt me wat onlogisch. De data zou op zichzelf al uniek identificeerbaar zijn. Daar is geen extra id veld voor nodig.

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


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

robjanssen

Software Developer

Eerst een Delete en daarna een INSERT kan wel.
Maar je kunt toch ook eerst een SELECT doen en dan daarna afhankelijk van of er een record gevonden is, een INSERT of UPDATE.
Pagina: 1