Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:04 Der er 55 kommentarer og
2 løsninger

Hvordan udfører man flere SQL-commands ad gangen?

Jeg har et asp stykke der ser nogenlunde sådan her ud:

Set rs = Server.CreateObject(\"ADODB.RecordSet\")
              strSQL = \"Select * From wars\"
            rs.Open strSQL, SQL, Conn, adOpenKeyset, adLockOptimistic

            rs.Addnew
                  rs(\"clan\") = clan
              rs(\"channel\") = channel
              rs(\"date\") = day & \"/\" & month & \"/\" & year
              rs(\"time\") = hour & \":\" & min
              rs(\"map\") = map
              rs(\"set\") = 1
              rs(\"challanged\") = now
            rs.Update

            SQL = \"Update users Set challange=\'1\' Where rank=\'Member/Wararranger\'\"


Rs.Close

Jeg er rimlig newbie til ASP, men jeg prøver at få 2 SQL-commands til at kører.....Den ene kører fint (strSQL) så længe jeg ikke blander den anden (SQL) ind i dokumentet. Kan jeg få begge commands til at virke samtidig eller sådan lige efter hinanden? og hvordan skal koden se ud?
Avatar billede tmceu Praktikant
19. september 2001 - 00:07 #1
Du adskiller dine SQL statemets med ; (semikolon). Det er dog ikke alle databaser der understøtter det, hvad kører du ?
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:10 #2
Jeg bruger bare Access..... kan du ik skrive et lille sourcekode eks. så jeg ved hvad du præcist mener?
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:16 #3
Dette er den fejlmeldning jeg får når jeg prøver at kører scriptet
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:16 #4
Provider error \'80020005\'

Type mismatch.

/challangedb.asp, line 25
Avatar billede tmceu Praktikant
19. september 2001 - 00:17 #5
Hvis du vil køre eks. både en select og en update, kan du normalt bruge

SQL = \"SELECT * FROM Tabel;UPDATE Tabel SET Felt = \'Værdi\'\"
Conn.Execute SQL

Men faktisk er jeg ret overbevist om at Access ikke understøtter flere statements i samme streng. Jeg mener du vil få en fejl efter første statement, der siger noget i stil med \"characters found after end of statement\"
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:21 #6
Nu har jeg ændret den til:

Set rs = Server.CreateObject(\"ADODB.RecordSet\")
              strSQL = \"Select * From wars;Update users Set challange=\'1\' Where rank=\'Member/Wararranger\'\"
            rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic

            rs.Addnew
                  rs(\"clan\") = clan
              rs(\"channel\") = channel
              rs(\"date\") = day & \"/\" & month & \"/\" & year
              rs(\"time\") = hour & \":\" & min
              rs(\"map\") = map
              rs(\"set\") = 1
              rs(\"challanged\") = now
            rs.Update

           

Rs.Close

og nu viser den fejlen:

Microsoft JET Database Engine error \'80040e14\'

Characters found after end of SQL statement.

/challangedb.asp, line 25
Avatar billede tmceu Praktikant
19. september 2001 - 00:24 #7
Øhh, se lige min forrige kommentar. Det var præcis den fejl jeg forventede. Så konklusionen er, at det kan du ikke med Access.
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:27 #8
ev =(

Men ellers tak
Avatar billede tmceu Praktikant
19. september 2001 - 00:30 #9
Har lige bekræftet at det er Access der er problemet, ved at teste mit eksempel på Microsoft SQL Server og der virker det fint :-(
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:32 #10
Hmmmmm......nogen der ved hvordan man gør det i Access?
Avatar billede tmceu Praktikant
19. september 2001 - 00:36 #11
Ja, du kan køre det som 2 seperate statements. Behold din select kode og tilføj følgende:

SQL = \"INSERT INTO Wars VALUES(\'\" & RS(\"Clan\") & \"\', \'\" & RS(\"Channel\") & \"\')\"

o.s.v. for resten af dine felter.

Conn.open
Conn.Execute SQL

Jeg forudsætter at du allerede har lavet et connection objekt og tilknyttet en connectionstring
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:40 #12
Okay.....den sidste linje må du uddybe? Hvor skal jeg sætte SQL = \"INSERT INTO Wars VALUES(\'\" & RS(\"Clan\") & \"\', \'\" & RS(\"Channel\") & \"\')\"
ind? og istedet for hvilet?
Avatar billede tdaugaard Nybegynder
19. september 2001 - 00:47 #13
Jeg vil foreslå at du lærer at bruge SQL _ALENE_ istedet for at bruge et RecordSet\'s funktioner, da dette gør det en del nemmere. Her er din kode omskrevet til at bruge SQL:

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \",1,#\" & now & \"#)\"
Conn.Execute \"UPDATE users SET challange=\'1\' WHERE rank=\'Member/Wararranger\'\"

Kender jeg ikke datatyperne på dine felter men har antaget at du bruger et tekst felt til \"date\" og \"time\" felterne og et Dato/Tid til \"challanged\".

Hvis du IKKE gør det og bruger Dato/Tid på dem alle skal \' og \' rundt om & day & \"-\" osv. laves om til # ligesom på \"challanged\".
Avatar billede tmceu Praktikant
19. september 2001 - 00:48 #14
Det er lidt svært, da du ikke har inkludert hele din kode. Fra starten ville koden være

Set Conn = Server.Createobject(\"ADODB.Connection\")
Conn.Connectionstring = [din connectionstring her]

Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"Select * From wars\"
rs.Open strSQL, SQL, Conn, adOpenKeyset, adLockOptimistic

SQL = \"INSERT INTO Wars VALUES(\'\" & Clan & \"\', \'\" & Channel & \"\', \'\" & cstr(day & \"/\" & month & \"/\" & year) & \"\', \'\" & map & \"\', \" & set & \'\", \" now & \"\')\"

Conn.Open
Conn.Execute SQL

Dette forudsætter at alle felter er tekst felter, fjern \' rundt om de felter der ikke er.

Hvis du ikke skal bruge resultatet af din select, eks. til at udskrive noget, kan du fjerne nedenstående linier:

Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"Select * From wars\"
rs.Open strSQL, SQL, Conn, adOpenKeyset, adLockOptimistic
Avatar billede tdaugaard Nybegynder
19. september 2001 - 00:48 #15
Note: Der er absolut ingen grund til at bruge en variabel på SQL\'et forderefter at udføre det.
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:53 #16
Okay.......hele koden ser således ud:

<%
  Dim Conn
  Set Conn = CreateObject(\"ADODB.Connection\")
  Conn.Provider = \"Microsoft.Jet.OLEDB.4.0; ; Data Source=\" & Server.MapPath(\"db/users.mdb\")
  Conn.Open
%>

<%
Dim Rs, strSQL, clan, channel, month, day, year, hour, min, map
Const adOpenKeyset = 1
Const adLockOptimistic = 3

clan = Session(\"clan\")
channel = Session(\"channel\")
month = Session(\"month\")
day = Session(\"day\")
year = Session(\"year\")
hour = Session(\"hour\")
min = Session(\"min\")
map = Session(\"map\")


                Set rs = Server.CreateObject(\"ADODB.RecordSet\")
              strSQL = \"Select * From wars;Update users Set challange=\'1\' Where rank=\'Member/Wararranger\'\"
            rs.Open strSQL, Conn, adOpenKeyset, adLockOptimistic

            rs.Addnew
                  rs(\"clan\") = clan
              rs(\"channel\") = channel
              rs(\"date\") = day & \"/\" & month & \"/\" & year
              rs(\"time\") = hour & \":\" & min
              rs(\"map\") = map
              rs(\"set\") = 1
              rs(\"challanged\") = now
            rs.Update

           

Rs.Close
Response.Redirect \"challanged.asp\"
%>

<%
Conn.close
Set Conn = Nothing
%>

Jeg må indrømme at jeg kun har fattet d der med at bruge Record (rs) Det andet der ser lidt sjovt ud.....
Avatar billede tdaugaard Nybegynder
19. september 2001 - 00:54 #17
Sådan
<%
  Dim Conn
  Set Conn = CreateObject(\"ADODB.Connection\")
  Conn.Open \"Microsoft.Jet.OLEDB.4.0; Data Source=\" & Server.MapPath(\"db/users.mdb\")

Dim Rs, strSQL, clan, channel, month, day, year, hour, min, map
Const adOpenKeyset = 1
Const adLockOptimistic = 3

clan = Session(\"clan\")
channel = Session(\"channel\")
month = Session(\"month\")
day = Session(\"day\")
year = Session(\"year\")
hour = Session(\"hour\")
min = Session(\"min\")
map = Session(\"map\")

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \",1,#\" & now & \"#)\"
Conn.Execute \"UPDATE users SET challange=\'1\' WHERE rank=\'Member/Wararranger\'\"

Response.Redirect \"challanged.asp\"
%>

<%
Conn.close
Set Conn = Nothing
%>
Avatar billede knaldperlen Nybegynder
19. september 2001 - 00:57 #18
Slug den der Thomas =)

Microsoft VBScript compilation error \'800a03ea\'

Syntax error

/challangedb.asp, line 19

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \"#:\" & min & \"#\",1,#\" & now & \"#)\"
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
Avatar billede tmceu Praktikant
19. september 2001 - 00:58 #19
tdaugaard >> principielt enig, men der er mange (incl. mig selv) der ofte bruger det for at gøre koden mere overskuelig. Faktisk bruger jeg det ofte i en endnu mere \"ekstrem\" form, for at holde koden inden for læsevidde, eks.

SQL = \"INSERT INTO Wars VALUES(\"
SQL = SQL & \"\'\" & Clan & \"\', \"

o.s.v. men det er jo smag og behag.
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:01 #20
knaldperlen:> Vi prøver igen ;o)

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\'\",1,#\" & now & \"#)\"
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:05 #21
Samme fejl Thomas =( Og jeg bruger dato/time ved både date, time og challanged
Avatar billede tmceu Praktikant
19. september 2001 - 01:08 #22
Hvad med:

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & cstr(\"#\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"#\") & \"\'\",1,#\" & now & \"#)\"
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:14 #23
nope samme fejl som ovenover tmceu =(
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:15 #24
Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\',1,#\" & now & \"#)\"

SÅDAN .. der var en \" for meget ;o)
Avatar billede tmceu Praktikant
19. september 2001 - 01:16 #25
Ahh, date og måske også time er reserverede ord i SQL. Prøv at sætte [] uden om date i første omgang, så date bliver til [date]. Det skader ikke også at ændre tim til [time]
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:20 #26
Hmmmmm.......fejl igen men denne gang en anden:

Microsoft OLE DB Provider for ODBC Drivers error \'80004005\'

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

/challangedb.asp, line 4

Kan dette være pga. af number og date/time instillingerne?
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:22 #27
Skrev: Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\',1,#\" & now & \"#)\"

da den skrev fejlen...samme fejl kom også uden []

og vær opmærksom på at, jeg bruger dato/time ved både date, time og number ved challanged
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:22 #28
Nææ .. det er min fejl:

<%
  Dim Conn
  Set Conn = CreateObject(\"ADODB.Connection\")
  Conn.Open \"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=\" & Server.MapPath(\"db/users.mdb\")

Dim Rs, strSQL, clan, channel, month, day, year, hour, min, map
Const adOpenKeyset = 1
Const adLockOptimistic = 3

clan = Session(\"clan\")
channel = Session(\"channel\")
month = Session(\"month\")
day = Session(\"day\")
year = Session(\"year\")
hour = Session(\"hour\")
min = Session(\"min\")
map = Session(\"map\")

Conn.Execute \"INSERT INTO wars (clan,channel,date,time,map,set,challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\',1,#\" & now & \"#)\"
Conn.Execute \"UPDATE users SET challange=\'1\' WHERE rank=\'Member/Wararranger\'\"

Response.Redirect \"challanged.asp\"

Conn.close
Set Conn = Nothing
%>
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:25 #29
Microsoft JET Database Engine error \'80040e14\'

Syntax error in INSERT INTO statement.

/challangedb.asp, line 19

?
Avatar billede tmceu Praktikant
19. september 2001 - 01:28 #30
Lavede du ændringen med [date] ?
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:30 #31
tmceu det gør ingen forskel med eller uden [] =(
Avatar billede tmceu Praktikant
19. september 2001 - 01:31 #32
SET er også et SQL keyword og skal også erstattes med [set]
Avatar billede tmceu Praktikant
19. september 2001 - 01:32 #33
Med keyword mente jeg selvfølgelig reserveret ord :-)
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:33 #34
Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\',1,#\" & now & \"#)\"
Conn.Execute \"UPDATE users SET challange=\'1\' WHERE rank=\'Member/Wararranger\'\"


=


Microsoft JET Database Engine error \'80040e14\'

Number of query values and destination fields are not the same.

/challangedb.asp, line 19
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:35 #35
Skal der ikke sættes nogle # ind istedet for de \' og \' ved & day & osv.?
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:35 #36
og challanged er et number ikke date/time
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:35 #37
Prøv at lave

Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\',1,#\" & now & \"#)\"

om til:

Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#,1,#\" & now & \"#)\"
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:36 #38
Nå for søren .. men ehm .. hvis challanged er et Number hvordan/hvorfor indsætter du så Now() i det ? (tid/dato)
Avatar billede tmceu Praktikant
19. september 2001 - 01:37 #39
Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',\'\" & day & \"-\" & month & \"-\" & year & \"\',\'\" & hour & \":\" & min & \"\'\" & map & \",1,#\" & now & \"#)\"

Der manglede map
Avatar billede tmceu Praktikant
19. september 2001 - 01:40 #40
Fejlen \"Number of query values and destination fields are not the same.\" betyder at antallet af felter i VALUES ikke stemmer overens med antal kolonner i INSERT INTO Wars(....)

Men derudover har tdaugaard ret m.h.t. now ???
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:41 #41
Det har du ret i Thomas....Har lavet den om til Date/time nu......men stadig:

Microsoft JET Database Engine error \'80040e14\'

Number of query values and destination fields are not the same.

/challangedb.asp, line 19
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:44 #42
Okay nu sker der noget.....ændrede koden til:

Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#\'\" & map & \",1,#\" & now & \"#)\"

Og fejlen:
Microsoft JET Database Engine error \'80040e14\'

Syntax error in string in query expression \'#20:00#\'de_prodigy,1,#9/19/2001 1:43:10 AM#)\'.

/challangedb.asp, line 19
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:47 #43
Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#,\'\" & map & \",1,#\" & now & \"#)\"

der manglede et komma ;o)
Avatar billede tmceu Praktikant
19. september 2001 - 01:47 #44
der mangler et komma lige før map, undskyld :-(

lige før map skal det være \"#, \"
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:49 #45
Vi arbejder os da nedad:

Microsoft JET Database Engine error \'80040e14\'

Syntax error in string in query expression \'\'de_prodigy,1,#9/19/2001 1:49:07 AM#)\'.

/challangedb.asp, line 19
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:51 #46
Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#,\'\" & map & \"ø,1,#\" & now & \"#)\"

der manglede en \' *G*
Avatar billede tmceu Praktikant
19. september 2001 - 01:51 #47
ok, map er altså et tekst felt. Så skal det være

Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#,\'\" & map & \"\',1,#\" & now & \"#)\"

nu manglede der et \'
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:51 #48
HAHA!!!! FANDT DEN!!!

Conn.Execute \"INSERT INTO wars (clan,channel,[date],[time],map,[set],challanged) VALUES (\'\" & clan & \"\',\'\" & channel & \"\',#\" & day & \"-\" & month & \"-\" & year & \"#,#\" & hour & \":\" & min & \"#,\'\" & map & \"\',1,#\" & now & \"#)\"
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:52 #49
Ja d fandt jeg os lige ud a tmceu =) Tak skal I ha drenge!!! I r super!!!
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:52 #50
tmceu:> Der er ikke nogle der skal påstå vi ikke er enige *hi hi*
Avatar billede tmceu Praktikant
19. september 2001 - 01:53 #51
ØV! Før var jeg ét sekund bagefter, nu er det 43 :-)

tdaugaard >> har du Microsoft Speed Keyboard ;-)
Avatar billede tmceu Praktikant
19. september 2001 - 01:53 #52
tdaugaard >> nope
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:54 #53
tmceu:> Nopes, et Logitech Cordless jeg-kan-skrive-rådent-hurtigt ;o)
Avatar billede knaldperlen Nybegynder
19. september 2001 - 01:54 #54
TAK TAK TAK TAK ;) Nu r jeg super glad!!! MANGE tak for hjælpen!!! Har accepted begge jeres svar
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:54 #55
knaldperlen:> Det var så lidt ;-)
Avatar billede tdaugaard Nybegynder
19. september 2001 - 01:54 #56
Og tak for point :-)
Avatar billede tmceu Praktikant
19. september 2001 - 01:56 #57
Det var så lidt \"perle\" :-)

tdaugaard >> det har jeg også hjemme, men lige nu sidder jeg på et hotelværelse i Kbh og må nøjes med min bærbare\'s \"knap så hurtigt at skrive på\" keyboard
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