Avatar billede hugopedersen Nybegynder
20. februar 2002 - 10:27 Der er 41 kommentarer og
2 løsninger

Standse udførelse af kode til formular lukkes - hvordan

Jeg har et meget alvorligt problem i Access. Jeg beskriver :

Fra noget kode åbner jeg en formuar i  acDialogmode - det gør at udførelse af koden stopper indtil formularen lukkes igen. Dette er fordi at jeg skal bruge nogle data, som enten oprettes eller findes frem via den åbnede formular.
Problemet er bare at når formularen åbnes på denne måde, så virker  DoCmd.RunCommand acCmdFind  ikke.  Det kan jeg få det til at gøre hvis jeg åbner formularen  acNormal men så stopper udførelsen af min kode ikke.

Nogen ideer ?
Avatar billede terry Ekspert
20. februar 2002 - 10:38 #1
Is it the form which is open in acDialogmode which you are having problems with  DoCmd.RunCommand acCmdFind?
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 10:39 #2
Yes
Avatar billede terry Ekspert
20. februar 2002 - 10:57 #3
In the docmd.openform DO NOTopen in acDialog mode. In the form you open change the property "Modal" to YES.
Avatar billede terry Ekspert
20. februar 2002 - 10:58 #4
It should work as you want it now :o)
Avatar billede terry Ekspert
20. februar 2002 - 11:10 #5
hugopedersen>Doesnt it work? It works here, that is if I am doing what you say!
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:11 #6
Desværre må jeg tilstå at det ikke virker som jeg ønsker.
Min kode ser sådan ud :

  DoCmd.OpenForm conDriverForm, , , , , , "Slip"
  If MsgBox("Ønsker du at benytte chauffør : " & fhpReg_Get_CurrentDriver_Name, vbQuestion + vbYesNo, "Bruge kundenummer") = vbYes Then
    Forms(strForm).cboDriverID = fhpReg_Get_CurrentDriver_ID
  End If

Så snart formularen conDriverForm åbnes stilles spørgsmålet som først skulle stilles efter at formulaer er lukket igen ;-(
Avatar billede terry Ekspert
20. februar 2002 - 11:18 #7
Yes I can see it doesnt work as expected, although i done undertsnad why! This is taken from Access Help

"When you open a modal form, other windows in Microsoft Access are disabled until you close the form"

and as far as I can see, it should work the same as if you had opened it in acDialogmode!
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:24 #8
I like the phrase 'it should work' :-)

Wonder if this is a phrase uncle Bill has invented.
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:26 #9
What I want to do is that from a form where I have a combobox to select some drivernames, I want to be able to open the driver form and add/search drivers and then when the for is closed to be asked if I want to use this data.
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:31 #10
Was just testing if it could have something to do with the fact that the code it called from a shortcut menu ( I use that a lot ) but even if the code is put on a button on my pay slip form the result is the same.
Avatar billede terry Ekspert
20. februar 2002 - 11:36 #11
Not quite sure I understand! In one form you have a combo containing drivers. Do you want to be able to ADD a driver to this IF it doesnt exist? So you opne the driver form and add/search and thencome back to the first form? Why do you need to search in this form?
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:43 #12
I want the user to be able to open the driver form and add a new driver if needed, but I also want the user to be able to search the available drivers. 

I use the same function on my invoice form to find/add customers.
Avatar billede terry Ekspert
20. februar 2002 - 11:58 #13
But does it work in your invoice form?
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 11:58 #14
Nope ;-(
Avatar billede terry Ekspert
20. februar 2002 - 11:59 #15
I would suggest that you make your own search routine instead of the Find form.
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 12:20 #16
Might be a solution, but how :-)
Avatar billede terry Ekspert
20. februar 2002 - 12:30 #17
Well a VERY simple, and easy way is to place a combo box on the from using th wizard. Here you can choose to Find A Record on your form. This will add a combo and the code to find a specific record from your selection in the combo box. You could then change the combo to a text field if you want and then alter the code accordingly!
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 12:37 #18
I will give it a try when I get home tonight ( if I can get through the snow )

I will return tomorrow.
Avatar billede terry Ekspert
20. februar 2002 - 12:45 #19
OK :o)
20. februar 2002 - 14:16 #20
Følgende kode checker om en formular er lukket. Derved kan du åbne den normalt som Modal og popup og benytte accmdFind m.m.:

    Do While CurrentProject.AllForms("DinFormular").IsLoaded  'Vent til dialogbox er lukket
    If Forms!DinFormular.Visible = True Then
      DoEvents                  'Frigør processortid til dialogbox
    Else
      Exit Do
    End If
  Loop


/Thomas
Avatar billede hugopedersen Nybegynder
20. februar 2002 - 14:20 #21
Thomas - det vil jeg lige afprøve senere og så vender jeg tilbage.
Avatar billede terry Ekspert
20. februar 2002 - 14:32 #22
Hi Thomas! I concidered the same solution, but didnt think it was such a good idea. Do you have an explanation as to why code keeps executing when you the form is opened modal?
20. februar 2002 - 16:10 #23
Terry (og Hugo)-> når mit eksempel benyttes skal man IKKE bruge acDialogmode-parameteren til at åbne formularen. Man skal blot åbne den normalt. Når jeg skriver at man skal åbne den modalt og som popup, så mener jeg at egenskaberne Modal og Popup på formen kan sættes til True.

/Thomas
Avatar billede terry Ekspert
20. februar 2002 - 17:36 #24
Yes I thought that Thomas!
Avatar billede hugopedersen Nybegynder
21. februar 2002 - 07:34 #25
Thomas - når jeg gør som følgende, så åbnes formen conDriverForm godt nok og jeg kan også godt trykke på min søgeknap og få søgebilledet frem, men så springer kæden af. Jeg kan ikke vælge noget i comboboxene eller trykke på knapperne.  Jeg har sat Modal og Popup til True.

DoCmd.OpenForm conDriverForm, , , , , , "Slip"
Do While CurrentProject.AllForms(conDriverForm).IsLoaded
  If Forms(conDriverForm).Visible = True Then
    DoEvents
  Else
    Exit Do
  End If
Loop
Avatar billede terry Ekspert
21. februar 2002 - 11:03 #26
hugopederse> I will take a look at your dB if you want? dktebrsa@europe.lego.com
Avatar billede hugopedersen Nybegynder
21. februar 2002 - 11:55 #27
Terry> that would have been nice, but as it is a commercial application that I am making a bit of money developing for some cab companies, I hope you understand why I hesitate.

I have decided to try and create some sort of search routine.  I have one I use in a SQL server / Access application that I might give a go at converting a bit.
Avatar billede terry Ekspert
21. februar 2002 - 12:12 #28
no problem!
21. februar 2002 - 14:20 #29
Hugo-> Hmm, det lyder underligt, at du ikke kan benytte kombobokse eller knapper på formularen - jeg bruger selv metoden til at lave min egen inputbox (derved kan jeg netop bruge kombobokse og andre smarte opslagsmuligheder, som man ikke har i en inputboks).
Derfor er det min fulde overbevisning at du må have sat nogle egenskaber forkert på formularen - har du kontrolleret at du f.eks. ikke har sat AllowEdit til false??

/Thomas
Avatar billede hugopedersen Nybegynder
21. februar 2002 - 14:49 #30
Thomas -> Det er på Access' searchformular at jeg ikke kan få lov til at bruge comboboxe - ikke på min egen formular.
Når jeg trykker på min search knap, kommer Access fint med sit søgevindue, men her kan jeg kun taste i søgelinien. Jeg kan hverken vælge søgemåde eller trykke på Search knappen.
21. februar 2002 - 14:57 #31
Hvad hvis du den IKKE sættes til at være popup og modal?
Avatar billede hugopedersen Nybegynder
21. februar 2002 - 15:02 #32
Thomas -> jeg kommer til at kigge nærmere på dine svar og bliver lige pludselig i tvivl om vi måske snakker lidt forbi hinanden.
Lidt mere specifikt så er det jeg gør :
Jeg har en formular åben hvor jeg kan taste løndata ind - kald den lønform
På denne formular har jeg en comboboks hvor jeg kan vælge en chauffør. Her vil jeg så gerne have mulighed for at åbne min formular til vedligehold af chauffør data - kald den chaufførform
Fra chaufførform vil jeg så have mulighed for at søge efter en bestemt chauffør, som skal føres tilbage til lønform når chaufførform lukkes.
Avatar billede hugopedersen Nybegynder
21. februar 2002 - 15:05 #33
Samme 'nedslående' resultat !
21. februar 2002 - 15:15 #34
Jeg kan godt se, at søgboksen bliver lidt 'uduelig', når man bruger den på denne måde - det har jeg faktisk ikke haft prøvet før (jeg bruger aldrig søgboks, da den er for langsom på større datamængder - istedet bruger jeg filter).

Men jeg ville så bare flytte noget af koden til din chaufførform. Nemlig den kode, som lægger chaufføren tilbage på lønformen.

Dvs at du på din [Vælg]-knap på Chaufførformen skriver:
Forms!Lønform!ChaufførID = Me!ChaufførID
docmd.Close acform, me.name

Hvis du bruger Chaufførformen andre steder, skal du selvfølgelig sikre dig, at denne kode kun udføres i denne situation.

/Thomas

PS: du behøver ikke at afvise svarene hver gang - det giver sig selv, når du tildelere point til sidst. Derved behøver folk ikke at skulle klikke "Svar" hver gang og det virker heller ikke så uhøfligt :o)
Avatar billede hugopedersen Nybegynder
22. februar 2002 - 08:30 #35
Jeg har hermed droppet ideen om at bruge den indbyggede søgefunktion!
Jeg kunne selvfølgelig godt lave noget med et filter på formularen, men det er jeg bange for at den / de 'kontormus' der skal bruge min applikation går vildt i. Og så ved jeg godt hvad der sker med min telefon :-)

Jeg har i stedet gjort det at jeg har lavet en ekstra query på tabellen med de tekstfelter jeg ønsker at der skal kunne søges i og har så lavet en lille funktion der looper alle records + felter og returnerer et nummer på den første record der indeholder teksten. Dette tal bruger jeg så til at jumpe til en record på formularen.
Jeg ved godt det ikke er en optimal løsning rent teknisk, men menneskeligt er det nemt at forklare folk at hvis de taster noget i et felt og trykker enter, så får de vist den første record hvor det indgår ( eller besked på at det ikke findes)
Avatar billede hugopedersen Nybegynder
22. februar 2002 - 08:31 #36
PS:  en detalje er dog at man skal huske at søgequery og formulaeren recordsource SKAL sortere på samme måde - ellers går det ikke :-)
Avatar billede terry Ekspert
22. februar 2002 - 08:32 #37
I think its a good solution hugopedersen!
Avatar billede hugopedersen Nybegynder
22. februar 2002 - 08:36 #38
Personaly I like it too but if there is a lot of records and fields to be searched, then ..................

I use the same way in some SQL Server / Access applications and that is no problem.

The issue in this method is to remember that the sorting of both recordsources has to be the same.
I use two recordsourcen to be able to control the number of fields the search is done on.

Hugo
http://www.access.hugopedersen.dk
Avatar billede terry Ekspert
22. februar 2002 - 08:36 #39
hugopedersen> If you use the SAME code as the cobobox wizard generates the you dont need another query!

Place a combo on the form using the wizard and get it to find a record on your form based on the value selected. Then change the combo to a text field and then MODIFY the code to use the value you enter in the text box (see my comment 20/02-2002 12:30:43)
Avatar billede hugopedersen Nybegynder
22. februar 2002 - 08:54 #40
Was just away for a minut checking my backup ( can't figure out why backup is done at 1300 MB/min and verify only at 1050 MB/min :-) )

I have tried that, but for some reason the wizard isn't working neither here at work or at home ( gets a weird errormessage ) and on my other computer here at work I run Office XP and the search option of the combobox doesn't exist on that.
Avatar billede terry Ekspert
22. februar 2002 - 10:00 #41
I think the problem is that th ewizard creates code for DAO and if your using ADO then it doesnt work! IF  you are NOT using ADO then remove it from your references and choose DAO.

I actually found that sometimes the option for Finding a record on your form isnt even there, but I never did fathom out why!
Avatar billede hugopedersen Nybegynder
22. februar 2002 - 10:22 #42
Jeg har delt pointene mellem jer for alle de gode ideer - selv om jeg endte op med at bruge min egen ide.
Avatar billede terry Ekspert
22. februar 2002 - 10:25 #43
:o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester