06. februar 2003 - 13:04Der er
19 kommentarer og 1 løsning
Update flere poster
Jeg skal hente ut dato fra databasen så oppdatere alle feltene med nye verdier utifra hvilken dato det står.
Scriptete jeg har ser slik ut. Den vil ikke oppdatere feltene.
<!--#include file ="../include/common.asp"--> <% dim adoCn dim strSQL set adoCn = Server.CreateObject("ADODB.Connection") adoCn.Open strConn
dim adoRs set adoRs = Server.CreateObject("ADODB.Recordset") strSQL = "SELECT Premie FROM tblBiler" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strOLDPREMIE = adoRs("Premie")
If Request.QueryString("Endre") = "YES" Then
strSQL = "UPDATE tblBiler SET Premie='" & Request.Form("txtAarspremie") & "' WHERE premie='" & strOLDPREMIE & "'" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strSQL = "SELECT COUNT (*) AS antall FROM tblbiler WHERE Premie='" & Request.Form("txtAarspremie") & "'" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strAntall = adoRs("antall")
For i=1 to strAntall strSQL = "SELECT BilID,GjelderFra FROM tblBiler" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
Dim strBilID strBilID = adoRs("BilID")
Dim strAarsPremie strAarspremie = Request.Form("txtAarspremie")
Dim strGjelderFra strGjelderFra = adoRs("GjelderFra")
Dim strSisteDag strSisteDag = "31/12/" & year(Date())
Dim strGetDager strGetDager = DateDiff("Y", strGjelderFra, strSisteDag)
Dim strPeriodePremie strPeriodePremie = Cstr(strAarsPremie) / 365 * Cstr(strGetDager)
If strPeriodepremie < strAarsPremie Then strPeriodePremie = strAarsPremie End if
AI bliver først for alvor en del af arbejdet, når teknologien integreres i den måde, vi arbejder på. At have adgang til AI betyder ikke nødvendigvis, at medarbejderne er klar til at bruge den.
Hvis strPeriodePremie og strAarsPremie er tekst er du nød til at konveretere til Int når du sammenliger de to i if sætningen her, eller vil de ikke blive sammenlignet som to tal:
If strPeriodepremie < strAarsPremie Then strPeriodePremie = strAarsPremie End if
Så det bliver: If Int(strPeriodepremie) < Int(strAarsPremie) Then strPeriodePremie = strAarsPremie End if
Var ikke det jeg mente! Fant ut av det selv! Du skal få 50 point! er det greit!
<% dim adoCn dim strSQL set adoCn = Server.CreateObject("ADODB.Connection") adoCn.Open strConn
dim adoRs set adoRs = Server.CreateObject("ADODB.Recordset") strSQL = "SELECT Premie FROM tblBiler" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strOLDPREMIE = adoRs("Premie")
If Request.QueryString("Endre") = "YES" Then
strSQL = "UPDATE tblBiler SET Premie='" & Request.Form("txtAarspremie") & "' WHERE premie='" & strOLDPREMIE & "'" & " OR premie is null" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strSQL = "SELECT BilID,GjelderFra FROM tblBiler" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
i = 1 Do While NOT adoRs.EOF
Dim strBilID strBilID = adoRs("BilID")
Dim strAarsPremie strAarspremie = Request.Form("txtAarspremie")
Dim strDato strDato = adoRs("GjelderFra")
strDay = Day( strdato ) if len(strDay) = 1 then strDay = "0" & strDay end if
strMonth = Month( strdato ) if len(strMonth) = 1 then strMonth = "0" & strMonth end if
strYear = Year( strdato ) if len(strYear) = 1 then strYear = "0" & strYear end if
<% dim adoCn dim strSQL set adoCn = Server.CreateObject("ADODB.Connection") adoCn.Open strConn
dim adoRs set adoRs = Server.CreateObject("ADODB.Recordset") strSQL = "SELECT Premie FROM tblBiler" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strOLDPREMIE = adoRs("Premie")
If Request.QueryString("Endre") = "YES" Then
strSQL = "UPDATE tblBiler SET Premie='" & Request.Form("txtAarspremie") & "' WHERE premie='" & strOLDPREMIE & "'" & " OR premie is null" set adoRs = adoCn.Execute(strSQL) Set strSQL = Nothing
strSQL = "SELECT BilID,GjelderFra FROM tblBiler" set adoRs = adoCn.Execute(strSQL) strSQL = ""
i = 1 Do While NOT adoRs.EOF
Dim strBilID strBilID = adoRs("BilID")
Dim strAarsPremie strAarspremie = Request.Form("txtAarspremie")
Dim strDato strDato = adoRs("GjelderFra")
strDay = Day( strdato ) if len(strDay) = 1 then strDay = "0" & strDay end if
strMonth = Month( strdato ) if len(strMonth) = 1 then strMonth = "0" & strMonth end if
strYear = Year( strdato ) if len(strYear) = 1 then strYear = "0" & strYear end if
Scriptet kjører ca 250 poster så får jeg feilmeldingen:
Active Server Pages, ASP 0113 (0x80004005) The maximum amount of time for a script to execute was exceeded. You can change this limit by specifying a new value for the property Server.ScriptTimeout or by changing the value in the IIS administration tools.
Vet jeg kan sette Server.ScriptTimeout = 500 men er det noen annen måte så scriptet går raskere? Kan bli mange tusen poster i databasen. I dag er det kun ca 500
Ja du kan sætte Server.ScriptTimeout høje op hvis du har mange data som skal behandles. Det er angivet i sekunder, Server.ScriptTimeout = NumSeconds
Det er svært at sige hvad man præsis kan gøre for at få et hurtigere script, generelt skal man undgå for mange tilgange til databasen, det har du hold på et minimum i loopet.
En anden ting kunn være hvis der var flere record med forskelligt BilID men skal havde samme værdi i PeriodePremie kunne man måske prøve at lave scriptet så det kan opdatere flere recordset i samme SQL:
strSQL = "UPDATE tblBiler SET PeriodePremie='" & formatnumber((strPeriodePremie),0) & "' WHERE BilID='441' OR BilID='2' OR BilID='87'"
Ja men det giver det samme som at loope gennem hele recordset'et på en gang. Eller skal man på en eller anden måde lave det sådan at scriptet reloades for hver 100 opdateringer..
i = 0 do while not rs.EOF AND i < 100 rs.Movenext i = i + 1 next if i = 100 AND NOT rs.EOF then Response.redirect "sammeside.asp?ID=" & i end if
Men så skal request.form teksten også overføres på en måde,jeg tror det bliver svært at styre.
Synes godt om
Ny brugerNybegynder
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.