Avatar billede farving Nybegynder
26. februar 2006 - 17:02 Der er 39 kommentarer og
2 løsninger

fejl i indsætning i en database

JEg er ved at lave et teknologi-projekt, hvor jeg skal have sat nogle inputs fra brugeren ind i en database, selve koden til "spillet" virker og er lavet i javascript... så har jeg fået javascriptet til at skrive til input-bokse og når tallet er rigtigt ændre den URL til sidenavn.asp?mode="insert"

jeg ved at javascript delen virker da den er gennemtestet... tror der kan være lidt problemer med FF

men jeg får fejlen på denne kode:

<%
if request.querystring("mode") = "insert" then
    ' ADODB connection objektet
    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath("../../../../cgi-bin/statistik.mdb")
    Conn.Open DSN
    ' Indsæt i statistik
    strSQL = "insert into statistik (playername, mynumber, counter) values('" & Request.Form("playerName") & "', '" & Request.Form("theNumber") & "', '" & Request.Form("counter") & "')"
    ' Luk databaseforbindelse
    Conn.Close
    Set Conn = Nothing
    response.redirect "statistik.asp"
else
%>

fejlmeddelelsen er:

Error Type:
ADODB.Connection.1 (0x800A0BB9)
The application is using arguments that are of the wrong type, are out of acceptable range, or are in conflict with one another.
/carsten/htx/teknologi/uge1-9/Guess_Number_beta1.asp, line 9

line 9 = Conn.Open DSN << men det stammer nok fra en foregående linie...

Mvh Carsten
Avatar billede _darkstar_ Nybegynder
26. februar 2006 - 17:10 #1
Du laver ingen forespørgsel imod databasen. Du åbner databasen, sætter en streng til en værdi og lukker den igen. Der skal være noget kode, der eksekverer INSERT-sætningen, du har lavet.
Avatar billede farving Nybegynder
26. februar 2006 - 17:13 #2
dvs noget ala

Conn.Execute(strSQL)

Carsten
Avatar billede nielle Nybegynder
26. februar 2006 - 17:52 #3
_darkstar_ og farving har ret i deres observation, men det er nu ikke det som resultere i fejlbeskeden.

Umiddelbart ser din DSN korrekt ud, men det afhænger af om databasen virkeligt dikker der hvor du angiver det. Prøv at udskrive:

Response.Write Server.MapPath("../../../../cgi-bin/statistik.mdb")

- og tjek så efter om det er det rigtige sted.
Avatar billede nielle Nybegynder
26. februar 2006 - 17:53 #4
"dikker" skal læses "ligger".
Avatar billede farving Nybegynder
26. februar 2006 - 18:39 #5
hmmm, er næsten siker på at det er rigtigt :)

Men prøver det lige
Avatar billede farving Nybegynder
26. februar 2006 - 19:01 #6
hmm den melder stadig fejl og det er det rigtige sted den ligger
Avatar billede nielle Nybegynder
26. februar 2006 - 19:56 #7
Prøv om denne connection-streng virker i stedet:

DSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../../../../cgi-bin/statistik.mdb")
Avatar billede cpufan Juniormester
26. februar 2006 - 20:06 #8
den URL til sidenavn.asp?mode="insert"

skal være sidenavn.asp?mode=insert
Avatar billede farving Nybegynder
26. februar 2006 - 20:24 #9
Cpufan > var det os, min skrivefejl her...

nielle > nu får jeg denne meddelse i stedet

Error Type:
ADODB.Connection.1 (0x80004005)
SQLState: IM002 Native Error Code: 0 [DataDirect][ODBC lib] Data source name not found and no default driver specified
/carsten/htx/teknologi/uge1-9/Guess_Number_beta1.asp, line 8
Avatar billede nielle Nybegynder
26. februar 2006 - 21:20 #10
Oh så skal du tilbage til det du startede med.

Hvad får du hvis du skriver:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../../../cgi-bin/statistik.mdb")
Response.Write "DEBUG: " & DSN & "<br>"
Conn.Open DSN
Avatar billede farving Nybegynder
26. februar 2006 - 21:39 #11
Error Type:
ADODB.Connection.1 (0x800A0BB9)
The application is using arguments that are of the wrong type, are out of acceptable range, or are in conflict with one another.
/carsten/htx/teknologi/uge1-9/Guess_Number_beta1.asp, line 9

