03. oktober 2003 - 16:48Der er
20 kommentarer og 1 løsning
Vis Memo udfra valg i ListBox
Listboxen viser felter fra en (helst) ADO -database. Memoen skal vise memofeltet i databasen.
Pædagogisk eksempel/eksempler, der kan bringe mig/os videre i løsningen af dette for mig (hobbyprogrammør) og åbenbart osse andre med sørre viden (jvf. ref i 1.st kommentar.
I virkeligheden kan jeg forstå at dblookupcomboboxe er beregnet til denne 'øvelse', men er de overhovedet kostrueret til ADO ?.En liste med felter fra en adoDB, der viser et andet felt, når man klikker i listen.Det burde da kunne gøres uden for store krumspring.Men de bøger jeg har er meget sparsomme i beskrivelsen af dette og hjælpen er heller ikke så informativ.Det er kun for øvelsens skyld fordi jeg gerne 'selv' ville kunne konstruere det.Ellers er det jo dbgrids og meget andet der kan lave det samme.
Send et svar borrisholt, den virker jo. Tak.. jeg ville selv som "Hobby Programmør : ) " gerne vide hvad det der ensum eller hvad det er for noget,..... er for noget.. VH Koden12
Tak Borrisholt.Har siddet og hevet mig i håret hele natten.Var ved at blive 'kodeblind'.Det glæder mig at tingene med ADO ikke er uopnåelige nu hvor BDE er ved at blive lidt 'ukorrekt'.ADO giver osse bedre forståelse for online-ting som jeg har lidt ambitioner om at lege lidt med at åre. 'De der' 'create self'-ting giver mig berøringsangst.Må se at få øvet mig lidt mer.Og nu er jeg kommet et stykke videre.
Enum er en forkortelse af Enummerær data type. I C++ kalder man det bare for enum, og da vi i Delphi ikke har noget ord foor den slags datatyper er det blevet til enum.
en enum data type er noget der kan indtage et antal bestemte værtier fx :
De der ting man kan vise i en listbox har jeg opfattet som afhængige af nogle Get-kommandoer getenum.. 0sv, og i Delpi-demos er der et testprogr., hvor der desuden er lagt en dbGrid og en navigatorpanel ind og så er det åbenbart let at få vist noget i en dbmemo, udfra valg i en grid, men det jeg egtl. synes kunne være en 'øvelse var at få vist en dbmemo udfra valg i en listbox - uden at koble gridden og navigatoren på: kan man det? Din bagvedkørende unit Classes er meget smart, men forvirrer mig en del.
Ja Ja Ja jeg må jo sikkert prøve at finde ud af resten selv.Jeg bad jo osse 'bare' om noget der kunne bringe os videre.Og det har afgjort. Det er ikke så let at blive 'familiær' med de kode-'numre', der knytter sig til ADO-dataset osv.Jeg er nogenlunde klar over at det er noget man bruger i andre sammenhænge osse.Open Arreys er noget jeg gerne ville kunne mestre.Må kigge på dine eksempler ved lejlighed.Foreløb tak for det lille 'skub' fremad.
Koden12: skal jeg forstå det sådan at du har opnået det med dbmemoen ?.Hvad har du da gjort ?.Har du forbundet dbmemoen via en datsource eller via adotabellen ?.
Hej janbb Når jeg peger på en af dem i Listbox vises med Boris sagen også en DBMemo. Ved hjælp af ADOTable. Det er godt at Jens B "Borrisholt" kunne klare en spøg.. : ) VH Koden12
Tak og ja.Men .. det program jeg har downloadet: indeholder 3 listboxe.Iførste listbox vises navnene på tabellerne i databasen.I listbox nr. 2 vises feltnavnene - i første omgang på den øverste og hvis man klikker på nummer to eller tre kommer feltnavnene fra disse tabeller frem i listbox nr 2.I sidste kolonne (listbox nr 3) vises hvilke felttyper det drejer sig om.Her kan man blandt andet se at varenummer i den midterste tabel er en memo.Men hvis man klikker i listbox nr to eller tre sker der altså ingenting i mit program.Hvad sker der i jeres ?.
function EnumToString(const TypeInfo: pTypeInfo; Ix: Integer): string; begin Result := GetEnumName(TypeInfo, ix); end;
procedure TForm1.ListBox1Click(Sender: TObject); var i: Integer; aField: TField; begin with ADOTable1 do begin Close; TableName := ListBox1.Items[ListBox1.ItemIndex]; Open; end;
ListBox2.Clear; ListBox3.Clear;
for i := 0 to ADOTable1.FieldCount - 1 do begin aField := ADOTable1.Fields[i]; ListBox2.Items.Add(aField.DisplayName); ListBox3.Items.Add(EnumToString(TypeInfo(TFieldType), Integer(aField.DataType))); (* Hvis denne løsning med, EnumToString, er for lang håret til en "hobby programmør" kan jeg også en anden :-) *) end;
(* Hvis du ikke vil have filed type med er denne linje nok til hele proceduren !!! Ofg Listbox3 er ikke nødvendig Database.GetFieldNames(ListBox1.Items[ListBox1.ItemIndex], ListBox2.Items); *) end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(Database); end;
end.
Idet: (laver lige en ny kommentar for at kunne kopiere)
Vores 'dataset'-kode fra 'søg i memo'-spm.et ListBox1.Items.Add(adodataset1.FieldByName('name').AsString); kan jeg ikke se hvordan vi kan få omformet til at passe til borrisholts kode ?. og så hænge sammen med list boxen ? Jeg troede det var det du stræbte hen imod koden12 ?.
For det er vel ikke så banalt at det hænger sammen med at db.en er tom ? Nej nu er jeg nok for dum.
I ADOTEST.EXE i demoerne er noget der i høj grad ligner borrisholts kode kædet sammen med en BDGRID og en dbmemo, der åbner når databasen indeholder en memo og iøvrigt har 'de' plantet en navigatorpanel - og det er så koblet sammen på en eller anden snedig måde. Det jeg troede koden12 du ville var at udnytte at dbmemoer faktisk kan vises i en listbox - til at åbne dbmemofeltet uden en grid og en navigator. Men jeg kan jo have taget fejl.Personligt ville jeg synes det var lidt 'sexet'.
HURRA nu er det endelig lykkedes at få memoerne frem i listbox3. for i := 0 to ADOTable1.FieldCount - 1 do begin aField := ADOTable1.Fields[i]; ListBox2.Items.Add(aField.DisplayName); ListBox3.Items.Add(aField.Displaytext);
Men I kan jo heller ikke vide hvor uvidende jeg er udi listboxe.
Takker for Jeres tålmodihed og ber om lidt overbærenhed.
Tillykke Janbb. Du har rigtig arbejdet med sagen. Nej jeg sagde ikke at jeg ville undgå? Grid og Navigator. Desværre er det ikke så godt som det kunne være opdagede jeg i går . Hvis man skifter mellem de forskellige bokse list1 list2 osv fejler den på et tidspunkt. Men det kan være der er noget jeg har overset. VH Koden12 Men virker gør det.
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.