Avatar billede janette Nybegynder
25. august 2002 - 21:59 Der er 14 kommentarer og
1 løsning

Update i mange tabel

Jeg har en søgeside, hvor indholdet af en kasse findes og indsættes i en formular i tekstfelter. Her vil jeg gerne kunne rette i felterne og opdatere alt indold i kassen på en gang.

Hvordan gør man det?

Det nærmeste jeg er kommet efter utallige forsøg er:

fejlmeddelelse:
Antallet af argumenter er forkert eller egenskabstildelingen er ugyldig: 'CommandText'

På dette forsøg:
sub RetIndholdet

  dim strSQL

  strSQL="update Indhold set Antal = '" & Request.Form("Antal") & "'" 
  strSQL=strSQL & "Materiale=        '" & Request.Form("Materiale") & "'"
  strSQL=strSQL & "Materialetype=    '" & Request.Form("Materialetype") & "'"
  strSQL=strSQL & "WHERE IndholdID=  '" & Request.Form("IndholdID") & ";"

  dim objCMD
  Set objCMD = server.createobject("ADODB.Command")
  with objCMD
  .ActiveConnection = strConnect
  .Commandtype = adCmdText
  .CommandText  strSQL
  .execute
  end with
  set objCMD = Nothing
end sub


og fejlmeddelse:
Fejltype:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] Der er en syntaksfejl, fordi der mangler et komma. i forespørgselsudtrykket "IndholdID=1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,".
/emnekasse/redigerindholdMform.asp, line 168

på dette forsøg:
sub RetIndhold

  dim strSQL, objRS, Connect

  Set Connect = Server.CreateObject("ADODB.Connection")
  Set objRS = Server.CreateObject("ADODB.Recordset")

  Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("Emnekasser.mdb")
 
  strSQL = "SELECT Indhold.IndholdID, Indhold.KatalogRef, Indhold.Antal, Indhold.Materiale, Indhold.Materialetype, Indhold.Pris FROM Indhold WHERE IndholdID=" & Request("IndholdID") & ","
  objRS.Open strSQL, Connect, adOpenStatic, adLockBatchOptimistic

  objRS("Antal")=Request("Antal")
  objRS("Materiale")=Request("Materiale")
  objRS("Materialetype")=Request("Materialetype")
if Request("Pris")<>"" then
  objRS("Pris")=Request("Pris")
end if
  objRS.Update

  Connect.close
  Set connect = Nothing
  objRS.close
  Set ofjRS = Nothing
end sub
Avatar billede eagleeye Praktikant
25. august 2002 - 22:03 #1
Første: der mangler , melle kolonnerne og mellemrum og en ' formeget ved ID:

  strSQL="update Indhold set Antal = '" & Request.Form("Antal") & "', " 
  strSQL=strSQL & "Materiale=        '" & Request.Form("Materiale") & "', "
  strSQL=strSQL & "Materialetype=    '" & Request.Form("Materialetype") & "' "
  strSQL=strSQL & "WHERE IndholdID=  " & Request.Form("IndholdID") & ";"


Den anden hvis du har en liste med ID som sakl indgå i WHERE delen skal du bruge IN og ikke =:

strSQL = "SELECT Indhold.IndholdID, Indhold.KatalogRef, Indhold.Antal, Indhold.Materiale, Indhold.Materialetype, Indhold.Pris FROM Indhold WHERE IndholdID IN (" & Request("IndholdID") & ");"
Avatar billede janette Nybegynder
25. august 2002 - 22:21 #2
Første mulighed giver stadig samme fejl

Anden mulighed giver
Fejltype:
Provider (0x80020005)
Typeuoverensstemmelse.
i linien -  objRS("Antal")=Request("Antal")
Avatar billede eagleeye Praktikant
25. august 2002 - 22:25 #3
den første skal der også IN hvis du har flere ID'er i listen:

  strSQL="update Indhold set Antal = '" & Request.Form("Antal") & "'" 
  strSQL=strSQL & "Materiale=        '" & Request.Form("Materiale") & "'"
  strSQL=strSQL & "Materialetype=    '" & Request.Form("Materialetype") & "'"
  strSQL=strSQL & "WHERE IndholdID IN (" & Request.Form("IndholdID") & ");"
Avatar billede eagleeye Praktikant
25. august 2002 - 22:29 #4
How nu mangler jeg at sætte komma copy/paste fejl:

  strSQL="update Indhold set Antal = '" & Request.Form("Antal") & "', " 
  strSQL=strSQL & "Materiale=        '" & Request.Form("Materiale") & "', "
  strSQL=strSQL & "Materialetype=    '" & Request.Form("Materialetype") & "' "
  strSQL=strSQL & "WHERE IndholdID IN (" & Request.Form("IndholdID") & ");"
