Zolang in mode ingave alle records laten zien in Listbox

Status
Niet open voor verdere reacties.

Rommyke

Gebruiker
Lid geworden
29 mrt 2007
Berichten
357
hallo allemaal ,

Ik heb een form waarin ik gegevens kan ingeven , opzoeken en wijzigen .

Bij een opzoeking laat ik de gevens die voldoen aan mijn criteria zien in een listbox.

Als ik een nieuwe ingave doe start ik met een lege listbox , na ingave van de gegevens en op een knop 'opslaan' drukken komen deze gegevens in de listbox .

hierna laat ik een message komen met de vraag of ik nog nieuwe gegevens wil ingeven ?

Als ik nu op JA druk zou ik willen dat als ik terug op 'Opslaan' druk mijn vorige ingave nog in de listbox staan, samen met mijn nieuwe ingave en zo door , tot ik op die message Nee antwoord.

Onderstaande code gebruik ik voor op te slaan
Code:
 Private Sub Cmd_Opslaan_Click()
On Error GoTo Err_Cmd_Opslaan_Click
Dim strSQL As String
 
DoCmd.RunCommand acCmdSaveRecord
Me.IstSelection.Requery

 If OneBackAnnuleer = 1 Then  'Manier van opslaan voor nieuwe werknemer
 
       strSQL = "SELECT Personeel.WerknemersID As WerknemersID, Personeel.Achternaam as Achternaam, Personeel.Voornaam as Voornaam, Personeel.[StamNr] as StamNr, Afdelingen.Afdelingsnaam As Afdeling, Crews.Crewnaam As Crew "
       strSQL = strSQL & "From (Personeel inner join Afdelingen on Personeel.AfdelingsID = Afdelingen.AfdelingsID)INNER JOIN Crews on Personeel.CrewID = Crews.CrewID "
       strSQL = strSQL & "WHERE ((Personeel.StamNr) Like '" & Stam_Nr & "*') "
       strSQL = strSQL & "ORDER BY Personeel.Achternaam, Personeel.voornaam"
           
       'De listbox wordt gevuld met de opgebouwde SQL
       Me.IstSelection.SetFocus
       Me.IstSelection.RowSource = strSQL
       
     If MsgBox("Nieuwe Werknemer is in de database opgeslagen." & vbCrLf & "Wenst u nog een nieuwe Werknemer in te geven ?", vbYesNo, "Opslaan") = vbYes Then
        Call Cmd_Nieuw_click
        Exit Sub
     Else
        Call Cmd_annuleren_Click
     End If
 Else
     If MsgBox("De wijzigingen in de database zijn opgeslagen." & vbCrLf & "Wenst u nog gevens te wijzigen ?", vbYesNo, "Wijzigen") = vbYes Then
        OneBackAnnuleer = 0
        Call Cmd_annuleren_Click
        Exit Sub
     Else
        OneBackAnnuleer = 1
        Call Cmd_annuleren_Click
        Exit Sub
     End If
 End If
 
End Sub


Ik dacht een soort teller maken met waarbij elke keer dat je een nieuwe ingave doet , een 1 erbij komt .

Dan gebruik je deze waarde later in je strSQL om die af te trekken van je laatste ID nummers of om een bepaald aantal ID nummers terug te gaan en die dan te laten zien in je Listbox.

Weet niet of dit de manier is natuurlijk .

Hopelijk is het een beetje duidelijk

Bedankt
 
Als ik nu op JA druk zou ik willen dat als ik terug op 'Opslaan' druk mijn vorige ingave nog in de listbox staan, samen met mijn nieuwe ingave en zo door , tot ik op die message Nee antwoord.

En wat als je nu per abuis met Ja antwoord, dat even terzijde ;)
Ik zou eerder denken aan het gebruiken van een tijdelijke tabel, waarvan je de gegevens overzet naar je doeltabel als je met Nee antwoord.

Groet,

Tardis
 
En wat als je nu per abuis met Ja antwoord, dat even terzijde ;)
Hoi, Tardis

Ik heb een annuleer knop voorzien(met if me. dirty event ) en zolang je niet op opslaan hebt gedrukt worden er geen gegevens opgeslaan of alles wordt terug gedraait .

Ik zou eerder denken aan het gebruiken van een tijdelijke tabel, waarvan je de gegevens overzet naar je doeltabel als je met Nee antwoord.

Tardis , wordt er meer gebruik gemaakt van een tijdelijke tabel ? is dit dan eigenlijk de manier van werken om een tijdelijke tabel te maken en uw gegevens dan daarna in uw vaste tabel te zetten ?
Lijkt me een goed voorstel maar in de listbox zou ik toch iets visueels geven , en alles wat je dus op dat moment in je tijdelijke tabel zet , kan je weergeven in je listbox ? (Niet)


Maar dan mijn volgende vraag , als je nee drukt hoe kan je uw tabel dan helemaal leegmaken ?

Met onderstaande regel ?

DoCmd.RunSQL "DELETE * FROM TBLBlablabla WHERE BlablaID =


En hoe zet je uw gegevens over van uw tijdelijke naar uw vaste tabel ?


Groetjes
Romain
 
Maak een knop.
Zet in de Bij Klikken gebeurtenis qua opzet deze code (DoCmd volgorde aanhouden):


Code:
Dim strRowsource As String

strRowsource = Me.lstSelectie.Rowsource

DoCmd.RunSQL "DROP TABLE tblTemp;"
DoCmd.RunSQL "CREATE TABLE tblTEMP (kolom1 Integer, kolom2 Text, kolom3 Date);" 
DoCmd.RunSQL "INSERT INTO tblTmp " & strRowsource

DROP TABLE, CREATE TABLE en INSERT INTO staan beschreven in VBA Help.

heb ik ergens gevonden in een vorige topic van u , dus een deel is al opgelost.
 
heb snel een kleine toepassing gemaakt voor bijlage

Geraak er ff niet.

om je listbox te vullen gebruik je :

bv bij opslaan gebruik je een strSQL waarbij je uw listbox vult met deze strsql . Niet?
Me.IstSelection.Rowsource = StrSQL

Nu vul je uw strRowsource met wat er in je Listbox staat

strRowsource = Me.IstSelection.Rowsource

en deze waarde zet je in uw tabel temp door onderstaande code

Code:
    DoCmd.RunSQL "Drop Table TBLTemp;" 'tabel Temp leegmaken
    DoCmd.RunSQL "Create Table TBLTemp (WerknemersID Long,Achternaam text,Voornaam text,StamNr number);"
    DoCmd.SetWarnings False 'aanzetten om crashes te vermijden
    DoCmd.RunSQL "Insert into TBLTemp " & strRowsource
    DoCmd.SetWarnings True 'aanzetten om crashes te vermijden

Maar hoe krijg ik dan ooit een 2de of 3de waarde in mijn tabel temp ? :confused:
 

Bijlagen

Hallo Romain,

je bent er bijna.

Baseer je keuzelijst op de tijdelijke tabel.
Create Table -> zet deze code achter je knop "Nieuw"
Voeg bij het klikken op "Opslaan" iedere nieuwe rij toe aan je tijdelijke tabel.
Daarna je keuzelijst opnieuw vullen via de RowSource.
Als je de vraag "wilt u nog nieuwe gegevens invoeren" met Nee beantwoord, verwijder je de tijdelijke tabel.
Andere optie is om de tabel te verwijderen bij het sluiten van het formulier.

Groet,

Tardis
 
Hoi Tardis ,


Werkt perfect

Bedankt .:D

ps heb nog een paar bugs en een paar extratjes en formulier is eindelijk af , deze dan toch:rolleyes:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan