Hoe het resultaat van een Access Insertquery automatisch toevoegen in de Access doeltabel

Status
Niet open voor verdere reacties.

leifoet

Gebruiker
Lid geworden
7 okt 2007
Berichten
335
Een Insertquery met volgende structuur ...
Insert into DOELTABEL (veld1, veld2 ...)
select veld1, veld2 , ...
from BRONTABEL
Where ...
Order by ...

... zet de resultaatrecords ervan bovenaan de tabel met volgnummerveld (RecNo) : 0

Probleem : met welke bijkomende code in de query komen deze records telkens automatisch onderaan de bestaande doeltabel met een automatisch oplopend RecNo ?

Dank voor tips.
 
Er bestaat niet zoiets als onderaan of bovenaan in een tabel. Als je de gegevens van een tabel in een bepaalde volgorde wilt weergegeven sorteer je in een query op een of meer velden.
Als je rec-no een autonumber-veld maakt kan je dat gebruiken om te sorteren.

Wat is het achterliggende idee? Waarom gegevens in twee tabellen vastleggen?
 
Ik snap niet helemaal wat je aan het doen bent. Ik zie geen veld RecNo in je insert query, en dat heb je ook helemaal niet nodig. Sowieso kun je in een relationele database nooit zeggen dat nieuwe records 'onderaan' worden toegevoegd, want dat bestaat niet in relationele databases. Volgorde wordt bepaald door de door jou aangegeven sortering/index. Geen index, geen sortering.

Wat je zou kunnen doen (sowieso aan te raden, want ik vermoed dus dat je zo'n veld niet hebt) is een veld met Autonummering te maken in je tabel. Dat voegt automatisch een oplopend nummer toe aan nieuwe records, dus dan heb je automatisch een 'recno' veld. Niet dat dat zo werkt, want Autonummers worden maar één keer gebruikt in een tabel, dus als je records verwijdert, dan ben je die nummers ook kwijt. Bij een tabel met 208 records, waarvan je er twee hebt verwijderd, krijgt een nieuw record dus automatisch nr. 209, en heb je op dat moment 207 records.

Of, als je zo nodig tóch zelf de nummers wilt instellen, dan moet je een functie maken/gebruiken die automatisch het hoogste nummer opzoekt en met 1 verhoogt. Dan ben je er ook.
 
Wel als je het verwijdert en weer toevoegt. De bastaande gegevens kloppen toch niet dus de tabel mag leeg 😁
 
Dat is niet hetzelfde. Bovendien ben je dan de inhoud kwijt. En TS heeft het over de nieuwe records zonder nummer, niet over de bestaande. Ik beschouw mijn antwoord dus voorlopig maar even als bruikbaarder.
 
OctaFish schreef : Of, als je zo nodig tóch zelf de nummers wilt instellen, dan moet je een functie maken/gebruiken die automatisch het hoogste nummer opzoekt en met 1 verhoogt. Dan ben je er ook.
Beste OctaFish - dat wil ik bereiken - alleen ken ik de juiste (Access)code (nog) niet om automatisch in mijn insertquery sub #1dat hoogste nummer (uit de doeltabel) vast te kunnen leggen en voor elke toegevoegde record dus te verhogen met 1
Dank voor tips.
 
Laatst bewerkt:
Ik post zelf vaak deze functie in dit soort vragen:

Code:
Function VolgNummer() As String
Dim strSQL As String, sWaarde As String, iNummer As Integer, iJaar As Integer

    strSQL = "SELECT TOP 1 VolgNummer FROM JouwTabel ORDER BY VolgNummer DESC"
    With CurrentDb.OpenRecordset(strSQL)
        If Not .BOF And Not .EOF Then sWaarde = !VolgNummer.Value
        .Close
    End With
    If sWaarde & "" = "" Then GoTo GeenNummer
    '' Twee varianten in de IF: één met koppelteken, en één zonder koppelteken
    If InStr(1, sWaarde, "-") > 0 Then
        iJaar = Split(sWaarde, "-")(LBound(Split(sWaarde, "-")))
        iNummer = Split(sWaarde, "-")(UBound(Split(sWaarde, "-")))
    Else
        iJaar = Left(sWaarde, 4)
        iNummer = Right(sWaarde, 4) + 1
    End If
    If iJaar = CStr(Year(Date)) Then
        VolgNummer = iJaar & "-" & Right("0000" & iNummer)
    Else
        'Kies kies de tweede variant als je geen koppelteken gebruikt
        VolgNummer = CStr(Year(Date) & "-0001")
        ''VolgNummer = CStr(Year(Date) & "0001")
    End If
    Exit Function
  
GeenNummer:
        VolgNummer = CStr(Year(Date) & "-0001")

End Function

Die kun je zelf wel aanpassen hoop ik aan jouw situatie. Deze functie maakt een volgnummer op basis van het huidige jaar (elk jaar opnieuw beginnen). En heeft twee varianten: één als 2024-0012, 2024-0154 etc, en de ander is 20240016, 20240165 etc. Wil je geen jaartal, dan wordt de functie zelfs simpeler.

Kun je het niet zelf, dan wordt het tijd om een voorbeeld bestandje mee te sturen, dan zet ik ‘m er wel voor je in.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan