Toon posts:

DELETE FROM ..... WHERE ??? Het werkt niet en snap niet??

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben een form gemaakt waar je iets kunt invoeren in een DB. Nu wil ik dit ook weer weghalen aan de hand van de automatisch gegenereerde id die in de database zit. Deze heb ik uit gelezen en wil ik dan verwijderen met deze SQL code:

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = '" & identificatie "')")

maar het werkt niet, wat doe ik fout!!!

Verwijderd

die '" moet volgens mij " " zijn :?

Verwijderd

en volgens mij moet er ook een waarde tussen die tekens staan :?

kan het mishebben...

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Volgens mij moet je opgeven wat je wilt deleten. Voorbeeld:
DELETE * FROM...
DELETE column FROM...

en achter identificatie nog even een &

Ja dat laatste moet het wel zijn :)

Verwijderd

Topicstarter
Ik heb het als volgt gedaan.

Dim identificatie
identificatie = Request.QueryString("value")

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = ' "identificatie ") ")

maar hij pakt die variabele niet. De melding die ik krijg in explorer is:

Soort fout:
Compilatiefout Microsoft VBScript (0x800A03EE)
')' wordt verwacht
/form2db/form.asp, line 112, column 77

Verwijderd

Topicstarter
klopt, ik was vergeten * in te vullen tussen delete .. from, maar het werkt nog niet

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
Verwijderd schreef op 26 augustus 2002 @ 13:34:

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = '" & identificatie & "')")

maar het werkt niet, wat doe ik fout!!!

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
edit: excuses, dubbelpost

Verwijderd

Topicstarter
nu is mijn SQL code geworden:
set strSQL = ObjectVerbinding.Execute("DELETE * FROM factures WHERE ( ID = '" & identificatie & "')")

maar nu krijg ik de volgende fout!:


Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC Microsoft Access-stuurprogramma] Gegevenstypen komen niet overeen in criteriumexpressie.
/form2db/form.asp, line 112

  • fatbenny
  • Registratie: April 2001
  • Laatst online: 07-03-2023
dan moet je die 2 single quotes ' weghalen

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = " & identificatie & ")")

Verwijderd

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = ' "identificatie ") ")
Mist daar niet ergens nog een ' .

Moeten die niet altijd in even aantallen voorkomen?

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Wordt het niet gewoon
code:
1
"DELETE FROM Blaat WHERE ID = " & Identification

Kweet niet of dat zomaar kan trouwens.. een integer aan een string plakken, ben niet zo'n asp guru ;)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:55

gorgi_19

Kruimeltjes zijn weer op :9

Dat kan wel, want je maakt een SQL-statement ervan en je database weet niet of het oorspronkelijke type een string of integer was..

Deze voert gewoon de statement 'as is' uit.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

fatbenny heeft helemaal gelijk, het veld ID is waarschijnlijk een numerieke veld en dan kan je dat niet met een string vergelijken.
Verwijder dus die 2 single quotes.

Verwijderd

Probeer een van deze 2 eens:
1: "DELETE FROM factures WHERE factures.[ID]='" & identificatie & "'"
2: "DELETE FROM factures WHERE factures.[ID]=" & identificatie

(copy & paste maar ff om typfoutjes te voorkomen)

Verwijderd

Overigens zie ik dat je het volgende doet
code:
1
2
3
4
Dim identificatie
identificatie = Request.QueryString("value")

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = ' "identificatie ") ")


In ASP kun je net zo goed dit doen, met het oog op schonere en snellere code.

code:
1
set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID =  " & Request.QueryString("identificatie") & "")


Zoals al gezegd, bij het verwijzen naar een recordid, verwijs je naar een integer. Bij verwijzingen naar numerieke waarden (let op: moet dus ook in een numerieke column staan in de database) moet je geen singlequotes om je value gebruiken.

Bij het verwijzen naar een string (reeks tekens ongeacht numeriek of alfabetisch) moet je altijd singlequotes gebruiken. Singlequotes moeten ook gebruikt worden voor date/time values.

Enige aandacht overigens voor het afsluiten van het statement met 2x een ". Daar gaan heel veel lui de fout in bij ASP.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 26 augustus 2002 @ 15:38:
Overigens zie ik dat je het volgende doet
code:
1
2
3
4
Dim identificatie
identificatie = Request.QueryString("value")

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID = ' "identificatie ") ")


In ASP kun je net zo goed dit doen, met het oog op schonere en snellere code.

code:
1
set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ( ID =  " & Request.QueryString("identificatie") & ")


Zoals al gezegd, bij het verwijzen naar een recordid, verwijs je naar een integer. Bij verwijzingen naar numerieke waarden (let op: moet dus ook in een numerieke column staan in de database) moet je geen singlequotes om je value gebruiken.

Bij het verwijzen naar een string (reeks tekens ongeacht numeriek of alfabetisch) moet je altijd singlequotes gebruiken. Singlequotes moeten ook gebruikt worden voor date/time values.
Ik zou juist zijn manier gebruiken. Het ziet er een stuk netter uit omdat je niet zo'n lange regel code krijgt en als je eventueel later de identificatie nog een keer nodig hebt heb je al een variable die ernaar toe verwijst

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Wat is het verschil tussen het gebruik van Request.Querystring("variable") en het gebruik van een variabele in aanroep? Juist helemaal niets, met het voordeel dat je niet nog eens extra de variabele gaat definiëren als variabele mbv Dim MyVar. Is gewoon geheugengebruik extra die niets oplevert.

Enige waarvoor het nuttig kan zijn is voor extra validatie. Ik kan me voorstellen dat je deze niet in je SQL wilt coderen vanwege de overzichtelijkheid. Maar zolang er geen controle nodig is, zou ik hem persoonlijk rechtstreeks gebruiken ipv dubbelop toewijzen.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Effe een opmerking tussendoor over de syntax van het DELETE statements:

"DELETE * FROM [table]" is misschien toegestaan in MySQL, maar is absoluut niet bruikbaar in andere RDMS-en. "DELETE [column] FROM [table]" is zelfs grote onzin. Hoe kun je nou van een record slechts één kolom verwijderen.

Daarom zijn voor een DELETE statements de volgende mogelijkheden:
"DELETE [table] FROM [table] AS t WHERE t.ID = 1 "
en
"DELETE [table] WHERE ID = 1"
ook mogelijk in veel RDMS-en
"DELETE FROM [table] WHERE ID = 1"

De FROM kan eventueel gecombineerd/uitgebreid worden met JOIN's.

Misschien klinkt dit enigszins gefrusteerd, dat is niet de bedoeling. Er was wel sprake van grote verbijstering over de erg vreemde DELETE statements, die ik hier af en toe zie staan.

Never underestimate the power of


Verwijderd

Volgens mij moet het als volgt zijn

set strSQL = ObjectVerbinding.Execute("DELETE FROM factures WHERE ID = '" & identificatie & "'")

  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
Ik heb de thread even snel doorgelezen, maar ik heb niet kunnen achterhalen om welke database het hier gaat. Mijn punt is dat bij 9 van de 10 databases een tooltje wordt meegeleverd waar je zo sql-statements direct aan de database kan voeren (dus zonder een programmeertaal).

Het voordeel hiervan is dat je zo veel sneller tot een werkend sql-statement komt en dat vervolgens gebruikt in een programmeertaal naar keuze :)

Persoonlijk vind ik dit iets handiger werken dan in een programmeeromgeving, maar ieder het zijne natuurlijk :)

Greetz ProgrammerX

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 26 augustus 2002 @ 15:43:
Wat is het verschil tussen het gebruik van Request.Querystring("variable") en het gebruik van een variabele in aanroep? Juist helemaal niets, met het voordeel dat je niet nog eens extra de variabele gaat definiëren als variabele mbv Dim MyVar. Is gewoon geheugengebruik extra die niets oplevert.

