28. juli 2005 - 13:40Der er
12 kommentarer og 1 løsning
Send mail på status af SQL update
Jeg har lavet en funktion (ASPmail) der skal sende en mail med info omkring de opdateringer der er foretaget.
Som seudo kode ser det ud som følger:
sql = update table set navn = gunnar, adresse = gunnarsvej...
msg.BodyText = "Brugeren har opdateret navn og adresse"
Ovenstående er der sådanset ikke så meget i. Der hvor jeg bliver i tvivl er: I mailen skal der kun stå de steder hvor der er sket ændringer. Dvs. hvis gunnar og hed gunnar før, så skal der ikke stå noget om gunnar i mailen.
Jeg kan naturligvis lave en sammenligning af den gamle post og den nye post, men da jeg har omkring 50 kolonner ville jeg gerne undgå dette. Findes der ikke en eller anden SQL funktion eller noget der kan kalde præcis de atributter der er blevet opdateret.
så blive der sgu meget arbejde hvis det ikke kan lade sig gøre. Først kalde alt i recorden inden opdatering, så bagefter, og siden sammenligne hver enkelt attribut!.. puha.. :(
At hive en række ud med 50 felter og sammenligne på dem Tja, meget arbejde, men 50 sammenligninger går nu rimelig hurtigt Det var noget andet hvis du skulle hive 1000 rækker ud med 50 i hver
Nej det gør der ikke. Problemet ligger også i hvordan den skulle sende disse oplysninger tilbage igen til dig.
Det vil desuden også være alt for tidskrævende for databasen at undersøge om værdien er anderledes end den eksisterende inden da opdatere, de det er nemmere bare at updatere alle felter.
Men prøv og vent og se lidt om nogen har en klog ide Jeg er ikke super database ekspert Er det access i øvrigt? For der er jo lidt forskel på alle databaser :o) Men access kan man jo åbne på kryds og tværs, så måske nogen kender et godt trick Jeg har bare aldrig hørt om det
Jeg tror også du gør det sværre end det er. Jeg har lavet et system hvor opdaterede felter skulle være røde. Jeg har dog lige fået en ide til hvordan man kan gøre det bedre end jeg gjorde. Dette er seudo kode:
set rs1 = conn.execute("select * from enTabel where id=123") set rs2 = Server.CreateObject("ADODB.RecordSet") rs2.Open "select * from enTabel where id=123", Conn, 1 rs2("navn") = "vfsd" rs2("add") = "vfdl" ... ... rs2.update()
Så skulle du gerne have de gamle oplysninger i rs1 og de nye i rs2. Du kan evt løbe kolonnerne igennem med en for løkke og bruge kolonnenummeret i stedet for navnet. På den måde kan du udvide tabellen, uden det får betydning for din koden.
ps. Har aldrig bruge recordset.update() metoden før, så jeg er ikke 100% sikker på at det er rigtig syntax.
for f=0 to 50 if rs1(f) <> rs2(f) then response.write "forskeld" next
Man må kunne hente antal kolonner, så du er fri for at skrive 50, ellers kan der laves noget "on error...". Og jeg ved man kan trække kolonne navnet ud, hvis du vil have det med på beskeden også.
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.