[VB]Resultaat van een SP gebruiken in je applicatie

Pagina: 1
Acties:

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Ik ben bezig met een project en wil hierin stored procedures gebruiken, puur voor de educatie. Ik heb e.e.a. aan documentatie gelezen, en op zich is de materia van SP's wel te doorgronden. Waar ik niet helemaal uitkom is SP's i.c.m. VB6. Ik kan herleiden (via PSC o.a.) hoe je bv INSERTS en UPDATES kan toepassen en uitrusten met parameters. Maar ik wil de veelgebruikte query's opslaan in SP's (vanwege het execution plan dat mijn performance kan opschroeven). Ik kan dus alleen niet achterhalen hoe ik in VB een select-query kan verwerken. Stel ik heb de tabel projecten en wil hem ophalen, simpelweg met een SELECT * FROM projecten. Hoe doorloop ik dan in VB6 dit resultaat om het bv in een listview te zetten ?

Klinkt als basic-vraag, is het misschien ook wel een beetje, maar kan niet echt een duidelijk antwoord vinden bij GoT, PSC & Google

Verwijderd

Inderdaad erg basic:
MSDN link

Wat je denk ik zoekt is: set recordset = command.execute()

Overigens, voor performance in query-plannen hoef je het niet te doen hoor. Dat maakt namelijk niet uit vanaf Sql7.

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ik kon dus nergen terugvinden dat je het recordset ook moest gebruiken. BEdankt, was ook al bij MSDN geweest, maar over het hoofd gezien denk ik.

Klopt het trouwens dat je met SP's af bent van de hell van het datumgebruik/notatie ??

  • whoami
  • Registratie: December 2000
  • Laatst online: 17-04 23:42
pkouwer schreef op woensdag 11 januari 2006 @ 21:33:

Klopt het trouwens dat je met SP's af bent van de hell van het datumgebruik/notatie ??
Niet noodzakelijk.
Je bent er vanaf als je parameters gebruikt (bv, in parametrized queries).
Aangezien je in stored procedures ook gebruik maakt van parameters om je SP op te roepen, heb je idd minder 'miserie' met datum problemen / sql injection, etc....

Dit is ook een interessant stukje leesvoer:
klik

https://fgheysels.github.io/


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ik neem aan dat het stukje over PQ ook voor VB6 geldt ? Dit is nl. ook één van de redenen dat ik SP's ga gebruiken

  • whoami
  • Registratie: December 2000
  • Laatst online: 17-04 23:42
PQ's kan je ook in VB6 implementeren.
Zie google voor tutorials hierover:
klik

https://fgheysels.github.io/


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Thanxs, het implementeren is vrij eenvoudig heb ik al wel gezien. Tot zover gaat het wel, alleen loop ik tegen een ander probleem op en dat is de melding "the precision is invalid", dit heeft hoogstwaarschijnlijk te maken met de precisie van de parameters, alleen ik zie niet waar het fout gaat:

Sproc:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE procedure sp_SaveUren
(

    @id numeric(10),
    @gebruiker varchar(5),
    @werk varchar(15),
    @typewerk varchar(1),
    @omschrijving varchar(250),
    @datum datetime,
    @starttijd datetime,
    @eindtijd datetime,
    @werktijd numeric(2,2),
    @werktijd125 numeric(2,2),
    @werktijd150 numeric(2,2),
    @werktijd175 numeric(2,2),
    @werktijd200 numeric(2,2)
)
AS
if not exists.....


en het stukje VB:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    sSql = "sp_SaveUren"
    cmd.CommandText = sSql
    cmd.CommandType = adCmdStoredProc
    cmd.ActiveConnection = cnn
    cmd.Parameters.Append cmd.CreateParameter("id", adNumeric, adParamInput, 0, tmpSeqNo)
    cmd.Parameters.Append cmd.CreateParameter("gebruiker", adVarChar, adParamInput, 5, nwUser.initialen)
    cmd.Parameters.Append cmd.CreateParameter("werk", adVarChar, adParamInput, 15, frm.txtProjectnummer)
    cmd.Parameters.Append cmd.CreateParameter("typewerk", adVarChar, adParamInput, 1, sWerk)
    cmd.Parameters.Append cmd.CreateParameter("omschrijving", adVarChar, adParamInput, 250, frm.txtOmschrijving)
    cmd.Parameters.Append cmd.CreateParameter("datum", adDBDate, adParamInput, , Format(frm.dtpDatum.Value, "YYYY-MM-DD"))
    cmd.Parameters.Append cmd.CreateParameter("starttijd", adDBDate, adParamInput, , Format(starttijd, "HH:MM:SS"))
    cmd.Parameters.Append cmd.CreateParameter("eindtijd", adDBDate, adParamInput, , Format(eindtijd, "HH:MM:SS"))
    cmd.Parameters.Append cmd.CreateParameter("werktijd", adDecimal, adParamInput, , frm.txt100)
    cmd.Parameters.Append cmd.CreateParameter("werktijd125", adDecimal, adParamInput, , frm.txt125)
    cmd.Parameters.Append cmd.CreateParameter("werktijd150", adDecimal, adParamInput, , frm.txt150)
    cmd.Parameters.Append cmd.CreateParameter("werktijd175", adDecimal, adParamInput, , frm.txt175)
    cmd.Parameters.Append cmd.CreateParameter("werktijd200", adDecimal, adParamInput, , 0)

    cmd.Execute
    Set cmd = Nothing
