Results 1 to 13 of 13

Thread: Listfield wodt niet gevonden, maar bestaat wel

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    Listfield wodt niet gevonden, maar bestaat wel

    Ik ben heel positief begonnen met Lazarus, maar krabbel een beetje terug.
    Wat is er aan de hand. Ik maak een programma, waarin ik al mijn boeken in kan zetten, de ik gelezen heb in de bibiliotheek. Daarvoor maak ik gebruik van een form, en twee datamodules. In de eerste datamodule staat de connectie (SQLite) naar de database. Ook staat haar de tabel, waar ik mee ga werken. In de tweede datamodule staan twee lookupbestanden. De connectie wordt uit de eerste datamodule gehaald. Compileren is geen probleem, maar het opstarten van de executable gaat niet zonder problemen. dit zorgt ervoor dat mijn Lookupcombos geconnecteerd worden:
    delphi Code:
    1. procedure TForm1.FormShow(Sender: TObject);
    2. begin
    3.   DsBoeken.DataSet := DM.Boeken;
    4.   DM.ZConnection1.Connect;
    5.   FDMLookup                := TDMLookup.create(Form1);
    6.   DBLCKTalen.ListSource    := FDMLookup.DsTalen;
    7.   DBLCKTalen.KeyField      := 'taalcode';
    8.   DBLCKTalen.ListField     := 'omschrijving';
    9.   FDMLookup.talen.active   := true;
    10.   DBLCKGengres.listSource  := FDMLookup.DsGengres;
    11.   DBLCKGengres.KeyField    := 'genrecode';
    12.   DBLCKGengres.ListField   := 'omschrijving';
    13.   FDMLookup.gengres.Active := true;
    14.   DM.Boeken.Active := true;
    15.   if DM.Boeken.EOF then DM.Boeken.Append;
    16. end;

    Toch resulteert dit in een foutmelding:
    talen : Field not found : "omschrijving".

    Press OK to ignore and risk data corruption.
    Press Cancel to kill the program.
    Ik weet niet waarom. Het veld omschrijving wordt niet gevonden, maar bestaat wel degelijk. Als ik de regels met DBLCKTalen als commentaarregel zet, komt de melding van DBLCKGengres.

    Ik doe het toch wel goed? Deze constructie gebruik ik ook in Delphi zonder problemen.

    Ik maak gebruik van Lazarus 0.9.3 met ZEOS 6.6.6
    Delphi is great. Lazarus is more powerfull

  2. #2
    Senior Member
    Join Date
    Aug 2003
    Location
    Vlaardingen
    Posts
    106
    Hallo John.

    Als je alle instellingen via de object inspector instelt, gaat het dan wel?

    Onderstaande code laat de tabellen in een database zien, misschien heb je er wat aan. Ik gebruik sqlite met lazarus.

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Sqlite3Dataset1.FileName:=OpenDialog1.FileName;
    Sqlite3Dataset1.SQL:=('select cast(tbl_name as varchar),cast(type as varchar) from sqlite_master where cast(type as varchar)=''table'';');
    Sqlite3Dataset1.ExecSQL;
    Sqlite3Dataset1.Active:=False;
    Sqlite3Dataset1.Active:=True;

    DBLookupListbox1.ListSource:=Datasource1;
    DBLookupListbox1.KeyField:='cast(tbl_name as varchar)';
    DBLookupListbox1.Listfield:='cast(tbl_name as varchar)';


    end;

    Groet,

    Sjoerd
    Last edited by ActiveS; 23-Feb-12 at 05:18.

  3. #3
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    833
    John, misschien domme opmerking (maar in mijn geval zijn zulke ideeën vaak de oplossing ): zijn je datasets in je lookup-datamodules active?
    Het lijkt er op dat hij wel de dataset kent, maar niet weet welke velden er zijn.
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  4. #4
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Sam, het gaat al fout op regel 8 in topic 1. Dat is het vreemde ervan. In delphi ken ik ook eerst toe en daarna de dataset op active gezet. Als je met de IDE werkt, vul je ook de properties in zonder dat de dataset actief is.
    Delphi is great. Lazarus is more powerfull

  5. #5
    Toch kan het best zijn dat de designtime code anders is dan de runtime code. Dus ik zou voor de zekerheid een kijken of het wel werkt als je de dataset eerst opent.
    Marcel

  6. #6
    Ik vraag me af waarom je dit @run wilt doen? Het is allemaal statisch dus waarom niet gewoon @design?

    Ik heb dit fenomeen ook weleens. Als ik @design het veld invul zegt Delphi dat het veld niet bestaat en na die foutmedling kan ik het wel gewoon invullen.
    @run heb je deze optie niet. Als het fout gaat is het afgelopen.

    Bovendien zie ik in een event een Append staan zonder een bijbehorende Post ...... dit is gewoon vragen om moeilijkheden.
    Tot slot: Een groot gedeelte van de code hoort helemaal niet in een FormShow maar in een FormCreate.
    Last edited by Henske; 23-Feb-12 at 09:36.
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Lazarus laat zich niet zo goed leiden als Delphi. Zo wordt niet altijd alle datamodules gevonden als deze openstaatn in de IDE.
    Ik zal eens de lookuptabellen in de main damodule zetten en als advies deze design koppelen. Kijken wat het resultaat wordt.
    Alleen heb ik Lazarus alleen staan op mijn privé pc, dus zal het even op zich moeten laten wachten.
    Delphi is great. Lazarus is more powerfull

  8. #8
    Als dat het probleem is, koppel dan alleen de sources @run en vul de rest @design in.
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  9. #9
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,085
    Kan het niet wezen dat je per ongeluk toch een klein typefoutje gemaakt heb?
    Dus 'Omschrijving' ipv 'omschrijving'
    Delphi/Windows trek zich er weinig van aan, maar onder Linux loopt de boel geheid vast.
    Ik weet niet in hoeverre Lazarus daar mee omgaat.

    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  10. #10
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Oke. In tegenstelling tot delphi moet de lookupdataset wel eerst actief zijn. Dan werkt het gewoon. Vreemd. KeyField en listField zijn gewoon strings.
    Delphi is great. Lazarus is more powerfull

  11. #11
    Ook al zijn het gewoon strings, dan kan er nog in de Setter van de property staan:

    pseudo Code:
    1. als runtime
    2.   als veldNietBestaat
    3.     GeefFout()
    Marcel

  12. #12
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Dat kan wel zo zijn, Marcel, maar Lazarus doet het toch anders dan Delphi.
    Wat ook kan zijn dat ik de velden nog niet had aangemaakt als persistent fields (juiste woord?) in de fieldlist van de IDE, waardoor Lazarus nog niet weet wat er te wachten staat.
    Delphi is great. Lazarus is more powerfull

  13. #13
    Dat Lazarus het anders doet dan Delphi heb je helemaal gelijk in. Ik denk ook niet dat dit soort dingen altijd 100% gelijk zullen zijn. Ten eerste omdat sommige dingen in de hoek "je moet het maar weten" zitten, ten tweede omdat ook Delphi blijft veranderen natuurlijk.

    Maar misschien zou je het al bug (missing feature) kunnen melden bij Lazarus? Ik weet niet hoe ze daarmee om gaan.
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •