Toon posts:

[delphi] het vullen van een DBLookupComboBox

Pagina: 1
Acties:
  • 146 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik probeer een functie te maken voor het vullen van een DBLookupCombobox.
Het volgende heb ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure vulControl(obj : TObject; qryobj : TQuery; qry : string; lijst : string; sleutel : string; sleutelwaarde : string);
//vult een control met waarden uit de database
var q : TStringlist;
begin
  if obj is TDBLookupCombobox then
    begin
      q := TStringlist.Create;
      q.Add(qry);
      try
        queryExec(qryobj,q,false);
        with (obj as TDBLookupCombobox) do
          begin
            ListSource := qryobj.DataSource;
            ListField  := lijst;
            keyfield   := sleutel;
            KeyValue   := sleutelwaarde;
          end;
      finally
        q.Free;
      end;
    end; //if
end;


queryExec(qryobj,q,false) is een eigen procedure die een query opent. qryobj is een TQuery, q is een stringlist en 'false' houdt in dat het een 'open' moet zijn (true zou een 'ExecSQL' zijn)

Alleen het werkt niet... ik hou gewoon een inactive control als ik de procedure aanroep, waar gaat het mis? Er worden geen errors gegenereerd.


edit:
ik gaf toch aan wat er mis gaat? De control wordt niet active. Terwijl normaal een control active wordt zodra je er een query aanhangt. Volgens mij is er gewoon iets mis in de opbouw van mijn procedure. En ja de procedure wordt aangeroepen en ja de query heeft een resultaat. (van 4 records in dit geval)

[ Voor 12% gewijzigd door Verwijderd op 18-09-2006 10:46 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat gaat er mis? Wat werkt dan niet? Of moeten we dat maar raden?
Verder: heb je al gedebugged? Er doorheen gestapt stapje voor stapje? Gekeken of de query wel resultaten oplevert? Wordt vulControl uberhaupt aangeroepen?

Hier kunnen we weinig mee als je niet meer informatie post, en we zijn er niet om je code voor je te debuggen. Dat zijn zaken die je toch écht zelf zult moeten doen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 13-02 12:38
Is je query nog wel open als je queryExec hebt uitgevoerd? Post ook even die procedure ajb.

En niet te vergeten, is je doel dataobject ook toegewezen en geopend?

[ Voor 51% gewijzigd door Pino op 18-09-2006 11:09 ]

"If you don't know where you are going, any road will take you there"


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 13-02 09:40

Tomatoman

Fulltime prutser

Je kunt eenvoudig achterhalen wat er precies gebeurt door te debuggen. Debuggen kan je leren waar de combo box actief of juist inactief wordt. Dat kun je bijvoorbeeld uitvinden door een breakpoint te zetten op regel 5 (if obj...). Je definieert ook een watch (View - Debug Windows - Watches) voor de volgende property: TDBLookupComboBox(obj).Active. Als je programma stopt bij het breakpoint, stap je met Trace Into (F7) regel voor regel door je code. Je ziet dan vanzelf wel een keer aan de watch dat de waarde van TDBLookupComboBox(obj).Active verandert, waarmee je de coderegel die dat doet te pakken hebt.

In jouw geval zul je waarschijnlijk 1 van de volgende problemen ontdekken:
• regel 5: obj is geen TDBLookupComboBox
• regel 10: er zit een bug in queryExec
• regel 17: je hebt vergeten Active := True toe te voegen

Als je niet begrijpt hoe debuggen werkt kun je beter daar eenmalig een uurtje lees- en probeerwerk in steken. Het zal een van de meest productieve uurtjes ooit blijken voor iedere programmeur. :)

Een goede grap mag vrienden kosten.