07. september 2010 - 12:21Der 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.
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)
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.
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)
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.)
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;
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)?
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.
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.
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....
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?
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.)
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.
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.
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.
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.
Efter lidt mailen frem og tilbage tror jeg, at vi er nået frem til en løsning.
Synes godt om
Ny brugerNybegynder
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.