16. september 2004 - 11:55Der er
53 kommentarer og 1 løsning
Opdatere flere records af gangen
Hej Eksperter!
Jeg har et problem med at opdatere flere records af gangen.
Jeg har prøvet UPDATE SET, men kan ikke få det til at virke.
Min kode:
---------------------------
'Dimension variables Dim rsUpdateEntry 'Holds the recordset for the record to be updated Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (session("df")) lngRecordNo1 = (session("dt"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Create an ADO recordset object Set rsUpdateEntry = Server.CreateObject("ADODB.Recordset")
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" &
lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej' order by datoi; "
'Set the cursor type we are using so we can navigate through the recordset rsUpdateEntry.CursorType = 2
'Set the lock type so that the record is locked by ADO when it is updated rsUpdateEntry.LockType = 3
'Open the tblComments table using the SQL query held in the strSQL varaiable rsUpdateEntry.Open strSQL1, adoCon
'Write the updated recordset to the database rsUpdateEntry.Update
'Reset server objects rsUpdateEntry.Close Set rsUpdateEntry = Nothing Set adoCon = Nothing
Session.Contents.RemoveAll()
'Return to the update select page incase another record needs deleting Response.Redirect "default.asp"
Det er ikke nødvendigt med et recordset når du updatere. Og heller ikke en "order by"
StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'" adoCon.execute(StrSQL1)
Jeg kan ikke få det til at virke, jeg har har fjernet alle rsUpdateEntry recordsets.
Jeg erikke den største haj til dette...
'Dimension variables Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (session("df")) lngRecordNo1 = (session("dt"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" &
lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
adoCon.execute(StrSQL1)
'Reset server objects rsUpdateEntry.Close Set rsUpdateEntry = Nothing Set adoCon = Nothing
Session.Contents.RemoveAll()
'Return to the update select page incase another record needs deleting Response.Redirect "default.asp"
Du har et linjeskift i din StrSQL1 opbygning. Den skal være ud i en eller samles med _ koden.
StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
eller: StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & _ lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
(klip og klister denne kode ind i din så kan du se det.)
Virker stadigvæk ikke, jeg har endda slået wordwrap fra på notepad, så den ikke skærer linjerne over.
Koden p.t.
----------------------- 'Dimension variables Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (session("df")) lngRecordNo1 = (session("dt"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = ja, datov = date, WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
adoCon.execute(StrSQL1)
'Reset server objects rsUpdateEntry.Close Set rsUpdateEntry = Nothing Set adoCon = Nothing
Session.Contents.RemoveAll()
'Return to the update select page incase another record needs deleting Response.Redirect "default.asp"
'Dimension variables Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (session("df")) lngRecordNo1 = (session("dt"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
adoCon.execute(StrSQL1)
'Reset server objects rsUpdateEntry.Close Set rsUpdateEntry = Nothing Set adoCon = Nothing
Session.Contents.RemoveAll()
'Return to the update select page incase another record needs deleting Response.Redirect "default.asp"
Min SQL: UPDATE test SET sendt = 'ja', datov = date WHERE datoi >= #02-11-2004# AND datoi <= #02-11-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'
Jeg tænkte lige, kunne det være datoformatet den vender om, hvis det er har jeg tidligere brugt dette med succes:
Function ConvertToSqlDate(dato) dim SQLYear,SQLMonth,SQLDay SQLYear = Year(dato) SQLMonth = Month(dato) SQLDay = Day(dato) if SQLDay<10 then SQLDay = 0&SQLDay end if if SQLMonth<10 then SQLMonth = 0&SQLMonth end if ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear End Function
Access formatet skal være mm-dd-yyyy eller yyyymmdd. Det kan også være fordi der ikke er nogen resultater at updatere. Det er jo kun dem med datoi = 02-11-2004 + de andre krav som bliver updateret.
Nu er jeg fuldstændig lost..... Der er bare et eller andet galt, som jeg ikke kan forstå. AmountRecords skal blive sat til det antal records der bliver berørt af sql-sætningen. Jeg har aldrig hørt/oplevet at den kan være tom. Den er altid 0 hvis der ikke er nogen records. Jeg bruger nemlig ofte en update/insert syntax, til at tjekke om en record eksistere, ellers skal den indsætte i stedet.
conn.execute "update EnTabel set .... where id="& ID, AmountRecords if AmountRecords = 0 then conn.execute("insert into EnTabel(..) values(..)") end if
Hvad sker der hvis du tager din SQL-sætningen (den som du udskrev på skærmen) og fyrer den af som en sql forespørgelses i Access???
Hvis den gør det i Access skal den også gøre det gennem ASP. Jeg er virkelig forviret nu. Har du et eller andet i koden som kan forhindre kørslen?? Kan ikke forestille mig hvad det skulle være, men det er det eneste jeg kan forestille mig nu.
Function LongYear() LongYear = Day(Date()) & "-" & Month(Date()) & "-" & Year(Date()) End Function
'Dimension variables Dim adoCon 'Holds the Database Connection Object Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (Request.Form("datofra")) lngRecordNo1 = (Request.Form("datotil"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
rsUpdateEntry.Close Set rsUpdateEntry = Nothing Set adoCon = Nothing
'Return to the update select page incase another record needs deleting 'Response.Redirect "default.asp"
%> <% Session.LCID = 1030 %>
</BODY> </HTML> -----------------------
Du skal foresten have tak for din fortsatte hjælp med denne her satan. :-)
Min SQL: UPDATE test SET sendt = 'ja', datov = date WHERE datoi >= #02-11-2004# AND datoi <= #02-11-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'
Men der sker intet i DB, jeg opgiver da snart dette..
Kan du overhoved lave en update???? Prøv at fyre din sql af i en forkortet udgave (evt i en ny test tabel), så skulle sendt gerne blive sat til ja i alle rækker:
Function LongYear() LongYear = Day(Date()) & "-" & Month(Date()) & "-" & Year(Date()) End Function
'Dimension variables Dim adoCon 'Holds the Database Connection Object Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (Request.Form("datofra")) lngRecordNo1 = (Request.Form("datotil"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test1.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = 'ja'"
Så skal vi have afprøvet det på den første database. Opret en table der hedder "updatetest" der, med samme felter som "test" tabellen fra test1.mdb. Og kør så:
Function LongYear() LongYear = Day(Date()) & "-" & Month(Date()) & "-" & Year(Date()) End Function
'Dimension variables Dim adoCon 'Holds the Database Connection Object Dim strSQL1 'Holds the SQL query for the database Dim lngRecordNo3 'Holds the record number to be updated
'Read in the record number to be updated lngRecordNo = (Request.Form("datofra")) lngRecordNo1 = (Request.Form("datotil"))
'Create an ADO connection odject Set adoCon = Server.CreateObject("ADODB.Connection")
'Set an active connection to the Connection object using a DSN-less connection adoCon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db\test3.mdb")
'Set an active connection to the Connection object using DSN connection 'adoCon.Open "DSN=test"
'Initialise the strSQL variable with an SQL statement to query the database StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date WHERE datoi >= #" & lngRecordNo & "# AND datoi <= #" & lngRecordNo1 & "# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
'Return to the update select page incase another record needs deleting 'Response.Redirect "default.asp"
%> <% Session.LCID = 1030 %>
</BODY> </HTML>
Får denne fejl:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /pz/ryk20.asp, line 39
StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date"
Laver fejl:
Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /pz/ryk20.asp, line 38
Jeg har udvidet den, men nu sker det ikke noget, jeg har opretter 2 records med hhv. datoi=02-11-2004 og datoi=11-02-2004.
Rows affected: 0 Min SQL: UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #02-11-2004# AND datoi <= #02-11-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access Driver] Syntax error in date in query expression 'datoi >= ##'. /pz/ryk20.asp, line 38
Men jeg har denne gange kørt ryk20.asp, uden at få nogen form data fra ryk10.asp, og så får jeg denne fejl:
Rows affected: 48 Min SQL: UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #02-11-2004#
Den har lagt sig ind på alle de datoer der er lig med eller større end 11. februar, så man skal nok bruge dit datokonverterings-script fra før:
Function ConvertToSqlDate(dato) dim SQLYear,SQLMonth,SQLDay SQLYear = Year(dato) SQLMonth = Month(dato) SQLDay = Day(dato) if SQLDay<10 then SQLDay = 0&SQLDay end if if SQLMonth<10 then SQLMonth = 0&SQLMonth end if ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear End Function
Denne virker: StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #11-02-2004# AND datoi <= #11-02-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
Rows affected: 3 Min SQL: UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #11-02-2004# AND datoi <= #11-02-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'
Så skal vi jo bare have dato'en til at blive dynamisk igen. Så nu skal du have form data med så vi kan få en værdi i lngRecordNo.
StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #"& ConvertToSqlDate(lngRecordNo) &"# AND datoi <= #"& ConvertToSqlDate(lngRecordNo) &"# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
StrSQL1 = "UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #"& ConvertToSqlDate(lngRecordNo) &"# AND datoi <= #"& ConvertToSqlDate(lngRecordNo1) &"# and kgbet ='nej' and ann ='nej' and sendt ='nej'"
Rows affected: 3 Min SQL: UPDATE test SET sendt = 'ja', datov = date() WHERE datoi >= #11-02-2004# AND datoi <= #11-02-2004# and kgbet ='nej' and ann ='nej' and sendt ='nej'
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.