14. januar 2000 - 12:14Der er
18 kommentarer og 1 løsning
TDBLookupCombobox
Jeg har en formular med adgang via TQuery til en database. Jeg kan ikke finde ud af, hvordan man man får Combobox'en til at vise den første post fra min forespørgsel. Combobox'en virker, men det er lidt misvisende, at starte på en formular, hvor der intet står i Combobox'en.
Sæt en datasource på formen og lad den bruge TQuery som table. Sæt derefter dbcombobox's datasource property til at pege på datasource1. Så vil den vise 1. rec i tquery resultset efter kaldet.
Da du ikke har kaldt noget før du laver tquery1.open (eller execute) så kan den selvfølgeligt ikke vise noget før.
For at få den til at vise den første record i det table den peger på skal du bare kalde tquery1.open med sql Select felt from db where keyfelt = første værdi, i formshow/create. derved vil den vise første rec.
en anden mulighed er at smide et table på også der peger på samme database som tquery, sætte lookupcombobox feltnavn og datasource til at pege på table, og lave en table1.open, indtil du kalder tquery.open. Lige inden sætter du datasource til tquerys datasource og fjerner feltnavnet fra lookupcomboboksen. Det er snyd men det virker.
Jeg har en Combobox der virker! - jeg har valgt en datakilde! Jeg kan godt vælge noget fra den, hvis jeg med musen klikker på den. Den kører på TQuery, der har et SQL-statment, og det er aktivt så snart projektet er åbent.
Mit problem er, at når jeg åbner formularen, så er der en Combobox man skal vælge noget i. Umiddelbart ser den tom ud, derfor skal den første post fra min forespørgsel kunne ses heri.
Lrj - Jeg sider her med Delphi 3, og i min Objectinspector har jeg noget der hedder ListFieldIndex, men det har jeg afprøvet.
PS. Hvis jeg bruger et DBEdit-felt vises den første post automatisk.
Hvis du skifter over til events i object inspectoren, kan du vælge ex. OnShow eventen. Heri kan du bede den om at vælge første item i listen. Om det er itemindex den hedder er jeg ikke 100% sikker på, men et hurtigt kig i hjælpen under "properties" skulle vise hvad den hedder...
Hvis comboboksen i forvejen er fylde, men der bare ikke er valgt nogen, er combobox.itemindex := 0; løsningen til at vise den første linie i listen i selve combobox.text.
Hvis det ikke skal være den, men en anden af linierne så skal du bruge
lrj - Ja et hurtigt kig i hjælpen - Jeg kan bare ikke finde det. Derfor har jeg spurgt Jer.
sjensen - der er ingen Properties på TDBLookupCombobox, der hedder items eller itemindex.
Hvis i vil prøve det, så opret en database med en lille tabel, samt en Form med et TQuery-komponent, med et simpelt SQL-statement, et TDataSource-komponent, og en TDBLookupCombobox. Se så hvordan skidtet teer sig.
schmidt>Hvad er årsagen til at du vil bruge en dblookupcombobox ?
Er det fordi at du skal kunne vælge en værdi fra listen af comboboksen, der så henter/viser de data i table1 dataene peger på ? Og det du så vil er at comboboksen bliver udfyldt af resultatet, d.v.s. med en feltværdi, fra dit sql-kald med query1 ??
Helt konkret så har jeg en formular, der har adgang til en Acccess-database med oplysninger omkring nogle forpagtere (af arealer, altså jord). På min formular er der faktisk to komponenter af typen TDBLookupCombobox. Den første slår op i en tabel med samtlige ejerlav der findes i Danmark. Når man har fundet det rette ejerlav, vises kommunen i et TDBText-felt ved siden af. Herefter kan man slå op i en tabel over alle disse matrikelnumre der er udlejet i det valgt ejerlav. Sagen er, at der i den første Combobox skal stå navnet på det første ejerlav, dvs. den første record i tabel, der via et SQL-statement er knyttet til den.
Hvorffor bruger du ikke en "almindelig" combobox, selecter i din database, og så fylder værdierne ind i den på Dropdown eventen, den kan du skrive til hvad det passer dig.
Det er meget fint det du har givet mig. Linjen "CmbLand.DropDownCount := BufferList.Count;" kom lidt bag på mig. Den åbner Combobox-komponentet i sin fulde lægnde - min liste er meget lang.
En anden ting er, at jeg ikke forstår, hvorfor man ikke skal bruge Data Controls-komponenterne, som TDBLookUpCombobox. Kan du give mig et svar på dette?
Det med CmbLand.DropDownCount := BufferList.Count; er fordi det er taget fra en af mine applicationer, hvor jeg enten har 3 eller 5 valg muligheder, jeg kan godt se problemet hvis du har mange ;)
Jeg ved faktisk ikke hvordan det skal lade sig gøre med TDBLookUp, jeg kæmpede, som du, med den i lang tid, men fandt til sidst ud af at bruge den anden, som sagt - fordelen er at .Text ikke er skrive beskyttet, så du kan skrive til den hvad du vil ved start, eks. ---Vælg land---
Men hvis nogen har løsningen til TDBLoo.. vil jeg da gerne se den.
Ps. Den pæneste måde at bruge TStringList på er egentlig
Begin Try Test := TStringlist.Create; Bla Bla Bla Finally Test.Free end; end;
DBLookupComboBox1.KeyValue:=\'xxx\' Viser feltet med værdien \'xxx\'
DBLookupComboBox1.DropDown åbner boxen,og DBLookupComboBox1.DropDownRows=x specificerer antallet af rækker. Default er 7.
Her vil ændringer i databasen også afspejles med det samme (da det er et lookup :-).
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.