Avatar billede vraa Nybegynder
10. august 2003 - 15:28 Der er 21 kommentarer og
1 løsning

Fejl med socket.buffer

Er der nogen der lige kan se fejlen i den her linie:

strSQL = "INSERT INTO T1(tidspunkt, grader) values('" & now() & "','" & Socket.Buffer & "')"

Det hele ser således ud:

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../db/db.mdb")
Conn.Open DSN

set Socket = Server.CreateObject("Socket.TCP")
Socket.Host = "62.107.48.130:80"
Socket.Open
Socket.SendLine("GET /Single1")
Socket.WaitForDisconnect
Result = Socket.Buffer
Socket.Close

strSQL = "INSERT INTO T1(tidspunkt, grader) values('" & now() & "','" & Socket.Buffer & "')"
Conn.execute(strSQL)
Avatar billede eagleeye Praktikant
10. august 2003 - 15:35 #1
Hvilken type er kolonne tidspunkt?
Avatar billede eagleeye Praktikant
10. august 2003 - 15:36 #2
Hvis det er dato/tid type skal der # omkring hvis det er Access.

Men det leteste er bare at bruge Now() funktionen i DBen sådan her:


strSQL = "INSERT INTO T1(tidspunkt, grader) values(Now(),'" & Socket.Buffer & "')"
Conn.execute(strSQL)
Avatar billede vraa Nybegynder
10. august 2003 - 15:41 #3
Ja.. det er dato/tid. Har også ændret til det du har skrevet. Men får fejlen:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression ''28,0°C'.
/webtermometer/www/socket.asp, line 24

Socket.buffer er en temperatur taget fra et webtermometer
Avatar billede eagleeye Praktikant
10. august 2003 - 15:43 #4
Ok så der kan være ' i den tekst. Prøv at tilføje en replace som laver ' om til to '' da ' bruge som start og slut på en streng i SQL, men to opfatte som en i testen.:

strSQL = "INSERT INTO T1(tidspunkt, grader) values(Now(),'" & replace(Socket.Buffer, "'","''") & "')"
Conn.execute(strSQL)
Avatar billede vraa Nybegynder
10. august 2003 - 15:46 #5
Hmm.. Samme fejl. Socker.buffer kan f.eks. være = 28,6°C
Avatar billede eagleeye Praktikant
10. august 2003 - 15:47 #6
Hvilken type er grader i tabellen?
Avatar billede vraa Nybegynder
10. august 2003 - 15:54 #7
text
Avatar billede eagleeye Praktikant
10. august 2003 - 15:56 #8
Prøv at dobbelttjekker at de 3 navne passer med det som står i databsen: tidspunkt, grader, T1. Hvis et navn er skrevet forkert.

Og prøv at udskrive SQL i stedet for at udføre den så denne linje:

Conn.execute(strSQL)

Bliver til disse 3, og prøv at vise hvad der står:

Response.Write strSQL
Response.End
Conn.execute(strSQL)
Avatar billede eagleeye Praktikant
10. august 2003 - 16:02 #9
Måske er der et af de navne som driller du kan evt prøve at sætte [] omkring dem:

strSQL = "INSERT INTO [T1] ([tidspunkt], [grader]) values(Now(),'" & replace(Socket.Buffer, "'","''") & "')"
Avatar billede vraa Nybegynder
10. august 2003 - 16:08 #10
Så bliver outputtet:
INSERT INTO T1(tidspunkt, grader) values(Now(),27,7°C
Avatar billede vraa Nybegynder
10. august 2003 - 16:11 #11
Sorry. Outputtet bliver sådan her:
INSERT INTO T1(tidspunkt, grader) values(Now(),'27,8°C
Avatar billede eagleeye Praktikant
10. august 2003 - 16:12 #12
Er der ikke en ') til sidst ??
Avatar billede eagleeye Praktikant
10. august 2003 - 16:13 #13
Der mangler et ') til sidst i den du har vist prøv at kopier hele linjen:


strSQL = "INSERT INTO T1 (tidspunkt, grader) values(Now(),'" & Socket.Buffer & "')"
Avatar billede vraa Nybegynder
10. august 2003 - 16:17 #14
Det er det der er lidt underligt. Stadig samme output.
Avatar billede eagleeye Praktikant
10. august 2003 - 16:20 #15
?? mærkeligt at det forsvinder. Så prøv at dele det op på to linejr sådan her:

strSQL = "INSERT INTO T1 (tidspunkt, grader) values(Now(),'" & Socket.Buffer
strSQL = strSQL & "')"
Avatar billede vraa Nybegynder
10. august 2003 - 16:25 #16
Desværre. Samme problem. Jeg arbejder videre med det. Hvis jeg finder ud af det skal jeg nok poste det.
Avatar billede eagleeye Praktikant
10. august 2003 - 16:28 #17
Prøv med + i stedet for &:

strSQL = "INSERT INTO T1 (tidspunkt, grader) values(Now(),'" + Socket.Buffer + "')"

Prøv at udskriver len(Socket.Buffer) og tjek at antal karakter passer med det antal som teksten fylder, måske er der 2 karakter mere end når man tæller karakterne i 27,8°C som er 6 karakter lang.
Avatar billede vraa Nybegynder
10. august 2003 - 17:37 #18
Der står at den er 7 karakterer lang. Men når man udskriver socket.buffer er der kun 6 karakterer (f.eks. 27,7°C). Jeg ved ikke hvor den qoute kommer fra.
Avatar billede eagleeye Praktikant
10. august 2003 - 17:47 #19
Det muligt det som er problemmet at der ligger en "tom" karakter. Så prøv med.:

str = Left(Socket.Buffer, len(Socket.Buffer)-1))

strSQL = "INSERT INTO T1 (tidspunkt, grader) values(Now(),'" & str & "')"
Avatar billede vraa Nybegynder
10. august 2003 - 18:15 #20
Så har vi et output der ser således ud:
INSERT INTO T1 (tidspunkt, grader) values(Now(),'27,8°C')
Avatar billede eagleeye Praktikant
10. august 2003 - 18:17 #21
Så ser det rigtigt ud så prøve at fjerne de to linjer

Response.Write strSQL
Response.End

og se om det ikke kommer i databasen.
Avatar billede vraa Nybegynder
10. august 2003 - 18:38 #22
Så virker det sgu. Jeg takker for hjælpen. Jeg har smidt 30 point oveni for arbejdet. Den var lidt svær og knække.
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