Enige waarvoor het nuttig kan zijn is voor extra validatie. Ik kan me voorstellen dat je deze niet in je SQL wilt coderen vanwege de overzichtelijkheid. Maar zolang er geen controle nodig is, zou ik hem persoonlijk rechtstreeks gebruiken ipv dubbelop toewijzen.
Juist om de reden tot validatie zou ik hem inderdaad in een var zetten. Als je hem direct uit de query string zou gebruiken zou iemand ook b.v. als query string mee kunen geven "12 Delete * From Facturen" ofzo en dan heb je toch een redelijk security bug

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

rwb schreef op 26 augustus 2002 @ 16:18:
Juist om de reden tot validatie zou ik hem inderdaad in een var zetten. Als je hem direct uit de query string zou gebruiken zou iemand ook b.v. als query string mee kunen geven "12 Delete * From Facturen" ofzo en dan heb je toch een redelijk security bug
En dat zijn juist zaken die altijd om validatie behoeven.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Inderdaad daarom zeg ik dat het altijd wel slim is om een variable daarvoor te gebruiken

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Probeer die 2 van mij nou maar gewoon en post of het lukt :9 :P

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 23:34

Peetman

Tjah....

Ik heb het antwoord al gelezen ergens in deze thread, dus dat zal wel lukken.

Ik zelf zet mijn sqlquerie altijd even in een losse variabele. bijv sqltemp
als je die dan in je website afdrukt kan je zien of je querie al enigzins klopt. Dat is vooral handig bij het combineren van een hoop strings en variabelen door een &.

Het is wat overkill misschien, maar het kan een hoop problemen voorkomen.

Verwijderd

Heel goed cameodski, er worden hier hele vreemde delete statements gebruikt...

wellicht is het handiger dat sommigen eerst eens SQL leren, en dan pas SQL gebruiken... scheelt een boel.... :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
Euh DELETE FROM moet zonder * ertussen :/

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Begrijp ik het nou goed?
is ID een String in je Dbase ?

lijkt mij niet h`e? want volgens mij moet je hem buiten '' houden

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 26 augustus 2002 @ 15:43:
Wat is het verschil tussen het gebruik van Request.Querystring("variable") en het gebruik van een variabele in aanroep? Juist helemaal niets
Hmm, daar ben ik het niet helemaal mee eens.

Allereerst vind ik het juist duidelijker om te werken met een eigen gedefinieerde variabele. Het geeft imho iig aan dat je "betekenis" geeft aan de waarde ipv te werken met alleen de waarde uit de request. Maar dat is natuurlijk zo persoonlijk als maar zijn kan en bovendien uitgelegd in compleet onbegrijpelijk Nederlands vrees ik (tijd voor :Z), zodat dit argument eigenlijk meteen vergeten kan worden ;)

Maar punt 2 is waarschijnlijk belangrijker. En dat is dat er wel een verschil zit tussen beide manieren van werken. Er is namelijk een verschil tussen het aanroepen van een var en het opvragen van een property uit een object. In het ene geval vraag je een lokale var op en in het tweede geval doe je een lookup in de properties collection van het object om de waarde te krijgen. Dus er is een verschil, of je het merkt is een tweede ;)
en ook de tweede uitleg verdient geen schoonheidsprijs, maar ik hoop dat de strekking duidelijk (en geen complete onzin :P) is


oh ja, laat ook de recordset maar weg bij een delete (of insert/update) statement, daar doe je normaalgesproken toch niets mee
O-) :P @ Gert ;)

Today's subliminal thought is:


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Zoveel commentaar en niemand die hem er op wijst dat hij een recordset probeert te peuteren met een delete statement. Gewoon de Set strSql = weglaten. :)

Heeft niks met t probleem te maken maar als je toch commentaar op de code hebt kan dit er ook wel bij. ;)
Pagina: 1