Avatar billede Tony Juniormester
21. april 2005 - 15:46 Der er 23 kommentarer og
1 løsning

Problemer med update i SQL?

Jeg har en Access DB med DB'en FISH.
FISH indeholder tabellen fishTbl.
fishTbl indeholder 3 kolonner: fishId, lastFishDate og fishName.
fishId er autonummeringsfelt og primærnøgle.
lastFishDate er et tekstfelt.
fishName er et tekstfelt.

D.v.s. et record set er = fishId + lastFishDate + fishName

Jeg vil gerne individuelt kunne opdaterer datoen for de forskellige arter via min formular UPDATEfish.

Det her kan man vist ikke, men mon ikke det giver (bare lidt) mening alligevel:

strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateAborreField")& "' "
strSQL = strSQL & " Where Id = 1"

strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGeddeField")& "' "
strSQL = strSQL & " Where Id = 2"

strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGubbibookField")& "' "
strSQL = strSQL & " Where Id = 3"

strSQL = strSQL & "lastFishDate= ' " & Request.form("updateLaksField")& "' "
strSQL = strSQL & " Where Id = 4"

Hvordan skal den rigtige SQL se ud?
Avatar billede busschou Praktikant
21. april 2005 - 15:52 #1
strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateAborreField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & " UNION "
strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGeddeField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & " UNION "
strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGubbibookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & " UNION "
strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateLaksField")& "' "
strSQL = strSQL & " Where Id = 4"
Avatar billede busschou Praktikant
21. april 2005 - 15:53 #2
hov
---
strSQL = "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateAborreField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGeddeField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateGubbibookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update fishTbl set "
strSQL = strSQL & "lastFishDate= ' " & Request.form("updateLaksField")& "' "
strSQL = strSQL & " Where Id = 4"
Avatar billede Tony Juniormester
21. april 2005 - 16:13 #3
OK

Jeg får dog: (missing operator) in query expression
Avatar billede busschou Praktikant
21. april 2005 - 16:16 #4
prøv lige udskrive din sql så
Avatar billede Tony Juniormester
21. april 2005 - 16:21 #5
Original - 'skældyrene' udeladt ...

strSQL = "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateAdminField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateCompressField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateGuestbookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateNewsletterField")& "' "
strSQL = strSQL & " Where Id = 4"
Avatar billede busschou Praktikant
21. april 2005 - 16:23 #6
hehe nej mener
response.write(strSQL) :o)
Måske er det fordi du ikke har mellemrum inden = tegnene?
Avatar billede busschou Praktikant
21. april 2005 - 16:24 #7
hvis det er dato felter så kan det i øvrigt godt være du skal bruge # i stedet for ' omkring værdierne
Avatar billede Tony Juniormester
21. april 2005 - 16:29 #8
Åhh, ...

Response.Write rs("lastCompressDate") &""
Avatar billede Tony Juniormester
21. april 2005 - 16:30 #9
Nej, jeg bruger ikke dato felter ...
Avatar billede busschou Praktikant
21. april 2005 - 16:35 #10
jeg ved ikke lige hvad du mener med det sidste du skrev
Alt jeg mente var at du skulle lave en
response.write strSQl
inden du executer
Så kan man måske se hvorfor du får den der "missing operator"
Avatar billede Tony Juniormester
21. april 2005 - 16:36 #11
Til orientering:

Jeg har to DB-forbindelser til samme DB på siden.

Først vil jeg gerne skrive den gamle dato ud - dels til orientering, men også som value i de individuelle form inputs. Den Respons.Write jeg nævnte herover stammer fra udskrivningen til orientering, hvor jeg 'looper' den:

rs.MoveNext
Loop While Not rs.EOF

Ønsket er så at redigerer de datoer der udskrives i form inputtene. Det er det, jeg skal bruge DB-forbindelse nr. 2 til ...
Avatar billede busschou Praktikant
21. april 2005 - 16:39 #12
ok men det burde kunne gøres sådan med en Union...når du har flere sql statements
Avatar billede Tony Juniormester
21. april 2005 - 16:42 #13
OK

Det virker fint nok med at få dataerne skrevet ud til orientering ...

Min kode blok for redigering af data ser sådan ud:

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

strSQL = "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateAdminField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateCompressField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateGuestbookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate= ' " & Request.form("updateNewsletterField")& "' "
strSQL = strSQL & " Where Id = 4"

Conn.Execute(strSQL)

Conn.Close
Set Conn = Nothing
%>

Kan du se nogen umiddelbare fejl?
Avatar billede busschou Praktikant
21. april 2005 - 16:50 #14
ikke andet end som jeg skrev at du måske skal lave et mellemrum inden dine = tegn
Avatar billede Tony Juniormester
21. april 2005 - 16:57 #15
OK - d.v.s. der muligvis ligger en fejl et andet sted på siden. Men hvis jeg fjerne ovenstående kode blok, så køre den anden forespørgsel fint ...
Avatar billede busschou Praktikant
21. april 2005 - 17:00 #16
Prøv da lige at lave en response.write(strSQL) INDEN din Conn.Execute(strSQL) Så kan vi se hvordan din sql ser ud ...det er jo der den siger der er fejl
Avatar billede busschou Praktikant
21. april 2005 - 17:00 #17
altså
----
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../data/compress/compress.mdb")
Conn.Open DSN

strSQL = "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateAdminField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateCompressField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateGuestbookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & " UNION "
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateNewsletterField")& "' "
strSQL = strSQL & " Where Id = 4"
Response.write(strSQL)
Conn.Execute(strSQL)

Conn.Close
Set Conn = Nothing
%>
Avatar billede Tony Juniormester
21. april 2005 - 18:04 #18
Ja, den skriver godt nok SQL'en ud, men den skriver stadig:


[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'compressId = 1 UNION Update compressTbl set lastcompressDate = '' Where compressId = 2 UNION Update compressTbl set lastcompressDate = '' Where compressId = 3 UNION Update compressTbl set lastcompressDate = '' Where compressId = 4'.

/admin/pages/compress.asp, line 35

Damn, om jeg kan se hvor det er der mangler en 'gnyf' eller hvor det er, der er en for meget ..
Avatar billede busschou Praktikant
21. april 2005 - 20:02 #19
hmm underligt måske kan man ikke bruge Union i en update så
prøv evt lige sætte paranteser om
---------
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../data/compress/compress.mdb")
Conn.Open DSN

strSQL = "(Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateAdminField")& "' "
strSQL = strSQL & " Where Id = 1"
strSQL = strSQL & ") UNION ("
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateCompressField")& "' "
strSQL = strSQL & " Where Id = 2"
strSQL = strSQL & ") UNION ("
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateGuestbookField")& "' "
strSQL = strSQL & " Where Id = 3"
strSQL = strSQL & ") UNION ("
strSQL = strSQL & "Update compressTbl set "
strSQL = strSQL & "lastcompressDate = ' " & Request.form("updateNewsletterField")& "' "
strSQL = strSQL & " Where Id = 4)"
Response.write(strSQL)
Conn.Execute(strSQL)

Conn.Close
Set Conn = Nothing
%>
Avatar billede Tony Juniormester
21. april 2005 - 21:45 #20
Nej, det bryder den sig heller ikke om:

Syntax error in UPDATE statement.

/admin/pages/compress.asp, line 41

Linie 41 er: Conn.Execute(strSQL)

***
UNION:
"The UNION command is used to select related information from two tables, much like the JOIN command."

http://www.w3schools.com/sql/sql_union.asp
Avatar billede busschou Praktikant
21. april 2005 - 21:58 #21
så kan union nok kun bruges til at selecte med. Sorry. Jeg troede den kunne bruges til at slå sql statements sammen med :o(
Avatar billede Tony Juniormester
21. april 2005 - 22:15 #22
Det er helt i orden. Jeg prøver med et nyt tabeldesign i stedet ...
Avatar billede Tony Juniormester
30. april 2005 - 13:06 #23
busschou lægger du ikke lige et svar her, så du kan få lidt point for dine anstrengelser?
Avatar billede busschou Praktikant
30. april 2005 - 13:08 #24
oki doki
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