07. september 2010 - 12:21 Der er 22 kommentarer og
1 løsning

Textbox - controlsource

Jeg kan ikke faa den oenskede tekst til at vise sig i en textbox.

Lad mig lige sige at mit system er paa hollandsk, saa jeg maa gaette mig til de danske betegnelser.  Jeg haaber det er forstaaeligt.

Jeg har en tabel "Organisation" hvor en organisation kan vaere "foraelder" til andre organisationer, for eksempel "Sygehuse" er foraelder til "Odense Sygehus".  Tabellen har, blandt andet, tre kolonner, id, navn, og parent hvor parent for en organisation med en foraelder er id for foraelderen.

Jeg har saa en formular "Form1" der er bundet til "Organisation". "Form1" har to textboxe "txtOrganisation" og "txtParent".  Controlsource for "txtOrganisation" er "organisation". For controlsource for "txtParent" har jeg det foelgende problem:  "Form1" aabnes ved i en listbox i en anden formular at vaelge en organisation.  "Form1" aabnes med navnet paa den valgte organisation i "txtOrganisation", og jeg vil gerne at navnet paa foraelderen, hvis der er en, vises i "txtParent".  Hvis jeg saetter controlsource for "txtParent" til "parent" saa vises kun id nummeret for foraelderen.  Jeg har proevet et antal ting, saa som at saette controlsourcen til "SELECT organisation FROM Organisation WHERE id = " & Me.id , men det resulterer blot i at jeg faar "#Name" i feltet.

Jeg kan sagtens faa foraelderens navn i feltet ved at placere en knop paa formularen med denne kode:

Private Sub Knop20_Click()
    Dim a As String
    Dim i As Integer
    i = Nz(Me.parent)
    If i <> 0 Then
        a = DLookup("organisation", "Organisation", "id = " & i)
    End If
End Sub

men jeg ville som sagt gerne have navnet i txtParent med det samme naar formularen aabner.
Avatar billede neoman Novice
07. september 2010 - 12:40 #1
I designview for tabellen Organisation kunne du under fanen LookUp (nederst til venstre på skærmbilledet) få den til at slå organisationsnavnet op:

DisplayControl Combobox
RowSource Organisation
BoundColumn 1
DIsplayColumns 2
ColumnWidths 0;2.51 (dette skjuler visningen af den første kolonne med ID)
Avatar billede neoman Novice
07. september 2010 - 13:38 #2
Nå ja - du kunne lave samme nummer på formularen direkte - bare lav tekstfeltet om til en ComboBox, og så kan du opnå det samme som at gøre det direkte på tabellen.

Finally: du kunne lave en query, som to gange hover data ud fra Tabel1, linket via ID, og fra feltet i den anden Tabel 1 hive navnet frem. Og hele formularen skulle så baseres på den queery i stedet for tabellen direkte.
Avatar billede anlu Nybegynder
07. september 2010 - 14:22 #3
Eller du kunne lægge din kode der slår forælder-teksten op og sætter den i txtParent i din forms Current-event. (Hvis parent skal kunne ændres mens man har recorden åben, giver det nok mest mening at bruge en combobox som neoman-skriver)
Avatar billede mugs Novice
07. september 2010 - 18:06 #4
Hvad sker der, hvis koden placeres i formularens VedÅbning event?

Hvis koden skal skifte forældre ved postskift, skal koden ligeledes placeres i Current event.
07. september 2010 - 20:15 #5
Jeg vil blot signalere at jeg er i live.  Jeg takker for indlaeg, og jeg skal sudere/afproeve dem naermere, men paa grund af andre 'events' vil det nok vare lidt (programmoeren kan ogsaa vaere events-driven.)
Avatar billede neoman Novice
08. september 2010 - 11:59 #6
Mugs har et godt forslag (hvorfor tænkte jeg ikke på det:-))

Men ellers en queery, som viser det du ønsker kunne være
SELECT Table1.id, Table1.NameOrg, Table1_1.NameOrg
FROM Table1 AS Table1_1 RIGHT JOIN Table1 ON Table1_1.id = Table1.IdParent;
08. september 2010 - 19:37 #7
Jeg er med endnu men ikke klar til at reagere.  Der gaar nok en dag eller to mere.
10. september 2010 - 09:32 #8
Saa er jeg tilbage igen.  Jeg takker for indlaeggene og undskylder ventetiden.

I foreslaar et antal forskellige metode.  Men det jeg specifikt er ude efter er at faa et bestemt vaerdi i en tekstbox ved at indstille controlsourcen.  Hvis det ikke kan lade sig goere med den metode vil jeg gerne vide det.  Hvis det kan lade sig goere vil jeg gerne laere hvordan.

