[asp] waarschijnlijk een domme fout

Pagina: 1
Acties:

  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
Ik was van plan nu eens een keer NIET naar Got
te vluchten op het moment dat het niet lukte ..
maar na 26 uur naar het zelfde beeld te hebben
gekeken ben ik het zat en ben ik weer hier :'(

zit dus zo volgende code:

ASP:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!-- #INCLUDE FILE="connection.asp" -->
<!-- #INCLUDE FILE="..\..\..\i&ascripts\adovbs.inc" -->
<% 

server.scripttimeout=15

Response.Buffer = true 

OpenConnection 


Dim cmdUpdate, strSQL, objParam, RecSet
Dim AutoNr, strSqlList(120)
Dim Schedule, Datum, DatumDiff, x, t

Set cmdUpdate = Server.CreateObject("ADODB.Command")

 strSQL = "INSERT INTO Bericht (Titel, TitelColor, TitelBgr, BanTop, BanTopPos, BanBot, BanBotPos, Msg, MsgColor, MsgBgr, MsgPos, MsgFont, Img, ImgPos) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
  cmdUpdate.ActiveConnection = strConnect
  cmdUpdate.CommandText = strSQL
  cmdUpdate.CommandType = adCmdText

   Set objParam = cmdUpdate.CreateParameter("@Title", adVarChar, adParamInput, 80, Request.Form("Title"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@TitleColor", adVarChar, adParamInput, 7, Request.Form("TitleColor"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@TitleBgr", adVarChar, adParamInput, 7, Request.Form("TitleBgr"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@BanTop", adVarChar, adParamInput, 100, Request.Form("BanTop"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@BanTopPos", adVarChar, adParamInput, 7, Request.Form("BanTopPos"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@BanBot", adVarChar, adParamInput, 100, Request.Form("BanBot"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@BanBotPos", adVarChar, adParamInput, 7, Request.Form("BanBotPos"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@Msg", adLongVarChar, adParamInput, 8000, Request.Form("Msg"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@MsgColor", adVarChar, adParamInput, 7, Request.Form("MsgColor"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@MsgBgr", adVarChar, adParamInput, 7, Request.Form("MsgBgr"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@MsgPos", adVarChar, adParamInput, 7, Request.Form("MsgPos"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@MsgFont", adVarChar, adParamInput, 100, Request.Form("MsgFont"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@Img", adVarChar, adParamInput, 100, Request.Form("Img"))
   cmdUpdate.Parameters.Append objParam
   Set objParam = cmdUpdate.CreateParameter("@ImgPos", adVarChar, adParamInput, 7, Request.Form("ImgPos"))
   cmdUpdate.Parameters.Append objParam

  Response.Write strSQL
 cmdUpdate.Execute

'tot hier werkt het als een trein -------<

 strSQL = "SELECT @@IDENTITY"
  cmdUpdate.CommandText = strSQL
  cmdUpdate.CommandType = adCmdText

 Set RecSet = cmdUpdate.Execute
  AutoNr = RecSet(0)

' ^^ ook dit is getest en werkt goed ^^
' maar dan het volgende .. ik heb getest wat de uitkomst van
' de queries waren en die zijn goed 
' maar zodra ik .execute doe gaat het fout!

If( Request.Form("schedule") = "Once" ) Then
    strSqlList(0)="INSERT INTO datum (bericht_id, bericht_datum) VALUES (" & AutoNr & "," & Datum & ")"    
Else

 t = 1
 Datum = Request.Form("StartDate")
 DatumDiff = DateDiff("d",Datum,Request.Form("EndDate"))

 If( DatumDiff > 0) Then
  While( DatumDiff >= 0)


     If( Request.Form("schedule") = "Weekly" ) Then
       for x=1 to Request.Form("WeekDay").count
          If( Weekday(Datum) = CInt(Request.Form("WeekDay")(x)) ) Then
              strSqlList(t)="INSERT INTO datum (bericht_id, bericht_datum) VALUES (" & AutoNr & "," & Datum & ")"
              t = t + 1
          End If
       next
     ElseIf( Request.Form("schedule") = "Daily" ) Then
           strSqlList(t)="INSERT INTO datum (bericht_id, bericht_datum) VALUES (" & AutoNr & "," & Datum & ")"
     End If

   t = t + 1
   Datum = DateAdd("d", 1, Datum)
   DatumDiff = DateDiff("d",Datum,Request.Form("EndDate"))

  Wend
 Else
  Response.Write "De einddatum ligt VOOR de begindatum"
 End If

End If

  For t=0 to UBound(strSQLList)
    cmdUpdate.CommandText = strSQLList(t)
    cmdUpdate.CommandType = adCmdText
    Response.Write strSQLList(t)
    cmdUpdate.Execute
  Next

Set cmdUpdate = Nothing
Set RecSet = Nothing
CloseConnection 

%>


Bovenstaand gedeelte (bericht weg schrijven) werkt als een trein,
en onderstaand gedeelte rekent eerst even voor mij uit
welke datums er in de tabel moeten komen en maakt vervolgens
een array met sql-query's en die zouden dan in de laatste for lus weg geschreven
moeten worden maar nee hoor, ik kijk al voor de 2e dag naar de zelfde
fout melding..

ik weet dat

"Microsoft JET Database Engine error '80040e0c'
Command text was not set for the command object.
/intrascripts/lichtkrant/addtodb.asp, line 103"

inhoud dat ik gewoon een domme fout heb gemaakt,
maar ik kom er echt niet meer uit dus vandaag dat ik
hier mijn heil kom zoeken .. :'(

[ Voor 11% gewijzigd door intrix op 13-02-2004 09:33 ]

welcome my son, welcome to the machine


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

OZ-Gump

terug van weggeweest

Command text was not set for the command object

Ik zou zeggen: print je strSQLList(t) eens op scherm en kijk maar eens of er wel een command in staat (je melding zegt van niet).

My personal website


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
OZ-Gump schreef op 13 februari 2004 @ 09:38:
Command text was not set for the command object

Ik zou zeggen: print je strSQLList(t) eens op scherm en kijk maar eens of er wel een command in staat (je melding zegt van niet).
had ik al gedaan:

INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/13/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/14/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/15/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/16/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/17/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/18/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/19/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/20/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/21/2004)
INSERT INTO datum (bericht_id, bericht_datum) VALUES (51,2/22/2004)

welcome my son, welcome to the machine


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Met 'naar het scherm staren' alleen, zal je idd de oplossing niet vinden.
De sleutel ligt 'm in het debuggen. Doe zoals OZ-gump zegt: kijk eens wat er in strSQLList zit op de positie van t.
Als je de error interpreteert, dan weet je in welke richting je moet zoeken (in dit geval dus dat de CommandText niet gezet wordt). Volgens je code zet je hem wel, maar ga eens de inhoud na van die variabele. Misschien is die idd wel leeg.

Verder raad ik je aan dat je zelf ook leert debuggen (in de P&W FAQ vind je er wel eea over afaik), want het is echt neit de bedoeling van GoT dat anderen hier jouw code gaan debuggen.
1.1. Learn to Debug
Debugging is the cornerstone of being a programmer. The first meaning of the verb to debug is to
remove errors, but the meaning that really matters is to see into the execution of a program by examining
it. A programmer that cannot debug effectively is blind.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Het probleem zal bij je datum liggen.

https://fgheysels.github.io/


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

OZ-Gump

terug van weggeweest

Print de t (regelnummer) er eens voor, dan kun je zien of er niet een lege regel staat in bijvoorbeeld je 0-de of het t-de element.

Kan de insert wel gedraaid worden als je die handmatig uitvoert?

Kan de gebruiker enkel kiezen tussen Once, Weekly en Daily, of zijn er andere antwoorden mogelijk die Request.Form("schedule") teruggeeft, waardoor je commandtext niet altijd (goed) gevuld is?

Sterker nog: je initialiseert je t op 1, terwijl je in je for-loop op 0 begint! En het 0-de element bevat alleen een command als once gekozen is...

[ Voor 20% gewijzigd door OZ-Gump op 13-02-2004 09:53 ]

My personal website


  • Kermit.de.Kikker
  • Registratie: Februari 2002
  • Laatst online: 20:55
Het ligt idd aan t...

Eerst zeg je begin t bij 1 (regel 76), maar bij je laatste loep begint t bij 0 (regel 106), dus die bestaat niet...

Verwijderd

een datum is toch een sting waarde?

dan moet je deze zo in je query zetten:

'" & Datum & "' ipv " & Datum & "

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
ff mbt je command... Waarom gebruik je zulke lange regels??? Het is compacter en mooier (<-subjectief) om het op deze manier te doen

ASP:
1
2
3
4
5
6
7
8
9
dim objCommand
set objCommand = Server.CreateObject("ADODB.Command")

With objCommand
    .ActiveConnection   = jeverbinding
    .CommandText        = jequery
    .CommandType        = adCmdText
        .Parameters.Append .CreateParameter("@jevar", adInteger, adParamInput, 4, jevar)
End With


En wat op voorhand al kan helpen om fouten in de toekomst te voorkomen... Is het verwijderen van de parameters nadat je command is uitgevoerd

ASP:
1
2
3
    For Each item In objCommand.Parameters
       objCommand.Parameters.Delete item.Name
    Next


edit:
Ik weet niet van wat voor databeest je gebruik maakt, maar als je gebruik maakt van een sql-server db dan kun je de hele insert procedure beter in een stored proc gooien die je als output de @@identity meegeeft....

[ Voor 19% gewijzigd door faabman op 13-02-2004 10:09 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 22:51
datum != string

Roomba E5 te koop


Verwijderd

ok als jij het zegt, maar je moet het wel op deze manier in je query zetten '" & datum & "'

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 13 februari 2004 @ 11:26:
ok als jij het zegt, maar je moet het wel op deze manier in je query zetten '" & datum & "'
Nee, want dan zeg je dat het een string is, en dat is het niet. Je wilt die datum niet als string naar je DB sturen.
Ik gebruik altijd parametrized queries, maar hoe je 't in dit geval (zonder param. queries) je datum meegeeft weet ik niet zo direct. Misschien met #, maar je zou toch best eens in je documentation kijken.

https://fgheysels.github.io/


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

OZ-Gump

terug van weggeweest

Default gebruik je voor een datum veld inderdaad 'n hekje (#).

Zoals whoami aangeeft geniet een parametrized query de voorkeur. Hierdoor worden waardes door de query zelf voorzien van de juiste typerings-karakters (niks voor een integer, quotes voor een string, hekjes voor een datum, etc.) en hoef je dus bij eventuele concatenatie van strings niet zelf op type-definiërerende karakters te letten.

En het is onderhoudbaarder en je hebt er natuurlijk minder (typ)werk mee... ;)

My personal website


Verwijderd

ff offtopic, wtf is een parametrized query ? iemand een website waar het uitgelegt word ofzo? volgens mij is het vet handig

en! in google vind ik het niet

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 13 februari 2004 @ 14:17:
ff offtopic, wtf is een parametrized query ? iemand een website waar het uitgelegt word ofzo? volgens mij is het vet handig

en! in google vind ik het niet
In de P&W FAQ vind je onder het SQL puntje er een stukje over terug. :Y)
(Wel met voorbeeldcode in C#)

https://fgheysels.github.io/


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
FvKnijff schreef op 13 februari 2004 @ 10:04:
ff mbt je command... Waarom gebruik je zulke lange regels??? Het is compacter en mooier (<-subjectief) om het op deze manier te doen

ASP:
1
2
3
4
5
6
7
8
9
dim objCommand
set objCommand = Server.CreateObject("ADODB.Command")

With objCommand
    .ActiveConnection   = jeverbinding
    .CommandText        = jequery
    .CommandType        = adCmdText
        .Parameters.Append .CreateParameter("@jevar", adInteger, adParamInput, 4, jevar)
End With


En wat op voorhand al kan helpen om fouten in de toekomst te voorkomen... Is het verwijderen van de parameters nadat je command is uitgevoerd

ASP:
1
2
3
    For Each item In objCommand.Parameters
       objCommand.Parameters.Delete item.Name
    Next


edit:
Ik weet niet van wat voor databeest je gebruik maakt, maar als je gebruik maakt van een sql-server db dan kun je de hele insert procedure beter in een stored proc gooien die je als output de @@identity meegeeft....
Thanks voor de tip about korte regels en het verwijderen van
parameters, ik werk nu sinds 10 dagen aan dit script in asp
daarvoor heb ik nog nooit met asp gewerkt dus ik probeer stukje
bij beetje zo veel mogelijk te leren.

stored procedures, tja ik weet niet, ms acces is het databeest maar is stored procedures echt zoveel beter dan? ..

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
whoami schreef op 13 februari 2004 @ 09:45:
....
Verder raad ik je aan dat je zelf ook leert debuggen (in de P&W FAQ vind je er wel eea over afaik), want het is echt neit de bedoeling van GoT dat anderen hier jouw code gaan debuggen.


[...]
Ik kreeg de indruk dat je het topic gesloten had .. niet dus :)

welcome my son, welcome to the machine


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

stored procedures, tja ik weet niet, ms acces is het databeest maar is stored procedures echt zoveel beter dan? ..
SP's worden niet ondersteund door MS Access
En imho zijn deze niet altijd beter, zeg maar zelden, dan parametrized queries.

[ Voor 73% gewijzigd door gorgi_19 op 13-02-2004 14:44 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
OZ-Gump schreef op 13 februari 2004 @ 11:39:
Default gebruik je voor een datum veld inderdaad 'n hekje (#).

Zoals whoami aangeeft geniet een parametrized query de voorkeur. Hierdoor worden waardes door de query zelf voorzien van de juiste typerings-karakters (niks voor een integer, quotes voor een string, hekjes voor een datum, etc.) en hoef je dus bij eventuele concatenatie van strings niet zelf op type-definiërerende karakters te letten.

En het is onderhoudbaarder en je hebt er natuurlijk minder (typ)werk mee... ;)
dat hekje voor datum daar was ik voor dat ik het bericht poste al mee
aan het stoeien geweest hij stond er in eerste instantie wel,
maar net voor ik dit draadje poste had ik het op alle andere mogelijke
manieren geprobeert .. vandaar dat dat ook nog fout stond.

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
intrix schreef op 13 februari 2004 @ 09:31:

ASP:
1
2
3
4
5
6
7
8
  For t=0 to UBound(strSQLList)
    cmdUpdate.CommandText = strSQLList(t)
    cmdUpdate.CommandType = adCmdText
    Response.Write strSQLList(t)
    cmdUpdate.Execute
  Next

%>
Bovenstaand lusje liep dus fout, aangezien t voor die lus al de zelfde
grote had als de array, was het zoiezo onnutig de UBound functie te gebruiken
de lus heb ik nu verandert in:

code:
1
2
3
4
5
For x = 0 to t
    cmdUpdate.CommandText = strSQLList(t)
    cmdUpdate.CommandType = adCmdText
    cmdUpdate.Execute
Next


Dit bleek wel te werken, met dan aan de 'debug' tutorial waarin,
ik er aan herrinerd werd om nieuwe stukjes afzonderlijk te testen,
waardoor fouten toch weer duidelijker aan het licht komen.

welcome my son, welcome to the machine


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
intrix schreef op 13 februari 2004 @ 14:48:
[...]


Bovenstaand lusje liep dus fout, aangezien t voor die lus al de zelfde
grote had als de array, was het zoiezo onnutig de UBound functie te gebruiken
de lus heb ik nu verandert in:

code:
1
2
3
4
5
For x = 0 to t
    cmdUpdate.CommandText = strSQLList(t)
    cmdUpdate.CommandType = adCmdText
    cmdUpdate.Execute
Next


Dit bleek wel te werken, met dan aan de 'debug' tutorial waarin,
ik er aan herrinerd werd om nieuwe stukjes afzonderlijk te testen,
waardoor fouten toch weer duidelijker aan het licht komen.
Hehe , zie ineens dat meer mensen dat gezien hadden ... :9

offtopic:
in reactie op bericht hier onder pas..

dus volgende keer kan ik beter een vorig bericht editen?
dan kick ik 'm niet up en komt er toch nog in wat er bij moest :)

of zie ik dat verkeerd? ;)

[ Voor 15% gewijzigd door intrix op 13-02-2004 14:56 ]

welcome my son, welcome to the machine


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

OZ-Gump

terug van weggeweest

offtopic:
pssssst, niet stiekem je topic kicken elke keer! (Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/quote.gif)

[ Voor 39% gewijzigd door OZ-Gump op 13-02-2004 14:56 ]

My personal website


  • TrickShot
  • Registratie: Februari 2003
  • Laatst online: 14-12-2023

TrickShot

Veel shots... weinig tricks.

intrix schreef op 13 februari 2004 @ 14:48:
code:
1
2
3
4
5
For x = 0 to t
    cmdUpdate.CommandText = strSQLList(t)
    cmdUpdate.CommandType = adCmdText
    cmdUpdate.Execute
Next


Dit bleek wel te werken, met dan aan de 'debug' tutorial waarin,
ik er aan herrinerd werd om nieuwe stukjes afzonderlijk te testen,
waardoor fouten toch weer duidelijker aan het licht komen.
Is het de bedoeling dat je altijd dezelfde commandText hebt of een typefout? :)
X aantal keren hetzelfde commando uitvoeren lijkt me niet bijster nuttig. 8)7

Athlon 2500+ @ 2230 MHz, 512 MB 3200 kingston, 2 x sata maxtor 120 GB, 1 WD 80 GB, Ti4200, Antec Sonata


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
gorgi_19 schreef op 13 februari 2004 @ 14:43:
[...]

SP's worden niet ondersteund door MS Access
En imho zijn deze niet altijd beter, zeg maar zelden, dan parametrized queries.
Maar ze zijn ook niet slechter. ;)

offtopic:
Alleen moet je ze soms eens recompilen als je datastructuur gewijzigd is , of als je nieuwe indexen ofzo gemaakt hebt.
Als je een SELECT query hebt, waarbij de WHERE clause dynamisch is, dan zijn parametrized queries ook wel beter, aangezien je anders COALESCE of ISNULL moet gebruiken in je SP

https://fgheysels.github.io/


  • intrix
  • Registratie: November 2002
  • Laatst online: 04-12-2023
TrickShot schreef op 13 februari 2004 @ 14:59:
[...]


Is het de bedoeling dat je altijd dezelfde commandText hebt of een typefout? :)
X aantal keren hetzelfde commando uitvoeren lijkt me niet bijster nuttig. 8)7
heheh typefout inderdaad niet in de source maar in overtikken :P

toch maar weer copy - paste gebruiken


offtopic:
ik krijg de laatste tijd wel veel waarschuwingen .. en priveberichten
van moderaters .. wist niet dat ik zo'n slecht mens was })

welcome my son, welcome to the machine


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
gorgi_19 schreef op 13 februari 2004 @ 14:43:
[...]

SP's worden niet ondersteund door MS Access
En imho zijn deze niet altijd beter, zeg maar zelden, dan parametrized queries.
recente versies access ondersteunen wel sp's (misschien niet met alle mogelijkheden van sql-server, maar je komt een heel eind) op MSDN of via google is hier wel een en ander over te vinden

[google=access stored procedures] << disclaimer, niet getest...

voor selects enkelvoudige inserts / updates zijn param queries zeker geschikt, maar wanneer ik 5 tabellen update in 1 procedure dan doe ik dat liever via sp's... denk dat het ook een kwestie van smaak is...

[ Voor 4% gewijzigd door faabman op 13-02-2004 15:34 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

Ze zullen stored queries ondersteunen, maar niet de precieze vorm van Stored Procedures :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1