13. maj 2008 - 15:00Der er
15 kommentarer og 1 løsning
simpel sql til sql i asp
Nedenstående SQL kan jeg fint køre i en query: SELECT * FROM CerfTbl D WHERE DateFld = ( SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = D.CertNo ) ORDER BY CertNo, DateFld;
Når så jeg skal lave den om til brug i en asp side får jeg denne fejl:
ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal.
Kode jeg bruger i min asp side: SQL = "SELECT * FROM CerfTbl D WHERE DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = D.CertNo) ORDER BY CertNo, DateFld"
'Sort field QStrSF = Trim(Request.QueryString("sf")) 'Sort order QStrSO = Trim(Request.QueryString("so"))
'From date QStrFromDate = Trim(Request("fd"))
'To date QStrToDate = Trim(Request("td"))
'Search date field QStrDateField = Trim(Request("datefield"))
If QStrDateField <> "" Then If CStr(QStrDateField) = "DateFld" Then StrRadioDateFldChecked = "CHECKED" ElseIf CStr(QStrDateField) = "ExpireDateFld" Then StrRadioExpDateFldChecked = "CHECKED" End If
If IsDate(QStrFromDate) AND IsDate(QStrToDate) Then StrWhere = QStrDateField & " >= '" & SQLDateFormated(CDate(QStrFromDate)) & "' AND " & QStrDateField & " <= '" & SQLDateFormated(CDate(QStrToDate)) & "'" End If Else StrRadioDateFldChecked = "CHECKED" End If
If QStrOrderConcerning <> "" Then StrWhere = "DataFld36 like '%" & QStrOrderConcerning & "%'" End If
If QStrSO <> "" Then SortOrder = QStrSO If CStr(UCase(SortOrder)) = "ASC" Then SOInverted = "DESC" Else SOInverted = "ASC" End If Else SortOrder = "ASC" SOInverted = "DESC" End If
If QstrSF <> "" Then SortField = QStrSF Else SortField = "DateFld" End If
Response.Write "<SCRIPT LANGUAGE=""JavaScript"">" & vbcrlf Response.Write "function Confirm(URL, txt)" & vbcrlf Response.Write " {" & vbcrlf Response.Write " if(confirm(""Are you sure you want to delete this certificate - ""+txt+"" - including any sub-certificates?"")) location.href = URL;" & vbcrlf Response.Write " }" & vbcrlf Response.Write "function ConfirmSub(URL, txt)" & vbcrlf Response.Write " {" & vbcrlf Response.Write " if(confirm(""Are you sure you want to delete this sub-certificate?"")) location.href = URL;" & vbcrlf Response.Write " }" & vbcrlf Response.Write "</SCRIPT>" & vbcrlf
'12122007 iPageSize = ConstCertlistPagingSize ' You could easily allow users to change this If Request.QueryString("pg") = "" Then iPageCurrent = 1 Else iPageCurrent = Int(Request.QueryString("pg")) End If Set Rs = Server.CreateObject("ADODB.Recordset")
If StrWhere <> "" Then SQL = "SELECT * FROM CerfTbl X WHERE DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = X.CertNo) ORDER BY CertNo, DateFld"
Else 'List all certificates for this customer SQL = "SELECT * FROM CerfTbl X WHERE DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = X.CertNo) ORDER BY CertNo, DateFld"
'12122007 iPageCount = Rs.PageCount intRecordCount = Rs.RecordCount ' If the request page falls outside the acceptable range, ' give them the closest match (1 or max) If iPageCurrent > iPageCount Then iPageCurrent = iPageCount If iPageCurrent < 1 Then iPageCurrent = 1
If Rs.EOF or intRecordCount = 0 Then Response.Write "<pre>No certificates found</pre>" & vbcrlf Else '12122007 ' Move to the selected page Rs.AbsolutePage = iPageCurrent ' Start output with a page x of n line Response.Write "<p>" Response.Write "<font face='Verdana' size='2' color='#000000'>Page <strong>" & iPageCurrent & "</strong>" Response.Write " of <strong>" & iPageCount & "</strong></font>" Response.Write "</p>"
If Rs("NoOfSubCerfs") > 0 Then Response.Write " <tr style='background-color: " & CellColor & ";'>" & vbcrlf Response.Write " <td><font face='Verdana' size='1' color='#000000'> </font></td>" & vbcrlf Response.Write " <td colspan='8'><font face='Verdana' size='1' color='#000000'>" SQL = "SELECT * FROM CerfTbl WHERE (FatherCertNo = '" & Rs("CertNo") & "')" Set RsSub = Conn.Execute(SQL) While NOT RsSub.EOF Response.Write "<img src='img/down.gif' align='absmiddle'> <a href='cerflib/" & RsSub("DataFld02") & "' target='_blank' title='Get this sub-certificate'>" & RsSub("DataFld01") & " (" & RsSub("DateCreated") & ")</a> " & vbcrlf ' <img src='img/icon_delete.gif' border='0' align='absmiddle' OnClick=""ConfirmSub('deletesubcerf.asp?RecID=" & RsSub("RecID") & "');"" title='Delete this sub-certificate'></a> RsSub.MoveNext() Wend Set RsSub = Nothing Response.Write " </font></td>" & vbcrlf Response.Write " </tr>" & vbcrlf End If
Rs.MoveNext If Rs.EOF Then Exit for Next
Response.Write "</table>" & vbcrlf
'12122007 If iPageCurrent > 1 Then Response.Write "<font face='Verdana' size='2' color='#000000'><a href='cerflist.asp?pg=" & iPageCurrent - 1 & "&" & Replace(Request.QueryString, "pg=" & iPageCurrent & "&", "") & "'>[<< Prev]</a> </font>" End If
If iPageCount > 1 Then For I = 1 To iPageCount If I = iPageCurrent Then Response.Write "<font face='Verdana' size='2' color='#000000'><b>" & I & "</b> </font>" Else Response.Write "<font face='Verdana' size='2' color='#000000'><a href='cerflist.asp?pg=" & I & "&" & Replace(Request.QueryString, "pg=" & iPageCurrent & "&", "") & "'>" & I & "</a> </font>" End If Next 'I End If
If iPageCurrent < iPageCount Then Response.Write "<font face='Verdana' size='2' color='#000000'><a href='cerflist.asp?pg=" & iPageCurrent + 1 & "&" & Replace(Request.QueryString, "pg=" & iPageCurrent & "&", "") & "'>[Next >>]</a></font>" End If
Hvor er det i den mega lange kodeblok fejlen opstår (fejlbeskeden må indeholde et linienr og så må du lige angive hvor det rent faktisk er i det du har postet)...?
Har sku fundet fejlen. Den anmoder om noget jeg slet ikke har i min kode. Kan du hjælpe med at flette:
SQL = "SELECT * FROM CerfTbl D WHERE DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = D.CertNo) ORDER BY CertNo, DateFld"
Ind i: SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo AND Disabled = 0)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null AND Disabled = 0 AND RefCustNo = '" & Session("SessionCustNo") & "') ORDER BY " & SortField & " " & SortOrder
Så er du nok nød til at fortælle lidt mere om hvad du vil have ud af det og hvordan din datastruktur ser ud, for jeg kan ikke lige gennemskue det ud fra de to linier SQL-kode...
Den tidligere sql-streng (nedenstående) har hidtil givet det output jeg skulle bruge, nu er det så således at der kan være 10 records med samme CertNo men jeg er kun interesseret i det sidste nye output (bestemt pr. dato - datafld) så alle andre end sidste nye record skal skjules. SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo AND Disabled = 0)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null AND Disabled = 0 AND RefCustNo = '" & Session("SessionCustNo") & "') ORDER BY " & SortField & " " & SortOrder
Der må vist kun gives point én gang (da det ikke er lovligt at have to spørgsmål åbne om samme emne), så du giver bare point på dette og tager pointene på det andet selv... :)
Hej Softspot, har lige fundet ét megaproblem. Før jeg fik tilrettet min streng kunn jeg godtr søge på den, dvs. hvis jet søgte på alle cert der indeholdte det der havde 1 i sig så viste den mig alle dem der havde 1 i sig. Nu viser den mig også dem der har 2 og 3, ja faktisk alt. Nogen idé om hvorfor den gør det ?
Gamle streng: 'SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo AND Disabled = 0)) as NoOfSubCerfs FROM CerfTbl x WHERE (" & StrWhere & " AND FatherCertNo Is Null AND Disabled = 0 AND RefCustNo = '" & Session("SessionCustNo") & "') ORDER BY " & SortField & " " & SortOrder
Nye Streng: SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo AND Disabled = 0)) AS NoOfSubCerfs FROM CerfTbl x WHERE (DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE CertNo = x.CertNo) AND FatherCertNo Is Null AND Disabled = 0 AND RefCustNo = '" & Session("SessionCustNo") & "') ORDER BY " & SortField & " " & SortOrder
Umiddelbart ser det ud til at du mangler at flette StrWhere ind i den nye streng, altså:
SQL = "SELECT x.*, (SELECT COUNT(RecID) FROM CerfTbl WHERE (FatherCertNo = x.CertNo AND Disabled = 0)) AS NoOfSubCerfs FROM CerfTbl x WHERE (DateFld = (SELECT MAX (DateFld) FROM CerfTbl WHERE (" & StrWhere & ") AND CertNo = x.CertNo) AND FatherCertNo Is Null AND Disabled = 0 AND RefCustNo = '" & Session("SessionCustNo") & "') ORDER BY " & SortField & " " & SortOrder
StrWhere SKAL så indeholde nogle kriterier for ellers ender du med at få en syntaksfejl!
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.