stadig den fejlmeddelse
Avatar billede nielle Nybegynder
26. februar 2006 - 22:41 #12
Udskriver den ikke DEBUG-linjen?
Avatar billede farving Nybegynder
26. februar 2006 - 22:46 #13
Avatar billede nielle Nybegynder
26. februar 2006 - 22:48 #14
Jeg får bare en "The page cannot be displayed".
Avatar billede nielle Nybegynder
26. februar 2006 - 23:00 #15
Prøv med dette her:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../../../cgi-bin/statistik.mdb")
Response.Write "DEBUG: " & DSN & "<br>"
' Conn.Open DSN
Response.End
Avatar billede farving Nybegynder
27. februar 2006 - 09:00 #16
ja det ved jeg godt, men fejlmeddelsen står jo længere nede, men nu skriver den:

DEBUG: DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=/cgi-bin/statistik.mdb
Avatar billede nielle Nybegynder
27. februar 2006 - 11:36 #17
Det er også forkert. Det skal være den absolutte sti til databasen. Den vise er en relativ sti.
Avatar billede _darkstar_ Nybegynder
27. februar 2006 - 11:47 #18
Det er da en absolut sti, den viser. Til gengæld tvivler jeg stærkt på at stien er korrekt.

nielle: hvad giver Server.MapPath(".")?
Avatar billede farving Nybegynder
27. februar 2006 - 14:03 #19
stien er korrekt, det er jeg sikkert på, men kan det være fordi min server ikke undstøtter access?
Avatar billede nielle Nybegynder
27. februar 2006 - 17:32 #20
farving> Det er noget usædvanligt at cgi-bin ligger i roden, men det kan da hænde.

Imidlertid kan jeg se at du er hostet hos b-One:

http://toolbar.netcraft.com/site_report?url=http://www.farving.dk

Forwarder de bare dit domæne til en server du selv har stående, eller har du din side liggende hos dem? Hvis det er det sidste, så er jeg helt sikker på at den angivne sti ikke er korrekt.

Jeg ved ikke faktisk ikke hvad der skal til for at man kan arbejde med en Access-database som ligger på en Linux-boks.

_darkstar_> Server.MapPath(".") skulle helst give navnet på det aktuelle bibliotek. Hvorfor spørger du?
Avatar billede farving Nybegynder
27. februar 2006 - 17:43 #21
jeg har serverplads hos dem :)

men efter jeg virkelig ik kan se fejlen har jeg kigget lidt på b-ones side og fundet ud af at de ikke arbejder med access... så jeg rettede filen til mySQL som de så tilbød, *suk*

Nu melder den fejl i den kode...

strSQL = "Insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('" & Request.Form("playerName") & "', " & Request.Form("theNumber") & ", " & Request.Form("counter") & ", " & now() & ")"


Error Type:
ADODB.Connection.1 (0x80004005)
SQLState: 4 Native Error Code: 1064 [TCX][MyODBC]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 ' , '2/27/2006 4:50:18 PM')' at line 1
/carsten/htx/teknologi/uge1-9/Guess_Number_beta1.asp, line 9
Avatar billede nielle Nybegynder
27. februar 2006 - 18:18 #22
Din SQL-sætning er vist ikke helt den som giver den beskrevne fejl? Der er i hvertfald ingen '-tegn rundt om dit kald til now().

MySQL vil gerne have tidsstempler på denne form:

'2006-02-27 16:50:18'

- og det er derfor at den ikke kan lide det format du prøver med:

'2/27/2006 4:50:18 PM'
Avatar billede _darkstar_ Nybegynder
27. februar 2006 - 22:25 #23
I stedet for at bruge ASPs now-funktion, kan man også bare bruge den der er indbygget i MySQL:

strSQL = "Insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('" & Request.Form("playerName") & "', " & Request.Form("theNumber") & ", " & Request.Form("counter") & ", NOW())"
Avatar billede farving Nybegynder
28. februar 2006 - 17:37 #24
okay tak for hjælpen, har fået det til at virke sådan nogenlunde nu, jeg fandt ud af at det var fordi den ikke fik noget information fra javascript delen...

