Avatar billede it-dyret Nybegynder
19. august 2001 - 12:17 Der er 6 kommentarer og
1 løsning

Kontrolelementer vises ikke på formular

Jeg har en database over abonnenter, hvor man fra en hovedmenu bl.a. har mulighed for at vælge en abonnent fra en liste (AbonnentSearchAbonnent) og trykke på en knap for at slette denne. Det er så meningen, at der skal komme en ny formular (Abonnent) frem med abonnentens navn, hvor man så har mulighed for at bekræfte sit valg eller annullere. Til knappen er knyttet følgende kode...

Form_Abonnent.AbonnentOverskrift.Caption = \"Vil De slette abonnenten?\"
Form_Abonnent.AbonnentSlet.Enabled = True
Form_Abonnent.AbonnentSlet.Visible = True
Form_Abonnent.AllowAdditions = False
Form_Abonnent.AllowEdits = False
                           
Dim strNewRecord As String
strNewRecord = \"SELECT * FROM Abonnent \" _
& \" WHERE Abonnent = \'\" _
& AbonnentSearchAbonnent.Value & \"\'\"
Form_Abonnent.RecordSource = strNewRecord
               
Form_Abonnent.Visible = True

Problemet er, at når formularen kommer frem er den tom - dvs. at der ikke er nogen kontrolelementer af nogen art! Tilfældigvis har jeg fundet ud af, at hvis jeg højreklikker inden for formularen og vælger \"fjern filter/sortering\", kommer samtlige kontrolelementer frem!

Hvorfor???? Og hvad skal jeg gøre for at få det til at virke uden sådan et mærkeligt krumspring?
Avatar billede seider Nybegynder
19. august 2001 - 12:23 #1
du skal vel bare lave en strNewRecord = \"Select * from abonnent where abonnent =\"
strnewrecord = StrnewREcord & abonnentsearchabonnent.value

du kan eventuelt lige bede den om at skrive din strnewrecord ud når den er lavet inden du køre sqlscriptet

www.fotx.net/seider
Avatar billede it-dyret Nybegynder
19. august 2001 - 13:46 #2
Hvis du mener, at jeg skal udskifte linien, strNewRecord, i min kode oven for med

strNewRecord = \"SELECT * FROM Abonnent WHERE Abonnent =\"
strNewRecord = strNewRecord & \"\'\" & AbonnentSearchAbonnent.Value & \"\'\"

så giver det nøjagtig samme resultat. Problemet er stadig det samme - kontrolelementerne er der ikke! Men de kommer frem hvis jeg højreklikker og vælger \"fjern filter/sortering\"...
Avatar billede nih Novice
19. august 2001 - 15:58 #3
Prøv at tilføje:

Form_Abonnent.FilterOn = False

Det slår egenskaben filter fra vha kode, men du kan også gøre det i formularens egenskabsark.

Niels
Avatar billede it-dyret Nybegynder
19. august 2001 - 19:36 #4
Det har jeg prøvet, men det virker ikke... Det underlige er, at jeg ikke tror, at det har noget med et filter at gøre, da jeg ikke har lavet noget filter. Men jeg har en mistanke om, at der er en event ved \"fjern filter/sortering\", som opdaterer skærmen. Desværre virker følgende heller ikke:

Form_Abonnent.Refresh
Form_Abonnent.Requiry
Form_Abonnent.Recalc
Form_Abonnent.Repaint
20. august 2001 - 03:40 #5
Hej IT-Dyr,

Det er en lidt \'sjov\' måde, du åbner din \"Abonnent\"-formular på.
I stedet for at ændre formularens Recordsource, så kan du jo bare åbne den med en Where-klausul:
Docmd.Openform \"Abonnent\",,,\"Abonnent = \'\" & Me!AbonnentSearchAbonnent & \"\'\"

Du har sikkert en grund til at gøre det på din egen måde - jeg kan f.eks. ikke se at du rent faktisk åbner formularen, så måske ligger du bare og ændre formularens .visible-egenskab? Derved vil mit forslag ikke virke.
Hvad er grunden til dette?

Om alle omstændigheder vil det nok være en god idé at udskrive strNewRecord i debug-vindue eller i msgbox.

/Thomas
Avatar billede it-dyret Nybegynder
20. august 2001 - 10:28 #6
Takker Thomas!

Den lidt \"sjove\" måde, jeg har forsøgt at åbne vinduet på, skyldes at jeg først for nyligt, er begyndt at arbejde med Access\' GUI... Da jeg fra starten sikrede mig via en msgbox, at jeg havde fat i de rigtige data, tænkte jeg, at problemet var andetsteds...

Din metode virker, men kan du ikke lige fortælle mig, hvad forskellen er i, at man blot piller ved formularens .visible egenskab?
20. august 2001 - 10:35 #7
Når du bare sætter .Visible=False forbliver formularen loaded i hukommelsen i modsætning til at benytte docmd.Close.
Dette kan være en fordel, hvis man har en meget stor og \'tung\' formular, som tager lang tid at indlæse.
Omvendt bliver kode, som ligger i formularens OnOpen- og OnLoad-hændelser ikke aktiveret, når du benytter .visible = true istedet for docmd.Openform.

hvis du ønskede at bibehold din metode, kunne du formentlig har skrevet:
Form_Abonnent.Filter = strNewRecord
Form_Abonnent.FilterOn = True

Derved ville der ske det samme, som når du bneytter docmd.openform med Where-klausulen.

/Thomas
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