`

ik heb al vanalles met de parameters gedaan, maar zie niet wat er fout gaat.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Gebruik je MSSQL? Prefix je stored procedures dan niet met sp_ want dat is gereserveerd voor system stored procedures.

edit:
Dat is vast niet de reden dat het fout gaat, maar dan leer je het niet verkeerd aan ;)

[ Voor 30% gewijzigd door kenneth op 12-01-2006 20:51 ]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ik zal ze wel even hernoemen, maar dat is idd niet het probleem.

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Ik vermoed (gezien de vermelding van precision) dat het bij die decimal(2,2) fout gaat. Je geeft adNumeric als type mee, maar zou je dan niet adDecimal moeten meegeven?
En welke waarde geef je mee? decimal(2,2) accepteert de waardes [-0,99;0,99]

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
De eerste parameter is het seqno van de tabel en is idd een numeric (zowel in tabel als in SP). Ik heb met QA de volgende query:

code:
1
exec sp_SaveUren 55,'pk','TGEBO513','p','Toegangscontrole Gem. Borsele','2006-12-1', '20:00:00','21:30:00',9.2,0.0,0.0,0.0,0.0


Hierop krijg ik de melding Error converting data type numeric to decimal.

update: het gaat om een urenregistratie, dus max, 24 uur of bv 22.75 uur

[ Voor 21% gewijzigd door pkouwer op 12-01-2006 21:06 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Het zit hem dan in die werktijden volgens mij: decimal(2,2) accepteert de waardes [-0,99;0,99]
Of anders: een getal van twee cijfers, waarvan twee de mantisse.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
de eerste 'twee' geeft toch aan dat ik tot 99 kan gaan, dus in feite -99,99 <-> +99,99 ??

heb het voor de zekerheid opgehoogd naar 6,2, maar geen resultaat, dezelfde melding
Ik ben inmiddels zover dat het vanuit QA werkt. 'k heb de tabel-def. aangepast. Maar vanuit VB krijg ik de melding precision invalid, nog steeds;

[ Voor 74% gewijzigd door pkouwer op 12-01-2006 21:18 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

pkouwer schreef op donderdag 12 januari 2006 @ 21:11:
de eerste 'twee' geeft toch aan dat ik tot 99 kan gaan, dus in feite -99,99 <-> +99,99 ??
http://msdn2.microsoft.com/en-us/library/ms187746.aspx
Maar vanuit VB krijg ik de melding precision invalid, nog steeds;
Geef je wel adDecimal mee?

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
de code staat hierbovven, netjes met adDecimal

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Oh eh, ik bedoel andersom, adNumeric :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Ik neem aan dat je het over de 4 laatste parameters hebt, deze moeten toch adDecimal blijven (4,25 uur ) ??

wat geberud er als ik in VB geen parameter voor de size meegeef ?

[ Voor 25% gewijzigd door pkouwer op 12-01-2006 21:41 ]


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Oh wacht, decimal en numeric zijn synoniemen 8)7
Ik ben niet helemaal wakker, sorry :P

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ik heb alle typen al gehad, wat kan het zijn ?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
het enige wat k nog kan doen is de SP herschrijven en dan parameter-voor-parameter toevoegen, denk ik zo.

dit is nu mijn code:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    sSql = "sp_SaveUren"
    cmd.CommandText = sSql
    cmd.CommandType = adCmdStoredProc
    cmd.ActiveConnection = cnn
    cmd.Parameters.Append cmd.CreateParameter("id", adNumeric, adParamInput, 10, tmpSeqNo)
    cmd.Parameters.Append cmd.CreateParameter("gebruiker", adVarChar, adParamInput, 5, nwUser.initialen)
    cmd.Parameters.Append cmd.CreateParameter("werk", adVarChar, adParamInput, 15, frm.txtProjectnummer)
    cmd.Parameters.Append cmd.CreateParameter("typewerk", adVarChar, adParamInput, 1, sWerk)
    cmd.Parameters.Append cmd.CreateParameter("omschrijving", adVarChar, adParamInput, 250, frm.txtOmschrijving)
    cmd.Parameters.Append cmd.CreateParameter("datum", adDBDate, adParamInput, 8, Format(frm.dtpDatum.Value, "YYYY-MM-DD"))
    cmd.Parameters.Append cmd.CreateParameter("starttijd", adDBDate, adParamInput, 8, Format(starttijd, "HH:MM:SS"))
    cmd.Parameters.Append cmd.CreateParameter("eindtijd", adDBDate, adParamInput, 8, Format(eindtijd, "HH:MM:SS"))
    cmd.Parameters.Append cmd.CreateParameter("werktijd", adDecimal, adParamInput, 0, Round(frm.txt100, 2))
    cmd.Parameters.Append cmd.CreateParameter("werktijd125", adDecimal, adParamInput, 0, frm.txt125)
    cmd.Parameters.Append cmd.CreateParameter("werktijd150", adDecimal, adParamInput, 0, frm.txt150)
    cmd.Parameters.Append cmd.CreateParameter("werktijd175", adDecimal, adParamInput, 0, frm.txt175)
    cmd.Parameters.Append cmd.CreateParameter("werktijd200", adDecimal, adParamInput, 0, 0)
    
    cmd.Parameters("werktijd").Size = 9
    cmd.Parameters("werktijd125").Size = 9
    cmd.Parameters("werktijd150").Size = 9
    cmd.Parameters("werktijd175").Size = 9
    cmd.Parameters("werktijd200").Size = 9

    cmd.Parameters("werktijd").Precision = 19
    cmd.Parameters("werktijd125").Precision = 19
    cmd.Parameters("werktijd150").Precision = 19
    cmd.Parameters("werktijd175").Precision = 19
    cmd.Parameters("werktijd200").Precision = 19
    
    cmd.Parameters("werktijd").NumericScale = 2
    cmd.Parameters("werktijd125").NumericScale = 2
    cmd.Parameters("werktijd150").NumericScale = 2
    cmd.Parameters("werktijd175").NumericScale = 2
    cmd.Parameters("werktijd200").NumericScale = 2
    
    
    
    cmd.Execute
    Set cmd = Nothing

moet toch te doen zijn, nietwaar ?

[ Voor 92% gewijzigd door pkouwer op 12-01-2006 23:03 ]


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
zijn er nog andere zaken waar ik naar kan kijken of op één of andere manier debuggen ??
Pagina: 1