Avatar billede gylling Juniormester
27. juli 2007 - 08:03 Der er 7 kommentarer og
1 løsning

Sætte min ID sammen med max ID

Jeg har en tabel som inderholder tider de har en ID som er stigend. Lavest tid mindste IDnr. Nu vel jeg gerne kunne sætte min og max id sammen.
eksempel: der 15 tider i tabelen
så jeg vel gerne havde at lavest id møder max id.
1-15
2-14 osv indtil der ikke er flere og få at vide hvilken der er i overskud.
Avatar billede Slettet bruger
27. juli 2007 - 08:21 #1
En metode er jo at køre dataerne over i en midlertidig tabel og så loop'e igennem denne ved hjælp af recordset i vba....

Kort fortalt noget i denne retning

if dcount(recordsættet)>1 then
a = max(id)
b = min(id)
Insert disse i en "kamptabel"
Delete * From ..... Where id=a or id=b
else
msgbox id & " er tilbage" (eller hvad du vil gøre ved den overskydende kamp!~)
end if
Avatar billede Slettet bruger
27. juli 2007 - 09:18 #2
jeg kan ikke lade være med at kigge lidt på det, men om jeg bliver færdig?~)

Du kan lige så godt se hvad jeg har i gryden, den fejler godt nok allerede på den første sql, men jeg tror det er en eller anden simpel ting jeg har overset!~)

Option Compare Database
Option Explicit
Private Sub DinKnap_Click()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim SQLa As String
Dim a, b
Dim SQLinsert As String, SQLdelete As String
'DoCmd.SetWarnings False

SQLa = "INSERT INTO TiderTemp SELECT Tider.* FROM Tider;"
DoCmd.OpenQuery SQLa

Set db = CurrentDb()
Set rst = db.OpenRecordset("TiderTemp")
With rst
Do
rst.Requery
If DCount("*", "TiderTemp") > 1 Then
.MoveFirst
a = !id
.MoveLast
b = !id
SQLinsert = "INSERT INTO Kamptabel ( Id1, Id2 ) SELECT " & a & "," & b
SQLdelete = "DELETE * FROM TiderTemp WHERE (((Id)=" & a & " Or (Id)=" & b & "));"
DoCmd.OpenQuery SQLinsert
DoCmd.OpenQuery SQLdelete
ElseIf DCount("*", "TiderTemp") = 1 Then
MsgBox !person & " er tilbage"
.Close
'DoCmd.SetWarnings True
Exit Sub
Else
.Close
'DoCmd.SetWarnings True
Exit Sub
End If
Loop
End With
End Sub
Avatar billede Slettet bruger
27. juli 2007 - 09:20 #3
Hvis jeg selv får tid, så vender jeg lige tilbage!~)
Avatar billede Slettet bruger
27. juli 2007 - 09:32 #4
Hvad med om jeg prøvede med DoCmd.RunSQL!~)
Avatar billede Slettet bruger
27. juli 2007 - 09:55 #5
Den her fik jeg til at virke!~)

Option Compare Database
Option Explicit
Private Sub DinKnap_Click()
On Error GoTo err_DinKnap
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim SQLa As String
Dim a, b, d
Dim SQLinsert As String, SQLdelete As String
DoCmd.SetWarnings False
SQLa = "INSERT INTO TiderTemp SELECT Tider.* FROM Tider;"
DoCmd.RunSQL SQLa
Set db = CurrentDb()
Set rst = db.OpenRecordset("TiderTemp")
With rst
Do
.MoveFirst
a = !id
.MoveLast
b = !id
SQLinsert = "INSERT INTO Kamptabel ( Id1, Id2 ) SELECT " & a & "," & b
SQLdelete = "DELETE * FROM TiderTemp WHERE (((Id)=" & a & " Or (Id)=" & b & "));"
If a <> b Then
DoCmd.RunSQL SQLinsert
DoCmd.RunSQL SQLdelete
Else
DoCmd.RunSQL SQLdelete
MsgBox "Person med id " & a & " har ikke nogen modstander."
End If
Loop Until rst.EOF
End With
err_DinKnap:
DoCmd.SetWarnings True
If Err.Number = 3021 Then
Exit Sub
Else
MsgBox Err.Description
End If
End Sub
Avatar billede Slettet bruger
27. juli 2007 - 09:58 #6
Du kan jo så, hvis det griber om sig lave en forespørgsel, som sortere efter tid for en bestemt dato og kalde denne:

Set rst = db.OpenRecordset("DinForespørgselsNavn")

God fornøjelse!~)
Avatar billede Slettet bruger
27. juli 2007 - 10:01 #7
for en god ordens skyld bør du tilføje .Close lige før End With
Avatar billede gylling Juniormester
27. juli 2007 - 11:37 #8
hej spg
Jeg kikker på det lørdag har fået en haste opgave (Familien mener vi skal besøge bedsteforældre)
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