* Volg ons


* Wie is Online

  • Punt gasten: 8
  • Punt verborgen: 0
  • Punt leden: 0

Er zijn geen bezoekers online
  • Punt Online vandaag: 3

* Actuele onderwerpen

Webwereld: Webwereld door NLCOMP
[Vandaag om 08:01:11]


audioboeken naar een iPod converteren door Don
[23 mei 2012, 14:53:05]


updates door Paul
[23 mei 2012, 12:48:07]


foutmelding bij openen VPN, wat te doen? door Peter
[22 mei 2012, 21:05:08]


MSChart for VB6 door Peter
[22 mei 2012, 15:44:26]


Met een .asp pagina data checken door RuudDeWit
[20 mei 2012, 15:48:49]


Forumonderhoud: uitgesteld naar vrijdag 18 mei en afgerond! door Ronald
[18 mei 2012, 18:18:24]


Meezenden bijlage bij e-mail door Peter
[17 mei 2012, 20:01:40]


Superwijzer door Paul
[17 mei 2012, 12:00:34]


Karakters verspringen in Excel2003 door gerard1938
[17 mei 2012, 06:06:53]


Scriptfout in Internet Explorer door Ronald
[15 mei 2012, 22:40:53]


cursor verspringt ongecontroleerd door popipipo
[15 mei 2012, 13:18:26]


* Chat

Vraag maar raak!
Stel je vragen over computers en internet en krijg direct antwoord! Iedere maandagavond 21:00 - 22:00 uur in de chatroom.


A A A A Auteur Topic: A97: sluit bij lege lyst  (gelezen 420 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMPTopic starter

  • Forumheld
  • *****
  • Berichten: 8.417
  • Laatst actief:
    30 mei 2010, 20:52:56

  • Activiteitmeter
    100%
    • NL Computer Forum
A97: sluit bij lege lyst
« Gepost op: 9 november 2009, 19:03:12 »

Bericht 1 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:04-10-2004
 Aan:AllenMsgID:1460.1
 Onderwerp:A97: sluit bij lege lystForum:ws-nlcomputer
Hoi allemaal,

In een Access 97 applicatie (als front-end voor een SQL Server database) heb ik een enkelvoudig formulier gemaakt met n van de gekoppelde tabllen als record-bron. Dit formulier wordt vanuit andere formulieren geopend worden; dit kan op twee manieren:


* Als invoerformulier (optie acFormAdd). In dat geval zijn bestaande records niet te bekijken; wel kunnen nieuwe records worden toegevoegd. Zolang het formulier open blijft kunnen de toegevoegde records ook nog bekeken en evtl. gewijzigd worden.


* Als bewerkformulier; in dit geval is de optie Toevoegingen toestaan op "Nee" ingesteld en wordt een where-conditie gebruikt in de OpenForm opdracht zodat alleen relevante records getoond worden. De gebruiker kan deze records wijzigen of verwijderen, of doorklikken naar nog weer andere gerelateerde schermen. Records die buiten de opgegeven selectie vallen kunnen niet bekeken worden; records toevoegen kan ook niet.


Als ik dit scherm open en alle records die in de selectie voorkomen verwijder, dan blijft het scherm leeg achter. Er komt geen blanco record (uiteraard, want toevoegen is niet toegestaan) en er wordt geen bestaand record getoond (want elk bestaand record valt buiten de selectie). Het enige dat ik kan doen is het scherm sluiten via het kruisje rechtsboven.


Wat ik veel liever wil, is het scherm automatisch sluiten zodra het laatste record uit de selectie verdwenen is, zodat de gebruiker nooit tegen een "leeg" scherm hoeft aan te kijken. Ik heb al gekeken of ik een gebeurtenis kon vinden die geschikt is om hierop te testen, maar op dit moment kom ik er niet uit. Is dit berhaupt mogelijk? Zo ja, aan welke gebeurtenis moet ik dan een procedure koppelen en hoe kan ik testen op een lege recordbron?

Groetjes, Hugo


Bericht 2 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:04-10-2004
 Aan:Hugo KornelisMsgID:1460.2
 Onderwerp:A97: sluit bij lege lystForum:ws-nlcomputer
>> Wat ik veel liever wil, is het scherm automatisch sluiten zodra het laatste
record uit de selectie verdwenen is, zodat de gebruiker nooit tegen een "leeg"
scherm hoeft aan te kijken. Ik heb al gekeken of ik een gebeurtenis kon vinden
die geschikt is om hierop te testen, maar op dit moment kom ik er niet uit.
Is dit berhaupt mogelijk? Zo ja, aan welke gebeurtenis moet ik dan een
procedure koppelen en hoe kan ik testen op een lege recordbron?

Hoi Hugo,

Probeer het volgende eens

Private Sub Form_Delete(Cancel As Integer)
  '
  With Me.RecordsetClone
    If .RecordCount = 1 Then
      DoCmd.Close acForm, Me.Name
    End If
  End With
  '
End Sub

Groetjes -- john



Bericht 3 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:06-10-2004
 Aan:John Kopmels (Sysop)MsgID:1460.3
 Onderwerp:A97: sluit bij lege lystForum:ws-nlcomputer
Hoi John,

> Probeer het volgende eens
> (...)

Bedankt!! Ik heb hem weliswaar niet exact zo overgenomen als in jouw suggestie, maar zonder jouw idee was ik er nooit opgekomen. De oplossing waar ik uiteindelijk voor gekozen heb (en die precies lijkt te doen wat ik wil) is de volgende:

Private Sub Verwijderen_Click()
  If MsgBox("Wilt u NaamType " & Me.NTnaam & " echt verwijderen?", _
    vbYesNo + vbDefaultButton2 + vbQuestion, _
"Bevestig verwijderen") = vbYes Then
      Me.AllowDeletions = True
      DoCmd.RunCommand acCmdDeleteRecord
      Me.AllowDeletions = False
      If Me.AllowAdditions = False And _
      Me.RecordsetClone.RecordCount = 0 Then
        DoCmd.Close
      End If
    End If
End Sub

Ik heb hier nog wel een vervolgvraagje over: kan dit nog grote gevolgen hebben voor de performance? In SQL Server queries is het standaard advies eigenlijk om IF NOT EXISTS(...) te gebruiken in plaats van IF COUNT(...) = 0 (en IF EXISTS(...) ipv IF COUNT(...) > 0). Dat is omdat bij de EXISTS de evaluatie van de query stopt zodra een rij gevonden in die voldoet; bij de COUNT worden ze eerst alle 3.154.896 geteld voordat de vergelijking met 0 wordt gemaakt. Geldt dit ook zo bij Access? Zo ja, is er dan een equivalent van EXISTS die ik in plaats van Me.RecordsetClone.RecordCount = 0 kan gebruiken?

Groetjes, Hugo


Bericht 4 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:06-10-2004
 Aan:Hugo KornelisMsgID:1460.4
 Onderwerp:A97: sluit bij lege lystForum:ws-nlcomputer
Hoi Hugo,

> Ik heb hier nog wel een vervolgvraagje over
> kan dit nog gevolgen hebben voor de performance?

De RecordsetClone is veel sneller dan een nieuw rs openen, de
query wordt niet opnieuw uitgevoerd, het geeft alleen een kopie
(pointers) naar het huidige rs, je telt dus evt iets wat er al is

met If .RecordCount = 0 vraag je alleen of er nog rec's in het (gefilterde!)
form aanwezig zijn, als je ze al telt dan zeker niet op de server, dit geldt
allemaal onder JET, maar vrijwel zeker ook met sql server als backend

EOF of .NewRecord werkt niet goed in een gefilterd form dus vallen afeen booleaans slimmigheidje ? kan nog wel zijn te kijken of er
uberhaupt records zijn, waarbij het aantal niet interesseant is

Me.AllowDeletions = True
DoCmd.RunCommand acCmdDeleteRecord
Me.AllowDeletions = False
'
If Not Me.RecordsetClone.RecordCount > 0 Then DoCmd.Close


maar uit ervaring (maar dan vooral met JET) weet ik dat werken
met de RecordsetClone lightning fast is, ook met RecordCount...

zeker voor kleine recordsets denk ik dat het allemaal niet(s) uitmaakt

PS COUNT als sql aggregate function werkt natuurlijk wel anders

Groetjes --John



Bericht 5 van 5

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:06-10-2004
 Aan:John Kopmels (Sysop)MsgID:1460.5
 Onderwerp:A97: sluit bij lege lystForum:ws-nlcomputer
Hoi John,

> De RecordsetClone is veel sneller dan een nieuw rs openen,

(...)

> maar uit ervaring (maar dan vooral met JET) weet ik dat werken
> met de RecordsetClone lightning fast is, ook met RecordCount...

Ok, ik ben helemaal gerust gesteld!

Bedankt.

Groetjes, Hugo


 

Gerelateerde onderwerpen

  Onderwerp / Gestart door Reacties Laatste bericht
0 Reacties
2368 Gelezen
Laatste bericht 11 november 2009, 14:20:41
door NLCOMP
0 Reacties
6016 Gelezen
Laatste bericht 24 maart 2010, 13:09:29
door Ronald
2 Reacties
702 Gelezen
Laatste bericht 1 september 2010, 22:35:04
door Henk van Asselt
2 Reacties
403 Gelezen
Laatste bericht 30 oktober 2010, 09:04:22
door Just Vecht


^ Go Up