Avatar billede janbb Juniormester
03. oktober 2003 - 16:48 Der 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.
Avatar billede janbb Juniormester
03. oktober 2003 - 16:52 #1
Jeg tror jo som angivet det er bedre med en Memo, men det må evt. 'svarere'
afgøre:
http://www.eksperten.dk/spm/408806
Avatar billede janbb Juniormester
04. oktober 2003 - 07:17 #2
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.
Avatar billede borrisholt Novice
04. oktober 2003 - 08:58 #3
Avatar billede koden12 Nybegynder
04. oktober 2003 - 11:00 #4
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
Avatar billede koden12 Nybegynder
04. oktober 2003 - 15:40 #5
Den virker !
VH
Koden12
Avatar billede janbb Juniormester
04. oktober 2003 - 17:00 #6
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.
Avatar billede borrisholt Novice
06. oktober 2003 - 08:13 #7
Enum !

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 :

Type
  TDag = (Mandag, Tirsdag .....)

Jeg vil ikke her lave en længer forklaring på hvordan de virker etc, blot henvise til pythia : http://www.pythia.dk/artikler/vis_artikel.php?id=26

Jens B
Avatar billede janbb Juniormester
06. oktober 2003 - 14:57 #8
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.
Avatar billede koden12 Nybegynder
06. oktober 2003 - 15:22 #9
Ja da den som "BorisMangePoint" har lavet kan ment lave det..
VH
Koden12
Avatar billede borrisholt Novice
06. oktober 2003 - 15:45 #10
koden12 >> De mange points er vist et udtryk for jeg har været herinde længe :-)

4 år eller sådan noget ligende ..

jens B
Avatar billede janbb Juniormester
06. oktober 2003 - 17:57 #11
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.
Avatar billede janbb Juniormester
06. oktober 2003 - 18:02 #12
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 ?.
Avatar billede koden12 Nybegynder
06. oktober 2003 - 18:42 #13
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
Avatar billede koden12 Nybegynder
06. oktober 2003 - 18:55 #14
Det er ellers en pæn hjemmeside du har ... er du Læge ??
VH
koden12
Avatar billede janbb Juniormester
07. oktober 2003 - 01:09 #15
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 ?.
Avatar billede janbb Juniormester
07. oktober 2003 - 01:31 #16
og det passer osse med 'koden' (min beskrivelse):
unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, ClassUnit;

type
  TForm1 = class(TForm)
    ADOTable1: TADOTable;
    ListBox1: TListBox;
    ListBox2: TListBox;
    ListBox3: TListBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormShow(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    Database: TADOConnection;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  TypInfo;

procedure TForm1.FormShow(Sender: TObject);
begin
  Database := TAccessConnection.Create(SELF);
  TAccessConnection(Database).FileName := 'TomDB.mdb';

  ADOTable1.Connection := Database;
  Database.GetTableNames(ListBox1.Items);
  ADOTable1.TableName := ListBox1.Items[0];
  ADOTable1.Active := True;
  ListBox1.ItemIndex := 0;
  ListBox1Click(nil);
end;

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)
Avatar billede janbb Juniormester
07. oktober 2003 - 01:33 #17
Database.GetFieldNames(ListBox1.Items[ListBox1.ItemIndex], ListBox2.Items);

fieldnames .. jo ikke er memodata og kommandoen getfielddata eller noget i den stil har jeg ikke kunnet finde.

(laver lige en ny kommentar for at kunne kopiere noget).
Avatar billede janbb Juniormester
07. oktober 2003 - 01:46 #18
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.
Avatar billede janbb Juniormester
07. oktober 2003 - 01:54 #19
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'.
Avatar billede janbb Juniormester
07. oktober 2003 - 04:37 #20
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.
Avatar billede koden12 Nybegynder
07. oktober 2003 - 11:20 #21
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.
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