[VB/ADODB] Parameterized Query wil niet lukken

Pagina: 1
Acties:

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
ik heb in mijn code zoiets als hieronder. Hij insert wel in de tabel, maar geeft geen waarde mee. Het gaat in dit geval alleen om de waarde "blaat" omdat Id auto_increment

Visual Basic:
1
2
3
4
query = "INSERT INTO merken (Id, merk) VALUES (@id, @blaat)"
mysqlCom.CommandText = query
mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adInteger, adParamInput)
mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "blaat")


Ik kom er maar niet achter wat ik fout doe.

ik krijg geen foutmeldingen oid.

Multimonitor is relax :P


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Als Id autonummering is, mag je er ook geen waarde aan toekennen. Laat die paramater maar eens helemaal weg, dan krijg je dus
SQL:
1
query = "INSERT INTO merken (merk) VALUES (@blaat)"

Lijkt me in ieder geval dat het hier in zit. Als het nu nog niet lukt, geef dan eens iets meer info over de omgeving enzo...

My personal website


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
OZ-Gump schreef op 06 januari 2004 @ 00:38:
Als Id autonummering is, mag je er ook geen waarde aan toekennen. Laat die paramater maar eens helemaal weg, dan krijg je dus
SQL:
1
query = "INSERT INTO merken (merk) VALUES (@blaat)"

Lijkt me in ieder geval dat het hier in zit. Als het nu nog niet lukt, geef dan eens iets meer info over de omgeving enzo...
dit werkt ook niet

hier nog wat meer code. Ik maak verbinding met een mySQL DB

Visual Basic:
1
2
3
4
5
6
7
8
9
10
    Set mysqlCom = New ADODB.Command
    query = "INSERT INTO merken (merk) VALUES (@blaa)"
    mysqlCom.CommandText = query
    mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "WoeiMerk")
    
    Set conn = New ADODB.Connection
    conn.ConnectionString = connStr
    
    conn.Open
    conn.Execute query


edit: code aangepast

[ Voor 9% gewijzigd door MeIsTwisted op 06-01-2004 10:23 ]

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wat is niet werken?

Je hebt blijkbaar nog altijd niet gedaan wat OZ-Gump je aanrade trouwens;
het DBMS gaat zelf wel gaan zorgen voor de waarde van dat autonummer-veld. Je hoeft het dus niet op te geven in je query, en je moet er dus ook geen parameter van maken:

code:
1
query = "INSERT INTO merken (merk) VALUES (@blaa)";

https://fgheysels.github.io/


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 10:20:
Wat is niet werken?

Je hebt blijkbaar nog altijd niet gedaan wat OZ-Gump je aanrade trouwens;
het DBMS gaat zelf wel gaan zorgen voor de waarde van dat autonummer-veld. Je hoeft het dus niet op te geven in je query, en je moet er dus ook geen parameter van maken:

code:
1
query = "INSERT INTO merken (merk) VALUES (@blaa)";
hmm, dat stond nog in de oude code, vergeten uit te halen, maar zonder dat doet hij het nog steeds niet

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Wat is 'hij doet het niet'?
Krijg je een foutmelding, zoja, welke, etc.....

Anders lees je even de P&W Quickstart.

https://fgheysels.github.io/


Verwijderd

Ik denk dat het ligt aan het feit dat je je parameter niet goed maakt.....

mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "blaat")

waar geef je je parameter op dan?

dat moet voor de komman bij adVarChar...... dus

mysqlCom.Parameters.Append mysqlCom.CreateParameter(jouwParameterWaarde, adVarChar, adParamInput, 100, "jouwWerkelijkeWaarde")

Hier doe je dus dingen dubbel.....

Set mysqlCom = New ADODB.Command
query = "INSERT INTO merken (merk) VALUES (@blaa)"
mysqlCom.CommandText = query
mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "WoeiMerk")

Set conn = New ADODB.Connection
conn.ConnectionString = connStr

conn.Open
conn.Execute query


Je werkt OF met een parameter en voer dan een command-object uit OF je werkt met een INSERT statement maar NIET beiden!!
Wat heeft dat voor zin dan, eerst je INSERT statement opgeven en dan een parameter ---> INPUT erbij opgeven?


Richard

[ Voor 47% gewijzigd door Verwijderd op 06-01-2004 10:29 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 10:26:
Wat is 'hij doet het niet'?
Krijg je een foutmelding, zoja, welke, etc.....

Anders lees je even de P&W Quickstart.
hij geeft geen foutmelding (zoals vermeld in openingspost)
hij voegt alleen maar een leeg record toe

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 06 januari 2004 @ 10:26:
Ik denk dat het ligt aan het feit dat je je parameter niet goed maakt.....

mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "blaat")

waar geef je je parameter op dan?

dat moet voor de komman bij adVarChar...... dus

mysqlCom.Parameters.Append mysqlCom.CreateParameter(jouwParameterWaarde, adVarChar, adParamInput, 100, "jouwWerkelijkeWaarde")
Dat vroeg ik me ook al af, maar goed, ik ken geen VB.
Is het trouwens niet zo dat er -eventueel afhankelijk van de DB- niet naar de naam van de parameter, maar naar de volgorde wordt gekeken?

https://fgheysels.github.io/


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
Verwijderd schreef op 06 januari 2004 @ 10:26:
Ik denk dat het ligt aan het feit dat je je parameter niet goed maakt.....

mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "blaat")

waar geef je je parameter op dan?

dat moet voor de komman bij adVarChar...... dus

mysqlCom.Parameters.Append mysqlCom.CreateParameter(jouwParameterWaarde, adVarChar, adParamInput, 100, "jouwWerkelijkeWaarde")
nope, doet hij ook niet, had ik ook al geprobeerd

Multimonitor is relax :P


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 10:28:
[...]


Dat vroeg ik me ook al af, maar goed, ik ken geen VB.
Is het trouwens niet zo dat er -eventueel afhankelijk van de DB- niet naar de naam van de parameter, maar naar de volgorde wordt gekeken?
er wordt in dit geval maar 1 veld ingevuld, dus er valt weinig te wijzigen aan de volgorde. Daarom snap ik het ook niet :/

Multimonitor is relax :P


Verwijderd

Klopt, er wordt ook naar de volgorde van parameters gekeken.

Normaal werk ik met VB en SQL en werkt het op 2 manieren..

1. Of je maakt een "stored procedure" in je database en die spreek je aan door een command object te maken die die procedure opstart. Geef dan parameters mee met je obect.

2. Je maakt een INSERT op basis van een Command object of een Recordset.
zoals anderen al zeiden "INSERT INTO tblJouwTabel (kolomnaam1, kolomnaam2) VALUES(waarde1, waarde2) --> met of zonder quotejes, afhankelijk van txt of int waarden!

Richard

[edit]

Probeer dit eens
Dim objParam As ADODB.Parameter
Dim mysqlCom = New ADODB.Command

Set mysqlCom = New ADODB.Command
mysqlCom.CommandType = adCmdStoredProc
mysqlCom.CommandText = query
mysqlCom.Parameters.Append mysqlCom.CreateParameter(, adVarChar, adParamInput, 100, "WoeiMerk")

Set conn = New ADODB.Connection
conn.ConnectionString = connStr

conn.Open
conn.Execute query

[ Voor 31% gewijzigd door Verwijderd op 06-01-2004 10:37 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
Verwijderd schreef op 06 januari 2004 @ 10:32:
Klopt, er wordt ook naar de volgorde van parameters gekeken.

Normaal werk ik met VB en SQL en werkt het op 2 manieren..

1. Of je maakt een "stored procedure" in je database en die spreek je aan door een command object te maken die die procedure opstart. Geef dan parameters mee met je obect.

2. Je maakt een INSERT op basis van een Command object of een Recordset.
zoals anderen al zeiden "INSERT INTO tblJouwTabel (kolomnaam1, kolomnaam2) VALUES(waarde1, waarde2) --> met of zonder quotejes, afhankelijk van txt of int waarden!

Richard
Ik heb het nu op de 2e manier gedaan tot nu toe, maar is best wel link ivm ' en ` tekens. Toen las ik in de faq over Parametrized Queries en leek me dat toch wel wat beter.

Multimonitor is relax :P


Verwijderd

Probeer dit eens
Dim objParam As ADODB.Parameter
Dim mysqlCom = New ADODB.Command

Set mysqlCom = New ADODB.Command
mysqlCom.CommandType = adCmdStoredProc
mysqlCom.CommandText = query
mysqlCom.Parameters.Append mysqlCom.CreateParameter(jouwParameter, adVarChar, adParamInput, 100, "WoeiMerk")

Set conn = New ADODB.Connection
conn.ConnectionString = connStr

conn.Open
conn.Execute query

[ Voor 4% gewijzigd door Verwijderd op 06-01-2004 10:38 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
nope, werkt ook niet

Multimonitor is relax :P


Verwijderd

Heb je al gede-bugt?

Laat je proc. stoppen op het punt waarop je je command execute en vraag de waarde op in het immediate scherm met ? jouwParameter <enter>

ik hoor het wel weer!

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
als ik
code:
1
Debug.Print mysqlCom.CommandText

in mijn code zet, dan geeft hij dit weer.
code:
1
{ call INSERT INTO merken (merk) VALUES (@blaa)(?) }


hij herkent @blaa waarschijnlijk niet als parameter als ik het zo zie

Multimonitor is relax :P


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Of het probleem in het volgende zit weet ik niet, maar het zou er zeker mee te maken kunnen hebben:

Je DIMt een ADODB.Command, daar voeg het een en ander aan toe zoals 'n parameter etc. en wat doe je vervolgens? Je gebruikt NOOIT de Command die je geDIMd hebt, maar voert de query rechtstreeks uit op de connection die je opgezet hebt! Zo kan natuurlijk nooit de juiste parameter gevonden worden: die is bij je connectionstring helemaal niet bekend! Die staat alleen in je Command die je wel netjes gedeclareerd hebt, maar die er verder bij het uitvoeren van de query maar een beetje bijhangt...

My personal website


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
In dat stukje in de FAQ mbt parametrized queries, is uitgegaan van een syntax die werkt in .NET (C#, en VB.NET).
Echter, er staat ook in vermeld dat je eens moet nagaan hoe het in de taal die jij gebruikt (VB6) moet gebruikt worden.
Ik heb een sterk vermoeden dat parameters met een naam niet werken in VB6.
In Delphi wordt een parameter bv herkend doordat er een dubbele punt voor de parameter - naam staat.
Probeer eens een ? te gebruiken als placeholder voor je parameter:
code:
1
sSQL = "INSERT INTO tabel (veld) VALUES ( ? )

https://fgheysels.github.io/


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 11:03:
In dat stukje in de FAQ mbt parametrized queries, is uitgegaan van een syntax die werkt in .NET (C#, en VB.NET).
Echter, er staat ook in vermeld dat je eens moet nagaan hoe het in de taal die jij gebruikt (VB6) moet gebruikt worden.
Ik heb een sterk vermoeden dat parameters met een naam niet werken in VB6.
In Delphi wordt een parameter bv herkend doordat er een dubbele punt voor de parameter - naam staat.
Probeer eens een ? te gebruiken als placeholder voor je parameter:
code:
1
sSQL = "INSERT INTO tabel (veld) VALUES ( ? )
ik had dat ook al geprobeerd, maar werkte ook niet. Als ik dat doe, krijg ik de melding:
SQLBindParameter not used for all parameters

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Ben je dan wel zeker dat je alle parameters gebinded had?

https://fgheysels.github.io/


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
ja, er is er ook maar 1

Multimonitor is relax :P


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

is mijn vorige post te onduidelijk?

De query wordt rechtstreeks op de SQL connectie uitgevoerd zonder ook maar een parameter te declareren!
De command die gedeclareerd wordt, wordt niet gebruikt waarvoor hij is aangemaakt.

Edit:
Dan zal ik er nog bij zetten dat je de connection van de Command kunt instellen op de door jou aangemaakt connectiestring door de property van de command daarop in te stellen (MySQLCom.Connection = conn) en dan de aangemaakte command kunt uitvoeren door MySQLCom.execute aan te roepen.
(weet niet 100% zeker of die function execute heet, volgens mij wel)

[ Voor 40% gewijzigd door OZ-Gump op 06-01-2004 11:24 ]

My personal website


Verwijderd

nope, niet waar....nix vraagteken...sorry ;)

Ale je precies hebt gedaan wat ik zei, heb je ook je parameter gedeclareerd --> dim objParam As ADODB.Parameter.

Daarna kun je die gewoon gebruiken door er waarden aan toe te voegen


hier een voorbeeld uit mijn code die 'zekers te weten werkt" :+
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   On Error GoTo DebugIt
    Dim objParam As ADODB.Parameter
    Dim objSPRs As ADODB.Recordset
    Dim objSPComm As ADODB.Command
    Set objSPComm = New ADODB.Command
    With objSPComm
        .ActiveConnection = gobjConn
        .CommandType = adCmdStoredProc
        .CommandText = "insertClientSP"
    End With
       
    'Zoeknaam
    Set objParam = objSPComm.CreateParameter("Zoeknaam", adVarChar, adParamInput, 50, txtZoeknaam.Text)
    objSPComm.Parameters.Append objParam

    objSPComm.Execute
    Set objSPComm = Nothing
    Unload Me


Doordat je je parameter hebt "toegekend" aan je objSPComm hoef je die niet nogmaals door te geven bij de Execute van je object.
Zo kun je diverse parameters onder elkaar 'toewijzen' aan je object....nix aan de hand, werkt perfecto !

Wat je niet gedaan hebt (naar mijn mening) is DEBUGGEN. Debuggen doe je niet met een msgBox maar door in je scherm met je muis bij de juiste regel een 'rode' stip te zetten (in de grijze kantlijn!!!) --> heb je vast wel eens gezien. Druk je dan op F8 of je laat je proggy runnen dan stopt ie bij die regel. Dan kun je in je immediate window allerlei zaken opvragen die op dat moment door je programma in het geheugen van je pc zijn gemikt!
Doe je bijvoorbeeld ? jouwParameter <enter> dan geeft ie in dat schermpke de waarde weer die je parameter op dat moment bezit. Heb je dus meerdere parameters dan vul je die ook in en hupsaké, je kunt ze zo te voorschijn toveren!

nog meer mogelijkheden????


EDIT::::

en onderaan in je sub de errortrap:
code:
1
2
3
DebugIt:
MsgBox Mid(Error(Err.Number), InStrRev(Error(Err.Number), "]") + 1, Len(Error(Err.Number)))
End Sub


THXS moderator ;)

[ Voor 16% gewijzigd door Verwijderd op 06-01-2004 11:23 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
4Advanced:

als ik jouw code neem en aanpas aan de mijne:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Set gobjconn = New ADODB.Connection
gobjconn.ConnectionString = connStr

Dim objParam As ADODB.Parameter
Dim objSPRs As ADODB.Recordset
Dim objSPComm As ADODB.Command
Set objSPComm = New ADODB.Command
query = "INSERT INTO merken (merk) VALUES (@p_blaat)"

With objSPComm
.ActiveConnection = gobjconn
.CommandType = adCmdStoredProc
.CommandText = query
End With

'Zoeknaam
Set objParam = objSPComm.CreateParameter("p_blaat", adVarChar, adParamInput, 50, "woei")
objSPComm.Parameters.Append objParam

objSPComm.Execute
Set objSPComm = Nothing

krijg ik deze foutmelding:
Requested operation requires an OLE DB Session object, which is not supported by the current provider.
wat moet ik hiermee :?

Multimonitor is relax :P


Verwijderd

Eerst je verbinding openen, dan je command object en parameter toewijzen, dan uitvoeren en verbinding sluiten / vernietigen ;)


Maar ik begrijp nog steeds niet waarom je die query ertussen laat staan????
Leg eens uit als je wilt 8) Ik heb het idee dat je niet goed weet waar je mee bezig bent (positief bedoeld!) en daar wil ik je wel mee helpen O-)

[ Voor 52% gewijzigd door Verwijderd op 06-01-2004 11:33 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
Verwijderd schreef op 06 januari 2004 @ 11:29:
Eerst je verbinding openen, dan je command object en parameter toewijzen, dan uitvoeren en verbinding sluiten / vernietigen ;)


Maar ik begrijp nog steeds niet waarom je die query ertussen laat staan????
Leg eens uit als je wilt 8) Ik heb het idee dat je niet goed weet waar je mee bezig bent (positief bedoeld!) en daar wil ik je wel mee helpen O-)
je moet toch nog wel aangeven wat voor query hij moet uitvoeren? waar moet dat dan?

hij geeft nu overigens deze fout:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '{ call INSERT INTO merken (merk) VALUES (@p_blaat)('woei') }'

hij voegt dus wel parameter toe zo te zien, maar vervangt niet @p_blaat

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Probeer toch maar eens dat vraagteken als placeholder.

https://fgheysels.github.io/


Verwijderd

De query uitvoeren?
Je voert OF een query uit in je SQL (of MySQL) database doordat je daar een SP hebt aangemaakt en dan geef je een parameter op die je met je command mee wilt sturen, daarom is dat zo ontworpen!!!, OF je voert een query uit vanuit je Sub met een INSERT INTO en dan laat je die parameter weg.....dat doe je tochal in je INSERT INTO statement. Daar wijs je precies aan in welke kolom je je waarde wilt knallen!
BTW... je geeft je parameterwaarde in je objSPComm niet op met die @ ervoor.

EDIT::: sorry, heb ff terug gelezen...die @ had je er niet voorgezet :X

Is die code die ik je gaf nog exact zo gehouden? (op jouw connection wijzigingen na dan?)

[ Voor 33% gewijzigd door Verwijderd op 06-01-2004 11:44 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 06 januari 2004 @ 11:41:
OF je voert een query uit vanuit je Sub met een INSERT INTO en dan laat je die parameter weg.....dat doe je tochal in je INSERT INTO statement. Daar wijs je precies aan in welke kolom je je waarde wilt knallen!
Wat bedoel je hier nu precies?

https://fgheysels.github.io/


Verwijderd

Okee, ff opnieuw....

Je hebt je OLE DB en je database.
Nu kun je op verschillende manieren in je DB je records updaten, deleten of inserten.

A. Met een recordset --> objRs.Update
B. Met een command object --> objComm.Execute en dan CommandText = AdCommandText
C. Met een opgeslagen procedure IN je database --> objComm.Execute en dan CommandText = adCmdStoredProc

Nu ga jij die laatste 2 door elkaar halen.
Jij probeert met een AdCmdText een adCmdStoredProc parameter door te voeren.

Een parameter gebruik je doordat je Opgeslagen Procedure een @parameter verwacht (INPUT parameter) die aangeeft wat je waarde is die in een bepaalde kolom opgeslagen moet worden.

Meer weten???

EDIT :::

Voorbeeldje van een opgeslagen procedure in mijn DB!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ALTER PROCEDURE dbo.zoekClientSP
-- parameters
(
@strZoekText VARCHAR(50)
)

--query

AS 

IF EXISTS (SELECT dbo.tblClienten.Achternaam
FROM            dbo.tblClienten 
WHERE           dbo.tblClienten.Zoeknaam LIKE @strZoekText + '%' )

    EXECUTE showFoundClientsSP @strZoekText

ELSE

    RAISERROR 55555 'Geen cliënten gevonden'


RETURN


en die stuur ik vanuit een form zo aan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Set objSPComm = New ADODB.Command
            With objSPComm
                .ActiveConnection = gobjConn
                .CommandType = adCmdStoredProc
                .CommandText = "zoekClientSP"
            End With
            Dim objParam1 As ADODB.Parameter

            
            Set objParam1 = objSPComm.CreateParameter("strZoeken", adVarChar, _
                                                    adParamInput, 50, txtZoeken.Text)
            
            objSPComm.Parameters.Append objParam1
                        
            Set objSPRs = objSPComm.Execute

[ Voor 49% gewijzigd door Verwijderd op 06-01-2004 11:53 ]


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
dit is mijn code nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Set gobjconn = New ADODB.Connection
gobjconn.ConnectionString = connStr
gobjconn.Open

'On Error GoTo debugIt
Dim objParam As ADODB.Parameter
Dim objSPRs As ADODB.Recordset
Dim objSPComm As ADODB.Command
Set objSPComm = New ADODB.Command
sSQL = "INSERT INTO merken (merk) VALUES (@p_blaat)"

With objSPComm
.ActiveConnection = gobjconn
.CommandType = adCmdStoredProc
.CommandText = sSQL
End With

'Zoeknaam
Set objParam = objSPComm.CreateParameter("@p_blaat", adVarChar, adParamInput, 50, "woei")
objSPComm.Parameters.Append objParam

objSPComm.Execute
Set objSPComm = Nothing
    
gobjconn.Close


ik ben hieraan begonnen aan de hand van onderstaand stukje
P&W FAQ - SQL

ik deed het eerst op de manier zoals daar als fout beschreven staat.

als ik daar dat stuk lees, dan snap ik jouw manier niet. Zoals in het stuk beschreven staat, snap ik wel, maar wil alleen niet lukken in vb.

edit: snap jouw manier nu wel, maar moet toch ook zo kunnen als in artikel in de faq?

[ Voor 8% gewijzigd door MeIsTwisted op 06-01-2004 11:56 ]

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 06 januari 2004 @ 11:49:
Okee, ff opnieuw....

Je hebt je OLE DB en je database.
Nu kun je op verschillende manieren in je DB je records updaten, deleten of inserten.

A. Met een recordset --> objRs.Update
B. Met een command object --> objComm.Execute en dan CommandText = AdCommandText
C. Met een opgeslagen procedure IN je database --> objComm.Execute en dan CommandText = adCmdStoredProc

Nu ga jij die laatste 2 door elkaar halen.
Jij probeert met een AdCmdText een adCmdStoredProc parameter door te voeren.

Een parameter gebruik je doordat je Opgeslagen Procedure een @parameter verwacht (INPUT parameter) die aangeeft wat je waarde is die in een bepaalde kolom opgeslagen moet worden.
Je kan ook perfect een parameter gebruiken in een query die 'embedded' is in je programma code hoor.
(Zie het stukje over parametrized queries in de FAQ)

https://fgheysels.github.io/


  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 11:57:
[...]


Je kan ook perfect een parameter gebruiken in een query die 'embedded' is in je programma code hoor.
(Zie het stukje over parametrized queries in de FAQ)
dat leek/lijkt mij ook de ideale manier

[ Voor 4% gewijzigd door MeIsTwisted op 06-01-2004 11:58 ]

Multimonitor is relax :P


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 13:39

TeeDee

CQB 241

Call me stupid, maar mySQL ondersteunt toch geen parametrized queries?

/edit:
verder heb je het over @p_blaat, @blaat en @blaa
Gaat daar niet iets fout?

/edit2: is het nu opgelost of niet? Want anders loop ik flink uit mijn nek te brabbelen :)

[ Voor 62% gewijzigd door TeeDee op 06-01-2004 12:06 ]

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


Verwijderd

Moet je het wel in de goede volgorde doen...en waarom zou je??
Maak dan van commandText wel ff adCmdText en geen adCmdStoredProc!

Dan is het toch veel eenvoudiger om gelijk je waarde toe te voegen in je Query ipv later nog eens een keer een parameter toe te voegen.

Leg mij dan eens uit waarom dit dan DE manier is??? Je doet de dingen dan toch DUBBEL? eerst ga je je query uittypen en dan later een parameter opgeven die je al in je INSERT statement kwijt had gekunt!

Parameters werken met SP's voor zowel input als output....nu doe je dingen dubbel, ik zie geen enkel voordeel van deze methode! ;)

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 06 januari 2004 @ 12:02:
Moet je het wel in de goede volgorde doen...en waarom zou je??
Maak dan van commandText wel ff adCmdText en geen adCmdStoredProc!

Dan is het toch veel eenvoudiger om gelijk je waarde toe te voegen in je Query ipv later nog eens een keer een parameter toe te voegen.

Leg mij dan eens uit waarom dit dan DE manier is??? Je doet de dingen dan toch DUBBEL? eerst ga je je query uittypen en dan later een parameter opgeven die je al in je INSERT statement kwijt had gekunt!

