Toon posts:

[Access2000 & VBA]hoe checken voor nieuw record in formulier

Pagina: 1
Acties:

Verwijderd

Topicstarter
Dmv een knop open ik een formulier in de record toevoeg modus, op dit formulier zitten tabbladen, het 2e tabblad heeft een subform. Maar dat subform mag pas ingevuld worden als de klantgegevens bekend zijn op het eerste tabblad.

Hoe kan ik nu controlleren dat er een nieuwe klant aangemaakt is?

via VBA heb ik al geprobeerd erachter te komen, of een veld op het eerste tabblad is ingevuld en er dus een nieuw record aangemaakt is. Maar dat werkt niet...
Als er nog geen record aangemaakt is herkent ie om een of ander reden de inhoud van de velden niet en gebeurt er niets...

En dan een 2e vraag,
Als iemand een nieuw record via een formulier wil toevoegen, maar toch besluit te annuleren, hoe verwijder ik dat dan?

het opslaan gaat zo:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70

maar de delete weet ik niet...


graag uw hulp

  • Coos
  • Registratie: Juni 2001
  • Laatst online: 01-03 17:29

Coos

Aim High, Shoot Low

Bij acces zit standaard de northwind database als voorbeeld. Hier kan je best iets uithalen. Klein voorbeeldje voor je eerste vraag:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CustomerID_BeforeUpdate(Cancel As Integer)
' Display message if CustomerID combo box is blank.

    Dim strMsg As String, strTitle As String
    Dim intStyle As Integer
    
    If IsNull(Me!CustomerID) Or Me!CustomerID = "" Then
        strMsg = "You must pick a value from the Bill To list."
        strTitle = "Bill To Customer Required"
        intStyle = vbOKOnly
        MsgBox strMsg, intStyle, strTitle
        Cancel = True
    End If

End Sub
Waarbij CustomerID een invoerveld in het form is. Dan nog heb je nog het probleem dat als een veld ingevuld is, dit niet inhoudt dat hij een nieuw record heeft aangemaakt en dit bewaard heeft. Het zou bijna eenvoudiger zijn om een formulier te maken die eerst ingevuld moet worden. Als deze bewaard wordt (knop 'bewaar') dan bewaart hij de boel en je opent een nieuw formulier voor de overige gegevens. Hierbij geef je gelijk de primaire sleutel van het record mee, zodat je achteraf niet hoeft te zoeken waar het bij hoort.
En het verwijderen van een record is ook in de help te vinden. Je moet alleen even onthouden welke je toegevoegd had of opzoeken in de tabel (de laatste van een recordset)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub DeleteX()

   Dim dbsNorthwind As Database
   Dim rstEmployees As Recordset
   Dim lngID As Long

   Set dbsNorthwind = OpenDatabase("Northwind.mdb")
   Set rstEmployees = _
      dbsNorthwind.OpenRecordset("Employees")

   ' Add temporary record to be deleted.
   With rstEmployees
      .Index = "PrimaryKey"
      .AddNew
      !FirstName = "Janelle"
      !LastName = "Tebbs"
      .Update
      .Bookmark = .LastModified
      lngID = !EmployeeID
   End With

   ' Delete the employee record with the specified ID 
   ' number.
   DeleteRecord rstEmployees, lngID

   rstEmployees.Close
   dbsNorthwind.Close

End Sub

Sub DeleteRecord(rstTemp As Recordset, _
   lngSeek As Long)

   With rstTemp
      .Seek "=", lngSeek
      If .NoMatch Then
         MsgBox "No employee #" & lngSeek & " in file!"
      Else
         .Delete
         MsgBox "Record for employee #" & lngSeek & _
            " deleted!"
      End If
   End With

End Sub

en deze functie zet je in een module die je aanroept als je op de annuleren knop drukt. Voor het opslaan zou ik voor eenzelfde oplossing gaan en niet voor de oplossing die jij aandraagt.

Nooit geschoten is altijd mis | System specs