Altsaa, jeg har en formular der er bundet til en tabel Organisation med felterne id (numeric), organisation (tekst), og parent (numeric).  To raekker i tabellen er, for eksempel,

25, Sygehuse, NULL
55, Odense Sygehus, 25

Formularen har tre textboxe txtid, txtOrg og txtPar og controlsourcen for txtid og txtOrg er id og organisation.  Hvis jeg saetter controlsourcen for txtPar til saa vil jeg for id=55 faa vaerdierne 'Odense Sygehus' og 25.  Kan jeg saette controlsourcen for txtParent saa den i stedet viser 'Sygehuse'? Jeg har proevet I controlsourcen at indsaette forskellige variationer af " =DLOOKUP("organisation", "Organisation", "id= " & id), men saa faar jeg enten fejlmelding eller txtPar viser #Navn.

Saa kan det lade sig goere at faa "Sygehuse" i txtPar ved at indstille controlsourcen og har jeg bare faaet syntaksen forkert?  Eller er jeg paa vildspor saa jeg skal finde en anden metode (hvoraf jeg har faaet flere forslag)?
Avatar billede mugs Novice
10. september 2010 - 10:23 #9
=DLOOKUP("organisation", "Organisation", "id= " & id

Når du sætter controlsource skal du "tale" SQL og den enkelte argumenter skal adskilles med ;

Det du gør skal anvendes i en VBA sammenhæng.

Her et eksempel på en Dlookup i en forespørgsel:

Udtryk1:DLOOKUP("[feltnavnorganisation]", "Tabelnavn", "id= " & [id]
12. september 2010 - 09:43 #10
Jeg hader det naar nogen ikke reagerer paa mine indlaeg, og nu goer jeg det selv - jeg er i gang med min foerste commerciele opgave, ikke saerlig stor og ikke for den beskedne sum jeg har forlangt men for udfordringen.  I mellemtiden maa jeg udsaette det problem som denne traad drejer sig om.
14. september 2010 - 17:39 #11
mugs, undskyld ventetiden.  Jeg har lavet to tilpasninger i din kode, rettet til "id=" & parent og sat en slutparantes paa. Efter disse tilpasninger det du foreslaar ligger precis paa linie med hvad jeg havde taenkt og hvad jeg har afproevet, men, som jeg lamenterer over i de tidliger indlaeg, hvis jeg indfoerer =DLOOKUP("organisation", "Organisation", "id= " & parent) eller =DLOOKUP("[organisation]", "Organisation", "id= " & [parent] faar jeg fejlmelding at der er en illegal kode, og hvis jeg skipper '=' og skriver DLOOKUP("organisation", "Organisation", "id= " & parent) saa faar jeg '#Navn' i feltet.

Jeg startede forfra i en lille test-Access(2003) application og der faar jeg det samme problem.  Hvis du gider kikke paa det kan jeg emaile filen.
Avatar billede neoman Novice
14. september 2010 - 20:08 #12
nok fordi du lægger DLookup ind som control source; som mugs skrev, så skal source snakke SQL. DLookup er et udtryk, så sæt den bare ind som værdi.
14. september 2010 - 21:58 #13
Jeg soegte hjaelp til hvad jeg skal bruge som control source for en textbox for at faa den til at vise parent's organisation og jeg forstod mugs' indlaeg saaledes at jeg skulle bruge

=DLOOKUP("organisation", "Organisation", "id= " & id

(mugs, undskyld hvis jeg igen ikke havde forklaret mig ordenligt, men hvad mente du?)

neoman, hvad skal jeg bruge som controlsource?  Jeg proever at sammenfatte:

Jeg har en tabel med tre kolonner, id, organisation , og parent.  parent er en integer og er id for en parent organisation.  Tag for eksempel disse to records: 

12, Sygehuse, NULL
25, Odense Sygehus, 12

Det vil sige at Sygehuse er en overordnet organisation til Odense Sygehus.

Saa har jeg en formular der er bundet til tabellen og dens tre tekstboxe viser, naturligvis, id, organisation, og parent-nummeret hvis der er en parent.  Men jeg vil gerne ogsaa have organisationsnavnet paa parent.  Saa jeg laver endnu en textbox og proever at finde en rowsource der vil give mig dette organisationsnavn. 

Der er muligvis et stort antal alternative metoder jeg kan bruge (de tidligere indlaeg i traaden har antydet et antal,) men af paedagotiske grunde (jeg er i gang med at studere Access) har jeg brug for at laere om controlsources.  Hvis det ikke kan lade sig goere at konstruere en controlsource der giver mig parent's organisationsnavn saa vil jeg gerne vide det saa jeg kan gaa i gang med resten af mit liv.  Men hvis det kan lade sig goere vil jeg vaere taknemmelig for at laere hvordan.  Please....
Avatar billede mugs Novice
14. september 2010 - 22:09 #14
Christian:

mugs snabelting mail.dk

Gerne med en kort forklaring på hvad du vil.
14. september 2010 - 22:59 #15
zipfil sendt.
Avatar billede mugs Novice
15. september 2010 - 15:50 #16
Returneret.
17. september 2010 - 05:22 #17
mugs, jeg er ked af at jeg traekker dette i langdrag, men jeg har midlertidigt maattet give Access en prioritet under noget andet.  Jeg kikkede paa de filer du returnerede.  Jeg laegger maerke til at du i Dlookup som controlsource adskiller elementerne med simikolon i stedet for med komma og saa virker det sommetider.  Men hvor jeg skal bruge en organisations foraelder, altsaa tilfaelde hvor id = parent (og det virker) saa viser dit eksempel soegning efter en organisations barn, altsaa parent = id.  Det er nemt nok at vende det om til Dlookup("organisation"; "Organisation"; "ID = " & parent) men saa giver det vaerdien #Fout.  For at proeve at forstaa det lavede jeg en knap med en onclick event med koden

Dim s As String
s = DLookup("organisation", "Organisation", "id = " & Me.parent)
End Sub  Men saa faar jeg fejlmeldingen at udtrykket indeholder en ugyldig reference til egenskaben Parent.  Ogsaa naar jeg proever med Nz(Me.parent).

Saa der er et problem med vaerdien parent som ikke er der med vaerdien id.  Men i tabellen er de begge Numeric.  Fatter du (eller andre) det?
17. september 2010 - 05:25 #18
Undskyld forvirringen - mugs, du fik det til at virke med parent=id, men jeg skal bruge tilfaelde hvor id=parent og saa virker det ikke.  Jeg fik vist sagt det omvendt ovenfor.  (Men jeg fatter stadig ikke forskellen.)

Jeg staar og skal fange flyveren og paa ferie, jeg skal vende tilbage naar jeg i morgen er ankommet og blevet installeret (det er paa den anden side af kloden.)
Avatar billede mugs Novice
17. september 2010 - 07:31 #19
Du tager bare den tid du behøver. Det er helt fint at du skriver, at du er fraværende grundet ferie eller andet.

På venstre side af = har du info om de data du vil hente fra tabellen. Det gør det lidt forvirrende at feltet og tabellen h ar samme navn. Jeg kan kun anbefale at du laver en navnekonvention, og sætter et prefix foran objektnavnene. Jeg plejer at navngive alle tabeller med TBLxxx og ale felter med FLD. SÅ bruger jeg titelteksten til at sætte etiketter på. Så ved jeg altid hvilken objekttype jeg ar bejdet med.

I dette tilfælde ville koden se således ud: 

DLookup("FLDorganisation", "TBLOrganisation", "FLDid = " & Me.FLDparent)

I pseudokode betyder det:

Hent data fra feltet FLDorganisation i tabellen TBLorganisation, der hvor FLDid er = formularens FLDparent.

Hvis du bytter om på FLDid og FLDparent (of dermed ændre kriteriet), skal du prøve at åbne tabellen og analysere hvilke poster der så skal komme. Dine filer ligger hjemme, så jeg ser lige på dem , når jeg kommer hjem.

God ferie.
04. oktober 2010 - 17:32 #20
Saa er det vist paa tide at jeg aktiverer denne traad igen.  mugs, det du forklarer er precist hvad jeg selv har vaeret overbevist om er korrekt, og dog virker det ikke.  I stedet for at faa organisationens navn fra FLDorganisation i TBLOrganisation faar jeg #Navn.

Jeg har omlagt databasen med brug af din foreslaaede navnekonvention og jeg sender dig den, med forlov.  Tak paa forhaand for din taalmodighed.
Avatar billede mugs Novice
04. oktober 2010 - 17:52 #21
=DLookUp("[FLDorganisation]";"TBLOrganisation";"[FLDid]=" & [FLDparent])
07. oktober 2010 - 17:25 #22
Mugs, tak for din hjaelp her og gennem email korrespondence.  Jeg har nu forstaaet det GRUNDLAEGGENDE problem, nemlig at jeg i udtrykket henviser til et felt der i visse tilfaelde er tomt (feltet FLDparent er i tabellen, og derfor i formularen, tomt for de organisationer der ikke har nogen parentorganisation.)  Med den indsigt paa plads kan jeg begynde at forholde mig til hvordan jeg saa skal loese det.  Det kunne resultere i yderligere spoergsmaal her paa Eksperten.  Tak for din hjaelp - opret venligst svar.
Avatar billede mugs Novice
07. oktober 2010 - 20:58 #23
Efter lidt mailen frem og tilbage tror jeg, at vi er nået frem til en løsning.
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