Avatar billede janette Nybegynder
25. august 2002 - 22:37 #5
Desværre - jeg får stadig samme fejl
Avatar billede janette Nybegynder
25. august 2002 - 22:50 #6
Fandt en fejl - tegnet = var "faldet" ud i
.CommandText  strSQL
Nu får jeg så en:
Microsoft JET Database Engine (0x80040E07)
Datatyperne stemmer ikke overens i kriterieudtrykket.
når jeg når til .execute
Er det den "sædvanlige" at Materiale og Materialetype er tekst og Antal og IndholdID er tal?
Avatar billede eagleeye Praktikant
25. august 2002 - 22:52 #7
Ok hvis det er tal skal der ikke ' omkring i SQL. Der skal ' omkring tekst så SQL'en skal være:

  strSQL="update Indhold set Antal = " & Request.Form("Antal") & ", " 
  strSQL=strSQL & "Materiale=        '" & Request.Form("Materiale") & "', "
  strSQL=strSQL & "Materialetype=    '" & Request.Form("Materialetype") & "' "
  strSQL=strSQL & "WHERE IndholdID IN (" & Request.Form("IndholdID") & ");"
Avatar billede janette Nybegynder
25. august 2002 - 23:03 #8
Nu får jeg - Der er en syntaksfejl i UPDATE-sætningen.
Avatar billede eagleeye Praktikant
25. august 2002 - 23:06 #9
Kan du prøve at udskrive SQL sætningen så kan det måske hjælpe lidt.:
Response.write strSQL
Avatar billede janette Nybegynder
25. august 2002 - 23:13 #10
update Indhold set Antal = 10, 9, 15, 3, 1, 15, 1, 1, 1, Materiale= 'Jonglerings tallerkener m/pind, Jongleringstørklæder, Ringe - 240 mm - farvede, Junior kegler, Mellem gummi diabole + 2 pinde m/snor, Skindbolde, Kassettebånd med musik, Lynkursus i Jonglering, Gadegøjl', Materialetype= 'prøve, Prøve, , , , , , (hæfte), ' WHERE IndholdID IN (1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107);
Avatar billede eagleeye Praktikant
25. august 2002 - 23:19 #11
Ok.. du kan ikke opdater flere recordset med forskellige data på engang. Man kan updater mange recordset på en gang med det skal være det samme man putter i eks:

UPDATE tabel SET kolnavn = 'Ny linie' WHERE ID IN (10,34,567)

Hvis du vil opdater flere så må du lave et loop som tager en SQL af gangen..
Avatar billede janette Nybegynder
25. august 2002 - 23:31 #12
Ok - det vil jeg så gå i gang med at finde ud af.
Hvis det ikke kan lade sig gøre er det vel også derfor, at jeg ikke har kunne finde eksempler på det nogen steder.
Du har nu alligevel hjulpet mig et stykke på vej - så endnu en gang
Tak for hjælpen
Avatar billede eagleeye Praktikant
25. august 2002 - 23:39 #13
Eks kunne være hivs du har en form med flere "producter" som skal rettes så kan du brugen den for du har men give input felterne med navnet som idag + IndholdsID..:
<input type="text" name="Materialetype<%=rs("IndholdID")%>>

Det enste felt som skal være som idag IndeholdID så du beholder din liste med IDs som skal opdateres ...


Så kan opdatering koden ligen dette:

'Hendt lise med ID:
IDer = request.form("indholdID")
'Lav det om til et array med ID'er
IDlist = Split(IDer,",")
'lav loop som opdater
for i = lbound(IDlist) to Ubound(listID)
  id = trim(IDlist(i))

  strSQL="update Indhold set Antal = " & Request.Form("Antal" & id) & ", " 
  strSQL=strSQL & "Materiale = '" & Request.Form("Materiale" & id) & "', "
  strSQL=strSQL & "Materialetype = '" & Request.Form("Materialetype" & id) & "' "
  strSQL=strSQL & "WHERE IndholdID =  " & id & ";"

  'Udfør SQL med en connection
  Conn.execute (strSQL)
next
Avatar billede janette Nybegynder
25. august 2002 - 23:49 #14
Det prøver jeg lige
Avatar billede eagleeye Praktikant
25. august 2002 - 23:51 #15
Ok.. Jeg smutter i seng nu..
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