27. juli 2007 - 08:03Der 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.
Uanset deres størrelse, formål eller branche udvikler virksomheder over hele verden sig mod en mere digital arbejdsform.
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
Synes godt om
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
Synes godt om
Slettet bruger
27. juli 2007 - 09:20#3
Hvis jeg selv får tid, så vender jeg lige tilbage!~)
Synes godt om
Slettet bruger
27. juli 2007 - 09:32#4
Hvad med om jeg prøvede med DoCmd.RunSQL!~)
Synes godt om
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
Synes godt om
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!~)
Synes godt om
Slettet bruger
27. juli 2007 - 10:01#7
for en god ordens skyld bør du tilføje .Close lige før End With
hej spg Jeg kikker på det lørdag har fået en haste opgave (Familien mener vi skal besøge bedsteforældre)
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.