Avatar billede Slettet bruger
29. marts 2005 - 11:55 Der er 28 kommentarer og
1 løsning

Den vil ikke slette række i Access. Hvorfor mon?

Hejsa.

Jeg har et script, hvor folk kan tilmelde og afmelde sig. Men afmelde-funktionen fungerer desværre ikke. Og jeg kan altgså ikke gennemskue hvorfor.
Hvem kan hjælpe mig?

Her er et udpluk af de relevante koder:
==========================================
mailnews.asp :

              if unsign <> "" then ' Frameldes
          send = 1
          URLconf = Map & "confirm.asp?unsign=" & rsIDpas 
                TopTxt = Replace(rs("TopTxt"),"[Username]",rsThis("Name"))
                  Subject = rs("ConfUnsignsubj")
          ord = rs("ConfTxtUnsign")
                end if
    Case false '---Hvis den ikke er bekræftet.
      if sign="yes" then ' Tilmeldes
        SQL = "UPDATE mailinglist SET Timenow = '" & Timenow & "' WHERE Emailad = '" & Emailad & "';"
        Conn.Execute(SQL)
        Response.Write ("" & Emailad & " er allerede tilmeldt, men du har ikke bekræftiget velkomstmailen, som du bedes gøre indenfor 48 timer.")
        send = 1
        URLconf = Map & "confirm.asp?sign=" & rsIDpas 
        Subject = rs("ConfSignsubj")
        ord = rs("ConfTxtSign")
                TopTxt = Replace(rs("TopTxt"),"[Username]","")
      End if
      if Unsign="yes" then ' Frameldes
        Response.Write ("Denne E-mail: " & Emailad & " er nu frameldt." & vbCrlf)
        send=0
      End if
    End Select

==========================================
Header.asp :

<% @LANGUAGE = VBscript %>
<% Option Explicit %>
<%
Response.buffer=True
Server.ScriptTimeout = 1000
Session.Timeout = 40
%>
<!-- #INCLUDE FILE="db.inc" -->
<%

'Dim af variabler sikrer de staves korrekt og optimerer hastigheden

Dim rsThis,Sender,BodyTextto,Sendername,smtpserver,Subject,Priority,Mailtype, UsernameEmail, PasswordEmail,modifyArray, i
Dim Months,Days,Hours,Minutes,Seconds,Years,Timenow,Timeout,OutDate,mode,ord,slet,Felt, NewStr, Estr
Dim OutTime,dbname,conn,SQL,Pos,Map,Unsign,Sign,Emailad,password,bodytext,com, ReturnedT
Dim Name,LName,action,Confirm,send,URL,IDpas,rsIDpas,conf,URLConf,rsConfirm,rs
Dim Charset,Importance,orderstr, sort, newPost, count, order, status, dbpath
Dim Confsignsubj, ConfTxtsign, ConfUnSignsubj, ConfTxtUnsign, TopTxt, BottTxt,intRecCount, intPageCount,intPage, intNum

   
    Function ConvertDate(dtmDate)
    Months = right("00" & DatePart("m", dtmDate) ,2)
    Days = right("00" & DatePart("d", dtmDate) ,2)
    Hours = right("00" & DatePart("h", dtmDate) ,2)
    Minutes = right("00" & DatePart("n", dtmDate) ,2)
    Seconds = right("00" & DatePart("s", dtmDate) ,2)
    Years = right(DatePart("yyyy", dtmDate), 2)

    OutDate = Years& "-" & Months & "-" & Days
    OutTime = Hours &"-"& Minutes &"-"& Seconds

    ConvertDate = OutDate & "-" & OutTime
  End Function

' Timer
Timenow = ConvertDate(NOW)
Timeout = ConvertDate(NOW-2)
Com = ""

' Connection
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(dbpath)

' Slet uvedkommende rækker
SQL = "DELETE FROM mailinglist WHERE Timenow <'" & Timeout & "' AND Confirm=0"
Conn.execute (SQL)
' Lav den rette sti
URL="http://" & Request.ServerVariables("SERVER_NAME") & Request.Servervariables("URL")
Pos =InstrRev(URL, "/", -1, 1)
Map = Left(URL,Pos)

' Hent konfigurationen ud!
SQL = "SELECT * FROM config WHERE Testcomp=1;"
Set rs = Conn.execute (SQL)

If NOT (rs.BOF AND rs.EOF) then
  smtpserver = rs("Smtpserver")
    Sender = rs("Sender")
    SenderName= rs("Sendername")

    ' Importance values:
    '1 - Normal or 2 - High
    Importance = rs("Priority")

    'Mail type values:
    'ASPEmail - 1
    'ASPMail - 2
    'aspSmartMail - 3
    'Chili!Mail - 5 / CDONTS
    'DundasMailer - 4
    'JMail - 6
UsernameEmail= rs("UsernameEmail")
PasswordEmail= rs("PasswordEmail")

    Mailtype = rs("Mailtype")
    Password = rs("Password")
    TopTxt = rs("TopTxt")
    BottTxt = rs("BottTxt")
else
    Response.Write("<h2 align=""center"">Desværre, opsætningen er ikke færdig.</h2>")
    Response.End
