Avatar billede morten_s Nybegynder
30. april 2001 - 21:05 Der er 15 kommentarer og
1 løsning

DBLookupComboBox

Jeg har et program som indeholder to tabeller

Tabel1 som er hovedtabel indeholder følgende data:
Nr          +  Key
Navn        A  25
Dit
Dat
osv

Tabel 2 har følgende data
Nr              +    Key
Dit
Dat
NrHovedtabel    I
NavnHovedtabel  A
Dut
osv


I tabel 2 slåes NavnHovedtabel op i Navn i hovedtabellen ved hjælp af DBLookupComboBox

Findes der en måde hvormed jeg samtidig med opslaget kan få lagt Nr fra Hovedtabel ind i NrHovedTabel i tabel 2 ??
Avatar billede martinlind Nybegynder
01. maj 2001 - 09:56 #1
Din Lookup table står og peger på den du har valgt, så du kan få fat i alle de andre felter på den valgte record med fieldbyname() og så bruge Insert eller append på den table du skal tilføje til
Avatar billede martinlind Nybegynder
01. maj 2001 - 09:56 #2
Og det skulle jo havde være et svar
Avatar billede morten_s Nybegynder
02. maj 2001 - 11:21 #3
Hej Martin tak for dit svar, men problemet har udviklet sig på følgende måde:

Jeg angiver følgende værdier til DBLookUpComboBox\'en

DataField  NavnHovedtabel
DataSource Tabel2
.
.
.
KeyField  Navn
ListField  Navn
ListSource Tabel1  (Hovedtabel)

Det mærkelige er at når jeg vælger en værdi i LookUpComboBoxen så låses hovedtabellen, sådan at forstå at jeg ikke længere kan skifte gelt

Avatar billede morten_s Nybegynder
02. maj 2001 - 11:21 #4
gelt = felt eller index i hovedtabellen
Avatar billede martinlind Nybegynder
02. maj 2001 - 11:30 #5
Det er fordi du bruger Hovedtablen som Lookup, men det er stadig sådan at når du har valgt noget i den combo, så kan du skrive Tabel1.FieldByName(<Feltnavn>).AsString, og få fat i de felter du har i din hovedtabel, MEN Husk en ComboLookup den \"Låser\" ListSourc\'en ellers kan den jo ikke sortere det også vidre, jeg bruger faktisk sjælendt en DBLookup. Måske er det fordi ListSourcen kun indeholder Feltet Navn.

/Martin
Avatar billede morten_s Nybegynder
02. maj 2001 - 11:32 #6
På hvilken måde bør det så laves således at jeg undgår det ireterende problem ?
Avatar billede martinlind Nybegynder
02. maj 2001 - 11:48 #7
Jeg er ikke helt sikker på jeg forstår dit proplem rigtigt, men jeg plejer at fylde en std combo med den tekst jeg skal bruge, og så gemme det extra jeg skal bruge i Object\'s på Items.

/Martin
Avatar billede morten_s Nybegynder
02. maj 2001 - 12:25 #8
Formentlig med følgende kode

while not Tabel1.Eof do begin
  DBComboBox.Items.Add(Table1.FieldByName(\'Navn\').AsString);
  Table1.Next;
end;

Men hvordan får jeg så lagt nr over i min tabel 2 ?
Avatar billede martinlind Nybegynder
02. maj 2001 - 12:36 #9
while not Tabel1.Eof do begin
  DBComboBox.Items.AddObjects(Table1.FieldByName(\'Navn\').AsString, TObject(Table1.FieldByName(\'Nr\').AsInteger));
  Table1.Next;
end;

På OnClick på comboboxen trækker du Id\'en ud sådan :

Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);

/Martin

PS. Husk at lave din ComboBox om til en Alm ComboBox og ikke en DBComboBox.

PSS. Min erfaring er at de DataAware componenter der er med til delphi ikke er skide gode, men undtagelse af DBGrid\'en den er god, resten klarer jeg med manuele updateringer ( data fra table til edit-controller og tilbage til table igen )
Avatar billede morten_s Nybegynder
02. maj 2001 - 12:41 #10
Samler du på Pointene ?
jeg har lige hævet til det dobbelte, du får dem om lidt.

Hvis jeg nu lidt senere i programmet skal skifte tabel 1 hen til det fundne index hvad gør jeg så ?

Jeg kunne i øvrigt godt tænke mig at lære din teknik med manuel opdatering

Avatar billede martinlind Nybegynder
02. maj 2001 - 12:47 #11
Min Teknik går ud på at jeg på evt. FormShow event\'en tager fat i den record jeg skal vise og så ellers bare FieldByName(), det skal dog lige siges jeg faktisk har lavet en Linker comp. så man designtime at lave connect til editcontroller også bare kalde nogle functioner på min linker.

Du kan søge på tabler med Locate functionen.

/Martin
Avatar billede morten_s Nybegynder
02. maj 2001 - 12:54 #12
Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);

Giver altid 0 som returværdi ?
Avatar billede martinlind Nybegynder
02. maj 2001 - 13:22 #13
Ikke hvis du gør sådan

ComboBox.Items.AddObjects(Table1.FieldByName(\'Navn\').AsString, TObject(Table1.FieldByName(\'Nr\').AsInteger));

Så burde den give dig den værdi du har sat ind. Husk det er AddObjects jeg bruger og ikke bare Add


/Martin
Avatar billede morten_s Nybegynder
02. maj 2001 - 13:52 #14
Når dette gøres
DBComboBoxLnkTilApp.Items.AddObject(TableAppDB.FieldByName(\'Name\').AsString,
    TObject(TableAppDB.FieldByName(\'Nr\').AsInteger));

Så springer begge tabeller til sidste element, kan dette undgåes ??
Avatar billede martinlind Nybegynder
02. maj 2001 - 13:59 #15
Du bruger Stadig DBCombo, prøv at lav den om til en alm ComboBox.

Hvis du ikke kan få det til at virke så pak det sammen med db og mail det til denne adr. martin@e-lind.dk
Avatar billede martinlind Nybegynder
02. maj 2001 - 14:03 #16
a\' takker :-)
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