Avatar billede schmidt Nybegynder
14. januar 2000 - 12:14 Der 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.
Avatar billede lrj Nybegynder
14. januar 2000 - 12:46 #1
Combobox.iteminidex :=1;

Forudsætter selvfølgelig der er noget at vælge af...
Avatar billede sjensen Nybegynder
14. januar 2000 - 13:03 #2
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.

sjensen
Avatar billede delphi Nybegynder
14. januar 2000 - 13:06 #3
Lrj> Du mener vel ...ItemIndex := 0!  Det er en 0-baseret array..


NiP
Avatar billede lrj Nybegynder
14. januar 2000 - 13:32 #4
delphi > Min fejl - selvfølgelig er det 0-indexeret.. ;)
Avatar billede schmidt Nybegynder
14. januar 2000 - 13:54 #5
Jeg prøver lige, at formulere mig igen.

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.
Avatar billede lrj Nybegynder
14. januar 2000 - 14:01 #6
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...

/Laust
Avatar billede sjensen Nybegynder
14. januar 2000 - 14:06 #7
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

combobox1.itemindex := combobox1.items.indexoff('bla');

hvor bla er den tekst der fremgår af den linie du vil have vist.

sjensen
Avatar billede schmidt Nybegynder
14. januar 2000 - 16:47 #8
Jeg er glad for, at i prøver at hjælpe mig.

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.

Hilsen Schmidt
Avatar billede sjensen Nybegynder
14. januar 2000 - 17:20 #9
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 ??

sjensen
Avatar billede schmidt Nybegynder
14. januar 2000 - 23:51 #10
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.
Avatar billede koonz Nybegynder
15. januar 2000 - 16:06 #11
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.

procedure TfrmMain.cmbLandDropDown(Sender: TObject);

Var
vDummyString : string;
vBufferList : TStringList;

begin
vBufferList := TStringList.Create;
QryLand.Close;
QryLand.sql.Clear;
QryLand.sql.Add('SELECT CONTRY FROM LANDE');
QryLand.sql.Add('ORDER BY CONTRY');
QryLand.Open;
QryLand.First;
cmbLand.Text := Qryand.FieldByName'CONTRY').AsString;
while not qryLand.eof do
  Begin
  vDummyString := QryLand.FieldByName('CONTRY').AsString;
  vBufferlist.Add(vDummyString);
  qryLand.Next;
  end;
CmbLand.DropDownCount := Bufferlist.Count;
CmbLand.Items := vBufferlist;
vBufferList.Free;
end;
Avatar billede koonz Nybegynder
15. januar 2000 - 16:08 #12
Der skal selvfølgelig stå
cmbLand.Text := Qryand.FieldByName('CONTRY').AsString;

istedet for
cmbLand.Text := Qryand.FieldByName'CONTRY').AsString;
Avatar billede koonz Nybegynder
15. januar 2000 - 16:18 #13
Hvis der skal stå noget når du viser formen skal du selfølgelig også lave koden på Form.SHow eventen
Avatar billede koonz Nybegynder
15. januar 2000 - 16:20 #14
Jeg er hvis ikke mig selv idag ;)

Du skal undlade

cmbLand.Text := Qryand.FieldByName'CONTRY').AsString;

i dropdown eventen ;)
Avatar billede schmidt Nybegynder
17. januar 2000 - 10:34 #15
Hej Koonz.

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?

Tak for hjælpen.
Schmidt.
Avatar billede koonz Nybegynder
17. januar 2000 - 19:00 #16
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;
Avatar billede schmidt Nybegynder
17. januar 2000 - 20:02 #17
Hmmm - TDBLookUpCombobox-komponentet er sikkert designet til brug sammen med TTable, hvor man har mere direkte (online) adgang til en database.
Avatar billede koonz Nybegynder
18. januar 2000 - 09:18 #18
Lyder ikke usansynligt ;)
Avatar billede clavo Nybegynder
11. september 2000 - 15:24 #19
For TDBLookupComboBox:

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 :-).
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
Kurser inden for grundlæggende programmering

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