End if

Unsign= Request("Unsign")
Sign= Request("Sign")
bodytext = Request.form("bodytext")
mode= Request("mode")
action = Request.QueryString("action")
IDPas = Request.QueryString("IDpas")
sort = Request.QueryString("sort")
status = Request.QueryString("status")
Name = Request.form("Name")
LName =Lcase(Name)
Emailad = LCase(Request.form("Emailad"))
Confirm=0
%>

==========================================

Hejsa igen: extend
Avatar billede Slettet bruger
29. marts 2005 - 11:59 #1
NOTE:

Tabellen i Access-databasen hedder "maillinglist" og ser sådan ud:
Kolonner:
- ID
- Timenow
- Confirm
- IDpass
- Name
- ReturnedT
- Emailad

Kan det mon hjælpe?
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:01 #2
er det den her der ikke bliver gennemført korrekt:

SQL = "DELETE FROM mailinglist WHERE Timenow <'" & Timeout & "' AND Confirm=0"
Conn.execute (SQL)
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:01 #3
får du nogen fejl?
Avatar billede Slettet bruger
29. marts 2005 - 12:03 #4
Nej, inden fejlmedelelser, den sletter bare ikke den ønskede række i databasen.
Det er som om, at den overhovedet ikke har fået besked på at slette rækken.
Avatar billede Slettet bruger
29. marts 2005 - 12:05 #5
Ja, det er den dér som ikke bliver gennemført korrekt.
jeg tror også at det er på de linier, at fejlen ligger... jeg kan bare ikke lige gennemskue hvorfor.
Avatar billede skyggen2000 Nybegynder
29. marts 2005 - 12:06 #6
Er du sikker på din SQL bliver eksekveret? Prøv lige at debug dig ned til linien og verificer.
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:07 #7
hvis du får inkludere headerfien rigtigt i den fil du kører, så bliver sætningen kørt. du husker at den først sletter mails der er mere end 2 dage gamle i forhold ti ldatoen på serveren?
Avatar billede Slettet bruger
29. marts 2005 - 12:14 #8
Øhhhh.... jeg er altså ikke ret god til dette her...

debug ved jeg ikke hvordan man gør.

Headerfilen er includeret korrekt, for jeg kan godt oprette brugere med samme headerfil, mener jeg. Jeg chekker om 1 min.

Du skriver: "...den først sletter mails der er mere end 2 dage gamle i forhold til datoen på serveren"
jeg har ingen mails i databasen. Kun brugere, som kan tilmelde og afmelde sig.
Men hvis problemet består af, at brugerne ikke bliver slettet før efter 2 dage, hvordan kan jeg mon så lave det om? Det er nemlig ikke særligt godt, synes jeg.
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:20 #9
gemmer du brugerne i den tabel der hedder mailinglist?

grunden til at scriptet er lavet så der går to dage inden mailadressen slettes skyldes at brugerne får 2 dage til at bekræfte deres mailadresse. Hvis du vil rettes på det, så den bliver slettet med det samme, så retter du Timeout = ConvertDate(NOW-2)  til Timeout = ConvertDate(NOW)
Avatar billede kalp Novice
29. marts 2005 - 12:21 #10
kan du angive ID i sql'en ? måske hjælper det
Avatar billede kalp Novice
29. marts 2005 - 12:23 #11
SQL = "DELETE FROM mailinglist WHERE Timenow <'" & Timeout & "' AND Confirm=0 WHERE id="&id "

fx kræver at du kan hive ID ned i den.. eller kan jeg bare ikke lige se hvordan din sql skal vide hvad den skal slette
Avatar billede Slettet bruger
29. marts 2005 - 12:25 #12
Ja, jeg gemmer brugerne i tabellen der hedder mailinglist.

AHA! Så jeg retter bare "Timeout = ConvertDate(NOW-2)  til Timeout = ConvertDate(NOW)"?
Lyder dejligt nemt!
Men hvor pokker fandt du den linie henne? Jeg leder og leder, men jeg kan ikke lige umiddelbart finde den...
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:32 #13
den sår i Header.asp
Avatar billede Slettet bruger
29. marts 2005 - 12:39 #14
Ok, nu har jeg både fundet linien, udskiftet linien og testet.
Men desværre går den ikke, jeg får nu andre fejl i stedet for.

Der må en anden løsning til.

Angive ID i sql'en? Ja, men hvordan gør jeg det?
Avatar billede kalp Novice
29. marts 2005 - 12:43 #15
Du laver en variabel som du kalder id

fx
delim id

så skal du enten sende id'et med i url'en eller via. en form.. afhængig af hvordan man havner på afmeldingssiden. Hvis det bare er et link via. email kan url'en se sådan her ud

test?id=<IDVARIABEL>

så kan du hive den ned på denne måde

id = Request.QueryString("id")

og anvende denne sql

SQL = "DELETE FROM mailinglist WHERE Timenow <'" & Timeout & "' AND Confirm=0 WHERE id="&id "


