Avatar billede sp Nybegynder
27. oktober 2000 - 20:12 Der er 26 kommentarer og
1 løsning

Select og delete bestemte felter efter tid og dato i et felt

Hejsa,

Jeg har prøvet at trække oplysninger og slette rækker fra databasen ved at få den til at undersøge tidpunktet der er blevet indsat.

Problemet er bare at det ikke virker.
Enten får jeg nogle fejlmeldinger eller også sker der bare ikke noget.

SQL = \"DELETE * FROM mailingliste where Timenow =\'\" & Timeout & \"\'\"
conn.execute (SQL)

Timeout er så now.

SQL = \"SELECT * FROM mailingliste where Timenow =\'\" & Timeout & \"\'\"
set felt = conn.execute (SQL)

response.write felt(\"Email\")

Det virker ikke. Hvad gør jeg forkert?

vh Søren Peter

Avatar billede stigc Nybegynder
27. oktober 2000 - 20:16 #1
Først slette du feltet, og så prøver du at hente det? Virker omvendt, hvad er det præcist du vil?
Avatar billede sp Nybegynder
27. oktober 2000 - 20:17 #2
Jeg har 2 funktion jeg skal bruge 2 forskellige steder. Fælles for dem er at det af en eller anden grund ikke virker...
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 20:20 #3
Det hedder ikke DELETE * FROM men kun DELETE FROM. Er det kun det?
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 20:22 #4
Og forøvrigt, sp: skal du ikke bruge < i stedet for = ? Jeg er sikker på jeg ved
hvad du mener du skal have gjort ;-)
Avatar billede sp Nybegynder
27. oktober 2000 - 20:28 #5
ahhh det er derfor den ikke deleter.
Jo der skal bruges < i stedet for.
Men hvad hvis jeg skal selecte en bestemt række efter en bestemt tid?

vh Søren
Avatar billede sp Nybegynder
27. oktober 2000 - 20:33 #6
Jeg har rettet den men den virker stadig ikke.
<%
Timeout = Now - 2
\'response.write Timeout

SQL = \"DELETE FROM mailingliste where Timenow <\'\" & Timeout & \"\'
%>

vh Søren
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 20:35 #7
Det eneste jeg lige kan se i den SELECT er, at du altid udskriver én email
selvom der - i princippet - kan være flere eller 0. Prøv først:

if (felt.eof) {
  response.write \"Ingen bananer i dag\"
} else {
  response.write felt(\"Email\")
}
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 20:36 #8
..og du husker - i din delete - at sige conn.execute ??
Avatar billede sp Nybegynder
27. oktober 2000 - 20:38 #9
Det eneste jeg lige kan se i den SELECT er, at du altid udskriver én email
selvom der - i princippet - kan være flere eller 0. Prøv først:

if (felt.eof) {
  response.write \"Ingen bananer i dag\"
} else {
  response.write felt(\"Email\")
}


Det løser ikke problemet.
Den skal finde den email frem.
Avatar billede sp Nybegynder
27. oktober 2000 - 20:39 #10
Ja jeg siger selvfølgelig conn.execute
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 20:42 #11
Så må vi jo have at vide, hvad der faktisk står i din tabel mailingliste ;-)
Avatar billede sp Nybegynder
27. oktober 2000 - 20:54 #12
<%
<%
Timeout = Now - 2
\'response.write Timeout

SQL = \"DELETE FROM mailingliste where Timenow <\'\" & Timeout & \"\'
conn.execute(SQL)
%>

Problemet er at hvis den er fra sidste måned.
Altså en post der skal slettes som er endnu ældre end f.eks. 2 døgn.

Den vil ikke slette en der er fra den 25-09-00:(
Men det har lykkes mig at få den til at
slette den ved at ændre den til 25-10-00.
Det er det problemet er!

Søren

Avatar billede sp Nybegynder
27. oktober 2000 - 20:57 #13
Håber det er oplysning nok.

Der bliver postet:

dd-mm-yy tt:mm:ss
eks:

30-09-00 21:46
Avatar billede sp Nybegynder
27. oktober 2000 - 20:59 #14
Forkert sådan ser det ud:

30-09-00 21:46:25

/SP
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 21:06 #15
Ah, ok - datoer i MySQL skal være på formen  2000-09-30-21-46-25, ellers virker
det ikke. Eller 20000930214625, som det bliver vist som i et dato felt. Når du bruger
ASPs datoer, skal du lave dem om. Kan du selv?
Avatar billede sp Nybegynder
27. oktober 2000 - 21:11 #16
Jeg har forsøgt med denne.
Men der fejlmelder og siger \"ID var ventet\"
Og den pejer på det \'0\' der er i parentesen ved function
/Søren

<%
Function ConvertDate(NOW,0)
\' intFormat kan have 2 værdier. 0 eller 1
\' 0 = Returnerer dato og tid
\' 1 = Returnerer kun dato

OutDate = DatePart(\"yyyy\", dtmDate) & \"-\" & DatePart(\"m\", dtmDate) & \"-\" & DatePart(\"d\", dtmDate)
OutTime = DatePart(\"h\", dtmDate) & \":\" & DatePart(\"n\", dtmDate) & \":\" & DatePart(\"s\", dtmDate)

If intFormat = 0 Then
    strOut = OutDate & \" \" & OutTime
ElseIf intFormat = 1 Then
    strOut = OutDate
End If

ConvertDate = strOut
End Function
%>
Avatar billede erikjacobsen Ekspert
27. oktober 2000 - 22:07 #17
Det ser rimeligt korrekt ud - indholdet - ikke funktionshovedet ;-)
Så vidt jeg ved bør du altid i MySql bruge \"-\" til adskillelse af tallene i
en dato - eller sammenskrive dem helt, men så huske foranstillede 0\'er.
Det sidste gider vi ikke, så dette er vistnok korrekt:

Function ConvertDate(dtmDate,intFormat)
OutDate = DatePart(\"yyyy\", dtmDate) & \"-\" & DatePart(\"m\", dtmDate) & \"-\" & DatePart(\"d\", dtmDate)
OutTime = DatePart(\"h\", dtmDate) & \"-\" & DatePart(\"n\", dtmDate) & \"-\" & DatePart(\"s\", dtmDate)
If intFormat = 0 Then
  strOut = OutDate & \"-\" & OutTime
ElseIf intFormat = 1 Then
  strOut = OutDate
End If

ConvertDate = strOut
End Function

og så skal du KALDE den med (f.x.)

  response.write ConvertDate(now,0)

----hehe---tror jeg nok---

 
Avatar billede sp Nybegynder
27. oktober 2000 - 23:35 #18
Ja men jeg vil prøve at finde ud af om jeg kan bruge det eksisterende i databasen.
Det er jo i et andet format, så hvis jeg kunne formatere det. Altså gøre det modsat så kunne jeg måske få det til at fungere..

Eller er der en måde på jeg kan ændre formatet i databsen?
Det er et problem med alle disse poster der så ikke har det rigtige format..

vh Søren
Avatar billede sp Nybegynder
27. oktober 2000 - 23:39 #19
Og hvis jeg skal til at ændre det, hvordan skal jeg så får trukket 2 dage fra, og være sikker på at den sletter dette?
Avatar billede sp Nybegynder
27. oktober 2000 - 23:42 #20
Eller måske kunne man lave noget i ASP som opdaterede databasen i det rigtige format?

Avatar billede sp Nybegynder
28. oktober 2000 - 00:45 #21
Dette er slet ikke færdigt og sikkert heller ikke korrekt. Men jeg har tænkt mig noget i den stil til at konvertere alle felterne i den nuværende database. Så kan jeg fremover rette det i sourcen, men det ville være smart hvis jeg skulle slippe for at genposte i databasen o.s.v.


<%
SQL = \"SELECT * from mailingliste \"
set felt = conn.execute( SQL )
do while not felt.eof
on error resume next
%>
<%
felt = felt(\"Timenow\")

felt =replace(felt, \" \", \"\") \'Fjerner mellemrummet.

Og så skal der noget ind der søger efter de bestemte cifre som så overføres og flyttes om.
Derefter opdateres databasen til sidst.

Dim SearchString, SearchChar, MyPos
SearchString =felt(\"Timenow\")
SearchChar = \"0\"                        MyPos = Instr(16, SearchString, SearchChar, 1)                       
SQL = \"UPDATE mailingliste SET Timenow = \'\"& newTimenow & \"\'
conn.execute(SQL)

felt.movenext
loop

%>
Der er ialt 16 tegn i en string, når man flytter det sammen

altså:
30-09-00 21:46:25
bliver til 30-09-0021:46:25

Vi skal så ende med resultatet:
00-09-30-21-46-25
eller noget lign...

En noget kompliceret opgave. Men jeg håber at der er nogle der vil hjælpe.

vh Søren

Avatar billede erikjacobsen Ekspert
28. oktober 2000 - 00:46 #22
Uha da da - vil det sige at feltet ikke er et MySql dato felt? Er det
et almindeligt tekstfelt? I så fald skal vi i hvert fald have konverteret det!
Det med at trække 2 dage fra finder vi nok også ud af - lad os lige tage
én ting af gangen!
Avatar billede sp Nybegynder
28. oktober 2000 - 00:57 #23
Ja det er i tekstformat:(

Du er da flink hvis du vil hjælpe med at få det ordnet.
/SP
Avatar billede erikjacobsen Ekspert
28. oktober 2000 - 01:21 #24
Sorry - for sent i dag - gaab. I morgen aften? Men du skal nok
1) Udvide din database med et nyt felt, af datotid-type
2) Lave et særligt ASP-program, der løber igennem, og tager
det gamle felt, trækker dag,måned.osv ud, og laver det nye
format, og putter det ind.
3) Fjerne det gamle \"dato\"-felt
4) Evt. omdøber det nye.

Evt - hvis du synes det er for besværligt i ASP - kan jeg lave det
for dig - lynhurtigt i PHP, blot jeg får et SQL-dump af databasen.

Men i - gaab - morgen - gaab - aften - gaab......zzzzzzzzz
Avatar billede sp Nybegynder
28. oktober 2000 - 01:32 #25
Ok.
Ja selvfølgelig lave en ny kollonne og trække det over en efter en. Jeg skal prøve og se om jeg kan finde ud af det imorgen.

Avatar billede sp Nybegynder
28. oktober 2000 - 13:14 #26
Jeg har fundet en køsning ved at bruge split og replace:

<%

Felt=Replace(Felt,\":\",\"-\")
Dim MyString, MyArray, NString, EString

MyString = Split(Felt, \" \", -1, 1)   

Response.write MyString(0)
%> \'dato<p>
<%




NString = Split(MyString(0), \"-\", -1, 1)   

Response.write NString(0)  %> \'Dag<br><%
Response.write NString(1) %>\'Måned<br><%
Response.write NString(2) %> \'År<p><%

EString = NString(2)& \"-\" & NString(1) & \"-\" & NString(0) & \"-\" & Mystring(1)

%>
Konverteret format&nbsp;
<%

Response.write EString


%>
Avatar billede sp Nybegynder
28. oktober 2000 - 20:53 #27
Den kan godt skrive det ud med repsonse.write, men når databasen skal opdateres så virker det ikke.


<%
Response.Buffer = True

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

<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"
\"http://www.w3.org/TR/html4/loose.dtd\">

<html>

<head>
<title>Administration</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"/style/news.css\">
</head>

<body BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">

<%
SQL = \"SELECT DISTINCT * FROM mailingliste\"
Set konv = Conn.Execute(SQL)
do while not konv.eof
Felt=konv(\"Timenow\")
Felt=Replace(Felt,\":\",\"-\")

Dim MyString, MyArray, NString, EString
MyString = Split(Felt, \" \", -1, 1)   


NString = Split(MyString(0), \"-\", -1, 1)   

\'NString(0) Dag
\'NString(1) Måned
\'NString(2) År

EString = NString(2) & \"-\" & NString(1) & \"-\" & NString(0) & \"-\" & Mystring(1)

\'Response.write EString & \"<br>\"


SQL = \"UPDATE mailingliste SET Tid = \" & EString & \"\"

Conn.Execute(SQL)
Response.write SQL & \"<BR>\"
konv.movenext
loop

Conn.close
Set Conn= nothing

%>


</body>
</html>
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
Computerworld tilbyder specialiserede kurser i database-management

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