Parameters werken met SP's voor zowel input als output....nu doe je dingen dubbel, ik zie geen enkel voordeel van deze methode! ;)
Parametrized queries hebben verschillende voordelen:
- veiligheid (voorkomen van html / sql injection)
- snelheid (mogelijkheid tot caching)

(Lees anders het stukje in de FAQ eens over parametrized queries).

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
TeeDee, MySQL ondersteunt misschien geen parametrized queries, maar wie zegt dat de TS MySQL gebruikt?

https://fgheysels.github.io/


Verwijderd

Jeps, heb het zojuist gelezen....zit wat in!
Wat betreft SQL injection... dat kun je toch zo oplossen met een replace ;)
Verder zie ik nog steeds geen grote voordelen maar goed....daar gaat het nu niet om, werkt het...dat is de kwestie.....heb je het al aan de praat :P

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
whoami schreef op 06 januari 2004 @ 12:11:
TeeDee, MySQL ondersteunt misschien geen parametrized queries, maar wie zegt dat de TS MySQL gebruikt?
ik d8 dat ik dat gezegd had, maar ik zie het niet zo snel ergens staan |:(

edit:
4Advanced,
nog niet aan de praat. hij vervangt @p_blaat nog steeds niet.
commandType is nu wel adCMDText

[ Voor 18% gewijzigd door MeIsTwisted op 06-01-2004 12:14 ]

Multimonitor is relax :P


Verwijderd

MeIsTwisted schreef op 06 januari 2004 @ 12:13:
4Advanced,
nog niet aan de praat. hij vervangt @p_blaat nog steeds niet.
commandType is nu wel adCMDText
Al ge-debugt? heb je msn??? mail mij dan ff, kan dat hier? private message?

  • MeIsTwisted
  • Registratie: November 2001
  • Laatst online: 28-07-2023

MeIsTwisted

not a Twisted mind

Topicstarter
Verwijderd schreef op 06 januari 2004 @ 12:17:
[...]


Al ge-debugt? heb je msn??? mail mij dan ff, kan dat hier? private message?
Ik heb msn, wat is de jouwe?

mijn mail: weggehaald@uw.vriendelijke.mod

er lopen hier spamharvesters over het forum, hoeveel spam wou je hebben?

[ Voor 23% gewijzigd door curry684 op 06-01-2004 22:55 ]

Multimonitor is relax :P


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 06 januari 2004 @ 12:13:
Jeps, heb het zojuist gelezen....zit wat in!
Wat betreft SQL injection... dat kun je toch zo oplossen met een replace ;)
Verder zie ik nog steeds geen grote voordelen maar goed....daar gaat het nu niet om, werkt het...dat is de kwestie.....heb je het al aan de praat :P
Als de topicstarter idd MySQL gebruikt, dan zal het niet werken met parametrized queries, aangezien MySQL afaik geen parametrized queries ondersteund.
(Althans, dat zou ik -moest ik jou zijn- allereerst eens nagaan).

De voordelen van PQ's zijn er wel degelijk:
- je hoeft zelf geen quotes meer te replacen/escapen
- SQL injection wordt opgevangen
- Het DBMS kan je query (het execution plan eigenlijk) cachen, waardoor hij de volgende keer sneller wordt uitgevoerd
- Geen gemier meer met datums
- ....

[ Voor 4% gewijzigd door whoami op 06-01-2004 12:31 ]

https://fgheysels.github.io/


Verwijderd

jeps, heb de boel nog eens goed doorgelezen en je hebt gelijk....zitten voordelen aan. Toch maar aan denken de volgende keer ;)

THXS 8)

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 13:39

TeeDee

CQB 241

whoami schreef op 06 januari 2004 @ 12:11:
TeeDee, MySQL ondersteunt misschien geen parametrized queries, maar wie zegt dat de TS MySQL gebruikt?
[rml]MeIsTwisted in "[ VB/ADODB] Parameterized Query wil niet ..."[/rml].

En ik zag het ook een beetje aan de code: mySqlCom oid.

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

Pagina: 1