håber ikke det forvirrede dig.. men hvis du har lavet scriptet selv så ved du nok godt hvad jeg mener:)
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:43 #16
hvad for en fejl får du?
Avatar billede Slettet bruger
29. marts 2005 - 12:45 #17
Der står faktisk slet ingenting i IDén i tabellen. De eneste kolonner som bilver brugt, er:
- Timenow (viser oprettelsels-tidspunktet)
- Confirm (viser om man har klikket på linket i bekræftigelsels-mailen)
- IDpass (viser en unik "kode", som bruges i forbindelse med bekræftigelsels-mailen)
- Name (viser brugerens navn)
- ReturnedT (den viser bare et 0, og jeg aner ikke hvorfor)
- Emailad (viser e-mail-adressen på brugeren)

Kan det mon hjælpe?
Avatar billede kalp Novice
29. marts 2005 - 12:49 #18
Hvilket felt er primary key?
Avatar billede moejensen Nybegynder
29. marts 2005 - 12:49 #19
hele scriptet er bygget op, så det automatisk slette alle navne/email der ikke er bekræftet efter 2 dage. Det er det der sker idisse linier:

SQL = "DELETE FROM mailinglist WHERE Timenow <'" & Timeout & "' AND Confirm=0"
Conn.execute (SQL)

har du lavet meget om i scriptet i forhold til den riginale version der ligger på active developer?
Avatar billede Slettet bruger
29. marts 2005 - 12:52 #20
kalp:
Nej, jeg har ikke selv lavet scriptet. Det er ellers kanongodt, med alle de funktioner jeg ønsker mig. Bortset fra den ene fejl med, at brugeren ikke bliver slettet igen (før evt. efter 2 dage...). Og det er jeg ikke tilfreds med.

Kan du ikke venligst sætte dit forslag ind i det eksisterende cript? Så jeg kan teste det.


moejensen:
Jeg kan pludselig ikke logge mig ind mere. Og ved en nyoprettelse, genkender den ikke E-mail-adressen mere.
Derefter stoppede jeg, og uploade den "gamle" kode igen.

Jeg kan sende jeg et link, så I selv kan prøve at logge ind osv. hvis I har lyst?
Avatar billede Slettet bruger
29. marts 2005 - 12:59 #21
Primery key ligger i en helt anden tabel, og der er ingen relationer imellem tabellerne (der er 3 ialt).
Altså ingen primery key i den aktuelle tabel.
Skal jeg uploade databasen, så I kan se? Det er en Access 2003 som fylder 172 kb.

Nej, jeg har ikke lavet særligt meget om på scriptet. Ikke noget som skulle ødelægge funktionerne, mener jeg.
Ligger det orginale script på active developer? Jeg kan nemlig ikke selv huske, hvor jeg havde det fra. Men har du nogen erfaringer med det script, og evt. en løsning på den fejl jeg har, siden du kan huske det?
Avatar billede kalp Novice
29. marts 2005 - 13:00 #22
extend >> hvis det skal ske per automatik så vil det ikke virke desværre jeg troede mere at det var når en person bevidst gik ind for at afmelde sig
Avatar billede Slettet bruger
29. marts 2005 - 13:05 #23
kalp:
Jammen, det er søremig også når en bruger bevidst selv går ind og vil slette sig selv, at scriptet ikke virker ordentligt.

Egentligt burde det være så nemt, bare at slette en bruger, ikke også?
Avatar billede moejensen Nybegynder
29. marts 2005 - 13:09 #24
scriptet ligger her: http://activedeveloper.dk/download/default.asp?mode=showdownload&id=587

du bør nok hente det og få det ti lat virke først inden du retter i det. Hele humlen med scriptet er netop at brugerne skal confirme deres email, så derfor skal mailen jo ikke slettes med det samme.
Avatar billede Slettet bruger
29. marts 2005 - 13:22 #25
moejensen:
Dejligt med det orginale link! Tak!

Men alting virker, også selve confirm-delen. Blot kan jeg se, at på trods af at brugeren får besked på at brugeren ER slettet (tilmed får brugeren besked via E-mail), men brugeren altså ikke slettet fra databsen alligevel.

Dybest set kan jeg være ligeglad, men jeg synes ikke at man kan være det bekendt overfor brugerne. Jeg ville nemlig ikke selv bryde mig om det.

Men hvilke erfaringer har du med scriptet, siden du kunne genkende det?
Avatar billede Slettet bruger
29. marts 2005 - 20:35 #26
Nå, men det ser ikke ud til, at der kommer en løsning på problemet.

Derfor lukker jeg spørgsmålet, for god ordens skyld.

MEN: Hvis nogen kan fixe problemet, så skriv! For så åbner jeg straks et nyt spørgsmål, for at kunne tildele points. Og jeg forhøjer gladeligt til 200 points!

Hejsa igen: extend
Avatar billede Slettet bruger
29. marts 2005 - 20:41 #27
.
Avatar billede Slettet bruger
29. marts 2005 - 20:41 #28
.
Avatar billede moejensen Nybegynder
29. marts 2005 - 20:55 #29
jeg vil meget gerne hjælpe dig, men det var mere for at der var en base at gå ud fra. Det er lidt svært når du tager fat i et script, hvor hele grund ideen i scriptet ikke er det du søger ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester