Jag har gjort ett formulär där man skall kunna söka på 3 fält (companycode, datum till datum)
men jag vet inte hur jag ska formulera sqlsträngen som tar emot och kollar allt så att jag kan sortera det.
Companycode är alltså specifikt per företag så om jag söker på companycode: 145664 och 1999-12-31 till 2000-06-12
så skall den visa endast de poster som är reggade mellan dessa datum och som tillhör detta companycodenummer.
<%
companycode=Request.Form("companycode")
date1=Request.Form("date1")
date2=Request.Form("date2")
If len(trim(companycode))> 0 then
companycode= "%" & companycode & "%"
End If
If len(trim(date1))> 0 then
date1= "%" & date1 & "%"
End If
If len(trim(date2))> 0 then
date2= "%" & date2 & "%"
End If
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\rec.mdb"
If len(trim(companycode))> 0 then
SQLStmt = "SELECT * FROM recsys WHERE companycode LIKE '" & companycode & "' ORDER BY receiver"
If len(trim(date1)) and len(trim(date2)) > 0 then
SQLStmt = "SELECT * FROM recsys WHERE datereg BETWEEN date1 AND date2 order by datereg DESC"
End If
Set RS = Connection.Execute(SQLStmt)
%>
Kan nån hjälpa mig med koden som tar emot från formuläret?
If len(trim(companycode))> 0 then
SQLStmt = "SELECT * FROM recsys WHERE companycode LIKE '" & companycode & "'"
If len(trim(date1)) and len(trim(date2)) > 0 then
SQLStmt = SQLStmt & "AND (datereg BETWEEN date1 AND date2) order by datereg DESC"
Else
SQLStmt = SQLStmt & " ORDER BY receiver"
End If
Är dina datumfält av datatypen datum, så skall du ha # som omfamnar värdet... och du måste nog ha datatypen datum om du skall jämföra två datum...
If len(trim(date1))> 0 then
date1= "#" & date1 & "#"
End If
If len(trim(date2))> 0 then
date2= "#" & date2 & "#"
End If
Och skall du verkligen ha wildcards för företagskoden? det finns väl bara en specifik för varje... eller skall man kunna hämta ur flera företag? om inte:
If len(trim(companycode))> 0 then
companycode = companycode
End If
Alltså så skulle du kunna ta bort dom raderna...
Lycka till! :)
------------------
Det prasslas i säven www.webeye.nu
Det fungerar när jag söker på bara companycode... men söker jag på companycode, date1 och date2 samtidigt med värden som jag vet finns inlagda så får jag följande fel:
Microsoft OLE DB Provider for ODBC Drivers fel '80040e10'
[Microsoft][Drivrutin för ODBC Microsoft Access 97] För få parametrar angavs. 2 förväntades
Vad är fel?
Koden ser ut enligt följande nu:
companycode=Request.Form("companycode")
date1=Request.Form("date1")
date2=Request.Form("date2")
If len(trim(companycode))> 0 then
companycode = companycode
End If
If len(trim(date1))> 0 then
date1 = "#" & date1 & "#"
End If
If len(trim(date2))> 0 then
date2 = "#" & date2 & "#"
End If
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\databaser\login.mdb"
If len(trim(companycode))> 0 then
SQLStmt = "SELECT * FROM recsys WHERE companycode LIKE '" & companycode & "'"
If len(trim(date1)) and len(trim(date2)) > 0 then
SQLStmt = SQLStmt & "AND (datereg BETWEEN date1 AND date2) order by datereg DESC"
Else
SQLStmt = SQLStmt & "ORDER BY receiver"
End If
Set RS = Connection.Execute(SQLStmt)
If len(trim(companycode))> 0 then
SQLStmt = "SELECT * FROM recsys WHERE companycode LIKE '" & companycode & "'"
If len(trim(date1)) and len(trim(date2)) > 0 then
SQLStmt = SQLStmt & "AND (datereg BETWEEN " & date1 & " AND " & date2 & ") order by datereg DESC"
Else
SQLStmt = SQLStmt & "ORDER BY receiver"
End If
Annars så testa att skriva ut SQLsatsen så ser man lättare vad som är fel...
Byt
Set RS = Connection.Execute(SQLStmt)
Mot
Response.write SQLStmt
Det kommer inte att fungera, men du kommer att få en textsträng som du kan kolla igenom efter fel...
------------------
Det prasslas i säven www.webeye.nu
OK! Ersätt med koden nedan... och byt tillbaks till 'Set RS...'
If len(trim(companycode))> 0 then
SQLStmt = "SELECT * FROM recsys WHERE companycode LIKE '" & companycode & "'"
If len(trim(date1)) and len(trim(date2)) > 0 then
SQLStmt = SQLStmt & " AND (datereg BETWEEN " & date1 & " AND " & date2 & ") order by datereg DESC"
Else
SQLStmt = SQLStmt & "ORDER BY receiver"
End If
------------------
Det prasslas i säven www.webeye.nu