låt oss säga att jag har en tabell med dessa fält:
F_Namn*
F_Address
F_Persnr*
F_Lag
F_Styrelse
Fälten med (*) är redan ifyllda.
Nu har jag ett formulär där man ska skriva in om man är med i nån styrelse, men då vet man ju sällan personnr på den personen så det man kan fylla i där är Namn, Address, Personnr, styrelse.
Jag vill av dessa kunna utfärda en så exakt SQL-sats som möjligt, för att kunna se om jag ska uppdatera en befintlig post eller om jag ska göra en helt ny.
Det börjar låta krångligt så jag visar ungefär hur jag tänkt mig:
strNamn = Request.Form("namn")
straddress = Request.Form("address")
strPersnr = Request.Form("persnr")
strLag = Request.Form("lag")
strStyrelse = Request.Form("stryrelse")
strSQL = "SELECT * FROM TABELLEN WHERE [b]det är här det börjar, om strNamn inte är tomt skall det sökas på[/b] F_Namn = '"&strNamn&"' AND [b]och om strAddress inte är tomt skall det sökas även där[/b] F_Address = '"&strAddress&"'....osv osv...hur
skriver jag nått sånt ??
eller förstår ni vad jag menar överhuvudtaget.. ;)
strSQL = "SELECT * " &_
" FROM TABELLEN " & _
" WHERE 1 = 1 "
if strName <> "" then
strSQL = strSQL & " and f_name = '" & strname & "'"
end if
if strAdress <> "" then
strSQL = strSQL & " and f_adress = '" & stradress & "'"
end if
'och så vidar
Hur menar du egentligen?
Du borde väl endast göra en update om värdet har förändrats gentemot databasen. Det kan du åstadkomma genom att ha de gamla värdena som hidden som du jämför med.
Låt oss ta följande exempel:
jag tar och kör en select:
strSQL = "SELECT F_Namn, F_Address, F_Telefon WHERE PersonID = "&intPersonID&""
Set ObjRS = ObjConn.execute(strSQL)
Då får jag fram att jag har värden i F_Namn och F_Address ....men i det nya formuläret så har jag även fyllt i telefonnummret så jag skulle vilja uppdatera db med det.
strSQL = "SELECT F_Namn, F_Address, F_Telefon from t WHERE PersonID = "&intPersonID&""
Set ObjRS = ObjConn.execute(strSQL)
strTel = request.form("telefon")
if not ObjRS.eof then
if strTel <> ObjRS("F_telefon") then
ObjConn.execue "update t set telefon = '" & strTel & "' where PersonID = " & intPersonID ,,128
end if
end if
strSQL = "SELECT F_Namn, F_Address, F_Telefon from t WHERE PersonID = "&intPersonID&""
Set ObjRS = ObjConn.execute(strSQL)
strTel = request.form("telefon")
if not ObjRS.eof then
if strTel <> ObjRS("F_telefon") then
ObjConn.execue "update t set telefon = '" & strTel & "' where PersonID = " & intPersonID ,,128
if strAddress <> ObjRS("F_Address") then
ObjConn.execue "update t set address = '" & strAddress & "' where PersonID = " & intPersonID ,,128
end If
end if
end if
Nja, i så fall blir logiken något mer konvoluterad, det är ju onödigt att göra två update om båda fälten har ändrats.
strSQL = "SELECT F_Namn, F_Address, F_Telefon from t WHERE PersonID = "&intPersonID&""
Set ObjRS = ObjConn.execute(strSQL)
strTel = request.form("telefon")
if not ObjRS.eof then
sql = ""
if strTel <> ObjRS("F_telefon") then
sql = "update t set telefon = '" & strTel & "'"
end if
if strAddress <> ObjRS("F_Address") then
if sql = "" then
sql = "update t set address = '" & strAddress & "'"
else
sql = sql & ",address = '" & strAddress & "'"
end If
if sql <> "" then
sql = sql & " where personID = " & intPersonID
ObjConn.execute sql,,128
end if
end if