Avatar billede larsen45 Juniormester
23. juli 2004 - 17:13 Der er 26 kommentarer og
1 løsning

Update access rækker HELP

Kan man opdatere en tabel i access database så rækkerne automatisk rykker op når man har slette nogle???

Det er fordi min indsættelses side bliver ved ved at lægge
nye indlæg ind med en høj id.

Hvis jeg har 20 indlæg i databasen og jeg så sletter de 10 af dem og så opretter en masse nye igen så bliver indlæggende lagt ind på den måde at de starter med id 21,22,23 og så videre derud af.

Kan man ikke indsætte nye indlæg som nummer 1,2,3,4 i en access database og ikke som den højeste værdi??
Avatar billede mugs Novice
23. juli 2004 - 17:14 #1
Jeg antager at du bruger en autonummerering som ID. I så fald er det ikke muligt.
Avatar billede mugs Novice
23. juli 2004 - 17:16 #2
Hvis du f.eks har nr 1,2,3 og 4 og sletter nr. 4, vil den næste post få nr. 5. Men du kan komprimere efter at have slettet nr. 4, så vil næste post få nr. 4.

Hvis du sletter nr. 2 er der ingen mulighed for at genbruge dette nr.
Avatar billede erikjacobsen Ekspert
23. juli 2004 - 17:17 #3
Det skulle være tilstrækkeligt for dig at sige

  SELECT ... ORDER BY id
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:17 #4
ja det gør jeg.

Men hvordan løser jeg så det problem for jeg vil gerne kune slette indlæg når der er over 150 i databasen. det vil sige de ældre indlæg.
Avatar billede mugs Novice
23. juli 2004 - 17:25 #5
Hvis du f.eks vil slette de 5 poster med de laveste numrer, kan du køre en forespørgsel som denne:

SELECT TOP 5 Tabel1.nr, Tabel1.felt1
FROM Tabel1
ORDER BY Tabel1.nr;

Og derefter en slette forespørgsel på den første forespørgsel:


DELETE Forespørgsel1.nr, Forespørgsel1.felt1
FROM Forespørgsel1;
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:26 #6
se lige her.
Min tilføj database side:

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


strSQL = "Insert into tabel ("

strSQL = strSQL & "Navn, "
og en masse flere felter.

strSQL = strSQL & "values( "
strSQL = strSQL & "'" & Request("Navn") & "', "
og en masse flere felter.

Conn.Execute(strSQL)
Conn.Close
Set Conn = Nothing

Kan jeg ikke gøre nået ved denne side her så jeg kan indlægge ID som nummer 1 i databasen??
eller skal jeg lave nået helt om i databasen for at få det til at fungere.
Avatar billede mugs Novice
23. juli 2004 - 17:29 #7
Har intet forstand på internettet. Beklager.
Avatar billede mugs Novice
23. juli 2004 - 17:36 #8
Men igen: Hvis det er et autonummereringsfelt, kan du ikke genbruge numrer, der "ligger nede i rækken".
Avatar billede mugs Novice
23. juli 2004 - 17:37 #9
En anden mulighed for at slette gamle poster er, at du laver et datofelt der som standardværdi har dags dato. Du kan herefter køre en Delete SQL, der f.eks sletter alle poster der er ældre end Date()-14.
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:41 #10
Ja super
det ville være rigtigt godt hvis jeg kunne slette indlæg som er:
1 måned gamle. og så med en sletknap af en eller anden art.
Men hvordan laver jeg så det??
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:43 #11
Her er min nuværende slette side:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("database.mdb")
Conn.Open DSN
strSQL = "Delete * From tabel Where ID >= 150"
Conn.Execute(strSQL)
Conn.Close
Set Conn = Nothing
%>
Avatar billede mugs Novice
23. juli 2004 - 17:43 #12
Hvis du omtaler "ren Access" kan jeg hjælpe dig, men hvis knappen skal ligge på en internetside og programmeres i PHP, ASP eller hvad ved jeg kan jeg ikke.
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:46 #13
Jamen dette her er jo kun om access?
jeg skal bare vide hvordan jeg kan slette alle indlæg som så er 1 måned gamle
og alle dem som ikke er skal ikke slettes
Avatar billede mugs Novice
23. juli 2004 - 17:46 #14
I en Access database kan det se således ud:

Docmd.RunSql "DELETE Tabel1.dato FROM Tabel1 WHERE (((Tabel1.dato)<Date()-30))"
Avatar billede larsen45 Juniormester
23. juli 2004 - 17:53 #15
okay min tabel hedder geast og min tabel database ligenu
det vil så sige at det skal se sådan ud:
Docmd.RunSql "DELETE gaest.Dato FROM gaest WHERE (((gaest.Dato)<Date()-30))"

er det rigtigt??
og hvor kan jeg indsætte dette i access databasen.
eller jeg kan måske bare indsætte det i min delete side:
strSQL = "DELETE gaest.Dato FROM gaest WHERE (((gaest.Dato)<Date()-30))"
Avatar billede mugs Novice
23. juli 2004 - 17:57 #16
Din SQL ser rigtig ud.

Du kan f.eks indsætte koden i en kommandoknap. Hvis det skal gøres hver gang en ny post oprettes, kan du indsætte flg. i formularens VedAktuel:

If Mr.NewRecord = True Then
Docmd.RunSql "DELETE gaest.Dato FROM gaest WHERE (((gaest.Dato)<Date()-30))"
End If

Så vil du altid slette en post der opfylder kriteriet, hver gang du opretter en ny post.
Avatar billede mugs Novice
23. juli 2004 - 17:58 #17
En lille rettelse:

If Mr.NewRecord = True Then

Skal være:

If Me.NewRecord = True Then
Avatar billede larsen45 Juniormester
23. juli 2004 - 18:12 #18
hvad er: Mr.NewRecord hvad skal jeg skrive der??
og hvad er: Docmd.RunSql
skal der ikke bare stå strSQL =
---------------------------------
Jeg er ny i det her håber du bære over med mig.

Jeg har en formular som hedder slette
--------------------------------------
<form action="deletemange.asp" method="post">
<input type="submit" value="slet gamle indlæg som er 30 dage gamle" name="slette">
</form>
Den knap skal jeg så bruge til at slette dem der er 30 dage gamle.
Da jeg ikke kan finde ud af at gøre det sådan at den sletter indlæg hver eneste gang der bliver oprettet et nyt, altså at den checker om der er nogen som er over 30 dage gamle samtidigt med at der bliver oprettet et nyt indlæg.
Avatar billede mugs Novice
23. juli 2004 - 18:18 #19
Nu er du igen ovre i noget internet, og det har jeg som tidligere nævnt intet forstand på. Kl 17:46:33 sagde du:

"Jamen dette her er jo kun om access?"

Og mit forslag fungerer i en Accessdatabase. Men om du kan få det implementeret via internettet ved jeg ikke.

koden kan indsættes i en formular's VedAktuel hændelse (Current). Me.NewRecord checker om der er tale om en ny post. Hvis denne betingelse er opfyldt køres SQL og sletter de poster der opfylder betingelsen, ellers ikke:

If Me.NewRecord = True Then
Docmd.RunSql "DELETE gaest.Dato FROM gaest WHERE (((gaest.Dato)<Date()-30))"
End If
Avatar billede larsen45 Juniormester
23. juli 2004 - 18:33 #20
hvor indsætter jeg det i access databasen??
jeg ved det ikke.
Avatar billede mugs Novice
23. juli 2004 - 18:34 #21
Har du en formular?
Avatar billede larsen45 Juniormester
23. juli 2004 - 18:39 #22
Nej jeg har ingen formular kun en tabel som hedder gaest.
Avatar billede mugs Novice
23. juli 2004 - 18:47 #23
Når du programmerer i VBA, skal du have en formular.
Det at du kun har en tabel viser, at du stadig går ud fra en internetløsning. Og det kan jeg som før nævnt ikke hjælpe dig med.
Avatar billede larsen45 Juniormester
23. juli 2004 - 18:58 #24
okay.
Jeg kommer til at oprette et nyt spørgsmål under asp kategorien
vi du have point alligevel??
så sig lige til.
Avatar billede mugs Novice
23. juli 2004 - 19:01 #25
Det er nok det bedste du kan gøre.
Ingen point - Jeg har rigeligt. Men læg selv et svar og accepter det, så bliver spørgsmålet fjernet fra listen med ubesvarede spørgsmål.
Avatar billede larsen45 Juniormester
23. juli 2004 - 19:11 #26
Fint nok det gør jeg så lige.
Men tak for hjælpen ellers
Avatar billede mugs Novice
23. juli 2004 - 19:12 #27
Selv tak.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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