Nu må i slåsse om hvem der skal have pointene
Avatar billede nielle Nybegynder
28. februar 2006 - 22:04 #25
Den beskrevne fejl, har da intet at gøre med JavaScript. MySQL brokkede sig over et forkert datoformat.
Avatar billede farving Nybegynder
28. februar 2006 - 22:09 #26
jeps gjorde den os :) men det er rettet

eller virker sådan set stadig ik nu
Avatar billede nielle Nybegynder
06. marts 2006 - 18:43 #27
Har du fået det til at virke?
Avatar billede farving Nybegynder
07. marts 2006 - 20:49 #28
har ikke fået tidsdelen til at virke, men den har jeg været nødt til at udelade fra mit projekt... og fejlen er at NOW() funktionen vender tiden forkert, i forhold til hvad mySQL databasen vil have...

Så må vi sige at dette problem er løst...

nielle smider du et svar?
Avatar billede _darkstar_ Nybegynder
07. marts 2006 - 20:58 #29
"fejlen er at NOW() funktionen vender tiden forkert, i forhold til hvad mySQL databasen vil have"

Det lyder meget, meget mærkeligt. Kan du ikke skrive din SQL ud umiddelbart før du sender den til databasen og poste den her?
Avatar billede farving Nybegynder
07. marts 2006 - 21:02 #30
07.03.2006 21:01:50

0000-00-00 00:00:00

den vil have årstallet først i datoen, mens NOW() giver årstallet sidst...
Avatar billede _darkstar_ Nybegynder
07. marts 2006 - 21:13 #31
Kan du ikke skrive hele SQL-sætningen ud? Det ovenstående er ikke tilstrækkeligt. Du skal altså skrive strengen strSQL ud før at du sender den til databasen.
Avatar billede farving Nybegynder
07. marts 2006 - 21:20 #32
insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('Carsten', 60, 5,'07.03.2006 21:19:54')

Så vil du nok sige at jeg skal fjerne '' men hvis jeg ikke har dem, så får jeg denne meddelse:
SQLState: 4 Native Error Code: 1064 [TCX][MyODBC]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 '.2006 21:19:23)' at line 1
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 00:01 #33
"Så vil du nok sige at jeg skal fjerne '' [klip]"

Nej. Jeg vil til gengæld sige at der i din SQL-streng skulle have stået

insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('Carsten', 60, 5, NOW())
Avatar billede farving Nybegynder
08. marts 2006 - 10:17 #34
også lidt det jeg mente...

Men hvordan får jeg den så til at skrive det?

skal der '" "' udenfor? eller hvordan ville du evt skrive det?

har bare ligesom skrevet det så det ikke melder fejl, men godt nok hellere ikke flytter noget over
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 10:45 #35
Som jeg også skrev tidligere, skal du skrive

strSQL = "Insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('" & Request.Form("playerName") & "', " & Request.Form("theNumber") & ", " & Request.Form("counter") & ", NOW())"
Avatar billede farving Nybegynder
08. marts 2006 - 14:50 #36
well, så giver den stadig en fejlmeddelse om at der mangler et tegn, vist nok, er på vej på arbejde derfor jeg ik lige helt kan huske det, men skriver lige hvilken fejl den kommer med senere i dag
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 15:50 #37
...og så vil jeg gerne bede dig om at skrive den nye SQL-streng ud...
Avatar billede farving Nybegynder
08. marts 2006 - 18:54 #38
insert into statistik (playerName, myNumber, counter, lastTimePlayed) values('Carsten Farving', 97, 5,NOW())
Avatar billede farving Nybegynder
08. marts 2006 - 19:17 #39
Det ser faktisk ud til at det virker, jeg forstår bare ik hvad forskellen var fra før, for der kopierede jeg os din kode ind
Avatar billede _darkstar_ Nybegynder
08. marts 2006 - 19:42 #40
Der er jo forskel på SQL-strengene. At finde ud af hvad forskellen betyder, vil jeg overlade til dig :-)
Avatar billede farving Nybegynder
08. marts 2006 - 22:19 #41
ved jeg der er, men forstår bare ikke hvilken fejl jeg har lavet før, da jeg er rimelig sikker på at jeg har haft samme tekst, men nu virker det, og i skal begge have tak...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester