Results 1 to 11 of 11

Thread: DBLookUpComboBox als input voor Filter

  1. #1

    Post DBLookUpComboBox als input voor Filter

    Hallo allemaal,

    Ik wil een geselecteerde item uit een lijst van een DBLookupComboBox gebruiken als waarde voor het zetten van een filter voor een Table. In de Object Inspector voor een Table heb je de mogelijkheid om een filter te zetten door de veldnaam uit de Table op te geven en daar een waarde aan toe te kennen. Die waarde wil ik dus halen door een waarde te selecteren uit de lijst van een DBLookupComboBox.
    Kan iemand mij aangeven hoe ik dat het beste kan doen.

  2. #2
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Je hoeft niet echt een filter gebruiken. Je kunt ook de DataSource van DBLookupComboBox gebruiken als MasterSource voor de Table. Dit werkt over het algemeen wat sneller dan in zelfgeschreven code het filter van de Table wijzigen.

    Wil je het echter met een filter doen, gebruik dan het OnDataChange-event van de DataSource van de DBLookupComboBox om het filter te wijzigen.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  3. #3
    Ik heb het even geprobeerd, maar bij een master/detail loopt de detail ook al mee als de combo open staat en ik in de items aan het bladeren ben. Dan kan de bedoeling zijn, maar misschien ook juist niet. Ik heb dus ook een voorbeeldje op de ander manier gemaakt. De routine DoFilter doet het eigenlijke werk:
    Code:
    procedure TMainForm.DoFilter;
    begin
    
      if (Selected.Text <> '') then
      begin
        OrderTable.Filter := 'Custno=' + string(Selected.KeyValue);
        OrderTable.Filtered := True;
      end
      else
        OrderTable.Filtered := False;
    end;
    Deze routine wordt dan op twee plaatsen aageroepen: inderdaad de OnDataChange, maar ook de CloseUp van de combo zodat bij het sluiten van de selectielijst alles weer juist wordt ingesteld.
    Attached Files Attached Files
    Marcel

  4. #4
    Marcel en Matthijs bedankt voor jullie reactie.
    Marcel, ik heb de door jouw voorgestelde code gebruikt voor twee DBLookUpComboBoxen. De ene ComboBox gebruikt is voor de selectie van een datum en de andere voor de sellectie van een naam. De lijst voor beide ComboBoxen haal ik resp. uit een database voor de datum en de andere uit een database voor de naam. De KeyValue van beide ComboBoxen gebruik ik als setting van het Filter voor de Hoofd Database. Het Datum veld in zowel de HoofdDatabase alsmede de DatumDatabase is van het Type D. Het Naam veld van zowel de HoofdDatabase alsmede de NaamDatabase is van het type A. Alle databases zijn Paradox databases. De selectie van de datum en het setten van het filter voor de
    HoofdDatabase gaat perfect. Echter in de DBLookupComboBox voor de naam kan
    ik wel een naam selecteren uit de lijst maar daarna krijg ik in runtime de
    volgende foutmelding:
    "Project TCDCertificate.exe raised exception class EDatabaseError with
    message 'MainTable: Field 'naam' not found' Proces stopped Use step or Run
    to continue."
    Ik heb heel mijn programma meerdere malen doorgelopen maar ik kan nergens
    de fout vinden. Kan ik in de velden van het A type een spatie gebruiken in
    een naam? Hebben jullie een idee waar ik de fout zou kunnen zoeken?
    Onderstaand het stukje programma code voor het zetten van het filter voor
    de HoofdDatabase.

    procedure Tview.DoFilterInstaller;
    begin
    if (Selected_Installer.Text <> ' ') then
    begin
    DataModule1.MainTable.Active := True;
    DataModule1.MainTable.Filter := 'Installer=' + string(Selected_Installer.KeyValue);
    DataModule1.MainTable.Filtered := True;
    end
    else
    DataModule1.MainTable.Filtered := False;
    end;

  5. #5
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Het lijkt erop of je gebruik maakt van persistent fields. Dit betekent dat je via de FieldEditor van je TTable aangegeven hebt welke velden je wilt zien en in dit rijtje staat het veld "naam" dan dus niet en wordt het niet gevonden.
    Of het veld "naam" bestaat inderdaad gewoon niet!
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  6. #6
    Matthijs,

    Ik heb ontdekt dat de velden op mijn formulier (die gekoppeld staan aan de HoofdDatabase) wel naar het juiste record in mijn database springen zodra ik een naam uit de lijst van de listbox van de DBLookupComboBox selecteerd maar het filter niet gezet wordt en dan ook de eerder genoemde foutmelding krijg.
    Tevens heb ik ontdekt dat als de geselecteerde naam bv "Pietje Puk" is in de foutmelding alleen 'Pietje' is te zien De foutmelding luidt dan dus:
    Project TCD Certificate.exe raised exception class EDatabaseError with message 'MainTable: Field 'Pietje' not found' process stopped Use step or Run to continue.
    Als ik mijn databases open in Database Desktop dan staan deze niet in Persistent Field View

  7. #7

    Angry

    Delphi is over het algemeen een gebruikersvriendelijk ontwikkeltool maar soms kan het tot bijna tot wanhoop leiden.
    Vandaag voor het grootste gedeelte bezig geweest om de fout met het setten van een filter te ontdekken maar het heeft tot geen oplossing geleid.
    Ter extra informatie heb ik hier nog even het stukje programma code voor het zetten van het filter:
    procedure Tview.DoFilterPerson;
    begin
    if (Selected_Person.Text <> '') then
    begin
    DataModule1.MainTable.Filter :='';
    DataModule1.MainTable.Filter := 'person=' + String(Selected_Person.KeyValue);
    DataModule1.MainTable.Filtered := True;
    end
    else
    DataModule1.MainTable.Filtered := False;
    end;

  8. #8

    Angry

    Delphi is over het algemeen een gebruikersvriendelijk ontwikkeltool maar soms kan het tot bijna tot wanhoop leiden.
    Vandaag voor het grootste gedeelte bezig geweest om de fout met het setten van een filter te ontdekken maar het heeft tot geen oplossing geleid.
    Ter extra informatie heb ik hier nog even het stukje programma code voor het zetten van het filter:
    procedure Tview.DoFilterPerson;
    begin
    if (Selected_Person.Text <> '') then
    begin
    DataModule1.MainTable.Filter :='';
    DataModule1.MainTable.Filter := 'person=' + String(Selected_Person.KeyValue);
    DataModule1.MainTable.Filtered := True;
    end
    else
    DataModule1.MainTable.Filtered := False;
    end;
    Indien ik echter direct een waarde invul voor het filter van MainTable in de object inspector (b.v. person= 'kranendonk') dan werkt het programma perfect.
    Wie kan mij helpen????

  9. #9
    De fout zit in dit stukje:
    Code:
    DataModule1.MainTable.Filter := 'person=' + String(Selected_Person.KeyValue);
    Omdat je op een string filtert moet je er quotes omheen zetten. Dat wordt dus (even uit m'n hoofd)
    Code:
    DataModule1.MainTable.Filter := 'person=' + QuotedStr(Selected_Person.KeyValue);
    Marcel

  10. #10
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Inderdaad! Zie het antwoord van Marcel hierboven! Wat er gebeurt is dat je als filter meegeeft: Person = Pietje terwijl je bedoelt Person = 'Pietje'.
    In het eerste geval wordt gekeken of de waarde in het veld Person gelijk is aan de waarde van het veld Pietje en het veld Pietje kent ie dus niet.
    In het tweede geval wordt inderdaad gekeken of het veld Person de waarde Pietje heeft.

    Wat ik zelf meestal doe is :
    Code:
    Filter := 'Person = ''' + FieldByName('SelectedPerson').AsString + '''';
    Let op de drie quotes en vier quotes!
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  11. #11
    Marcel en Matthijs,

    Bedankt voor jullie responce. Dit is wat ik zocht.

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. HTML component met strings als input?
    By Javabean in forum Algemeen
    Replies: 18
    Last Post: 08-May-02, 23:11

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
  •