[SOLVED] Can't get selection good lazarus / 16-Databases ---------------------------------------------------------------------- madref · 2015-08-12 07:15 I have on a form 3 selection criteria and they are all comboboxes. I use the following code to fill them Code: [Select] //-------------------------------------------------------------------- ---------- // Als het formulier wordt geopend alles goed zetten. //-------------------------------------------------------------------- ---------- procedure TForm_Wedstrijden.FormShow(Sender: TObject); var   cSQL: string; begin   // Combobox Seizoen vullen   cSQL :=     'SELECT SEI_ID, SEI_Periode, SEI_Letter ' +     'FROM tbl_Seizoenen ' +     'WHERE SEI_Tot <=  StrFTime ("%Y",' + SingleQuotedStr('Now') + ')+1 ' +     'UNION SELECT 0, "(All)", "Z" ' +     'ORDER BY SEI_Letter DESC;';   TQ_Seizoen.Active := False;   TQ_Seizoen.DataBase := Form_Information.connRefereeDB;   TQ_Seizoen.SQL.Text := cSQL;   TQ_Seizoen.Active := True;   // setup TDBLookupCombobox   CB_Seizoen.ScrollListDataset := True; // BELANGRIJK   CB_Seizoen.ListSource := DS_Seizoen;   CB_Seizoen.ListField := 'SEI_Periode';   CB_Seizoen.KeyField := 'SEI_ID';   // CB_Seizoen.OnChange := nil; // DIT MOET DUS WEL !!   CB_Seizoen.KeyValue := Form_Information.BepaalHuidigSeizoen; // Spring naar de actieve seizoen   // Combobox Divisie vullen   cSQL :=     'SELECT Divisie_ID, Divisie_Tekst, Divisie_Volgorde, Divisie_Gebruiken ' +     'FROM tbl_Divisie ' +     'WHERE (ABS(Divisie_Gebruiken = 1)) ' +     'ORDER BY Divisie_Volgorde;';   TQ_Divisie.Active := False;   TQ_Divisie.DataBase := Form_Information.connRefereeDB;   TQ_Divisie.SQL.Text := cSQL;   TQ_Divisie.Active := True;   // setup TDBLookupCombobox   CB_Divisie.ScrollListDataset := True; // BELANGRIJK   CB_Divisie.ListSource := DS_Divisie;   CB_Divisie.ListField := 'Divisie_Tekst';   CB_Divisie.KeyField := 'Divisie_ID';   CB_Divisie.KeyValue := 22; // Spring naar alle divisies   // setup TDBLookupCombobox   CB_Scheidsrechters.ScrollListDataset := True; // BELANGRIJK   CB_Scheidsrechters.ListSource := DS_Scheidsrechters;   CB_Scheidsrechters.ListField := 'Scheidsrechter';   CB_Scheidsrechters.KeyField := 'Scheids_ID'; //  CB_Scheidsrechters.KeyValue := 0;   // = qry_Overzicht_Wedstrijden   cSQL := 'SELECT ' + 'tbl_Wedstrijden.Wed_ID, tbl_Seizoenen.SEI_ID AS Seizoen, ' +     'StrFTime("%d-%m-%Y",Wed_Datum) AS Date, ' + 'StrFTime("%H:%M",Wed_Tijd) AS Time, ' +     'tbl_Divisie.Divisie_Tekst AS Division, ' +     'qry_Team_A.Team AS [Team A], qry_Team_B.Team AS [Team B], ' +     'qry_Scheidsrechters_1.Scheidsrechter AS [Referee 1], ' +     'qry_Scheidsrechters_2.Scheidsrechter AS [Referee 2], ' +     'qry_Scheidsrechters_3.Scheidsrechter AS [Referee 3], ' +     'qry_Scheidsrechters_4.Scheidsrechter AS [Referee 4], ' +     'CASE WHEN Wed_Begeleiding THEN "x" ELSE NULL END AS S, ' +     'CASE WHEN Wed_Meetellen THEN "x" ELSE NULL END AS C, ' +     'CASE WHEN Wed_Outlook THEN "x" ELSE NULL END AS A, ' +     'tbl_Wedstrijden.Wed_Scheids_1, tbl_Wedstrijden.Wed_Scheids_2, ' +     'tbl_Wedstrijden.Wed_Scheids_3, tbl_Wedstrijden.Wed_Scheids_4, ' +     'tbl_Wedstrijden.Wed_Divisie AS Div, tbl_Wedstrijden.Wed_Meetellen, ' +     'tbl_Wedstrijden.Wed_TeamA, tbl_Wedstrijden.Wed_TeamB, ' +     'tbl_Wedstrijden.Wed_Show, qry_Team_A.Team_Plaats AS Speelplaats, ' +     'tbl_Wedstrijden.Wed_Plaats, tbl_IJsbanen.IJS_Plaats, ' +     'tbl_Wedstrijden.Wed_Datum, tbl_Wedstrijden.Wed_Tijd, ' +     'tbl_IJsbanen.IJS_Kilometers, tbl_Wedstrijden.Wed_Opmerkingen, ' +     '2*[IJS_Kilometers]*0.29 AS Euro, ' +     'tbl_Divisie.Divisie_Vergoeding, tbl_IJsbanen.IJS_Parkeren, ' +     'StrFTime("%Y-%m-%d",Wed_Datum) AS MyDate, ' +     'StrFTime("%H:%M",Wed_Tijd) AS MyTime ' +     'FROM tbl_Wedstrijden ' +     'INNER JOIN tbl_Divisie ON tbl_Divisie.Divisie_ID = tbl_Wedstrijden.Wed_Divisie ' +     'INNER JOIN tbl_Seizoenen ON tbl_Seizoenen.SEI_ID = tbl_Wedstrijden.Wed_Seizoen_ID '+     'INNER JOIN tbl_IJsbanen ON tbl_IJsbanen.IJS_ID = tbl_Wedstrijden.Wed_Plaats ' +     'INNER JOIN qry_Teams AS qry_Team_A ON qry_Team_A.Team_ID = tbl_Wedstrijden.Wed_TeamA '+     'INNER JOIN qry_Teams AS qry_Team_B ON qry_Team_B.Team_ID = tbl_Wedstrijden.Wed_TeamB ' +     'LEFT JOIN qry_Scheidsrechters AS qry_Scheidsrechters_1 ON tbl_Wedstrijden.Wed_Scheids_1 = qry_Scheidsrechters_1.Scheids_ID ' +     'LEFT JOIN qry_Scheidsrechters AS qry_Scheidsrechters_2 ON tbl_Wedstrijden.Wed_Scheids_2 = qry_Scheidsrechters_2.Scheids_ID ' +     'LEFT JOIN qry_Scheidsrechters AS qry_Scheidsrechters_3 ON tbl_Wedstrijden.Wed_Scheids_3 = qry_Scheidsrechters_3.Scheids_ID ' +     'LEFT JOIN qry_Scheidsrechters AS qry_Scheidsrechters_4 ON tbl_Wedstrijden.Wed_Scheids_4 = qry_Scheidsrechters_4.Scheids_ID ' +     'WHERE ' +     '((Sei_ID=:Sei_ID) or :Sei_ID=0) ' +     'AND ' +     '((Div=:Divisie_ID) or :Divisie_ID=0) ' +     'AND (' +     '(Wed_Scheids_1=:Scheids_ID) OR (Wed_Scheids_2=:Scheids_ID) OR ' +     '(Wed_Scheids_3=:Scheids_ID) OR (Wed_Scheids_4=:Scheids_ID) OR :Scheids_ID=0) ' +     {     '((Wed_Scheids_1=:Scheids_ID) or :Scheids_ID=0) OR ' +     '((Wed_Scheids_2=:Scheids_ID) or :Scheids_ID=0) OR ' +     '((Wed_Scheids_3=:Scheids_ID) or :Scheids_ID=0) OR ' +     '((Wed_Scheids_4=:Scheids_ID) or :Scheids_ID=0)) ' + }     'ORDER BY ' +     'tbl_Seizoenen.SEI_ID DESC, MyDate DESC, ' +     'MyTime DESC ';   TQ_Wedstrijden.Active := False;   TQ_Wedstrijden.DataBase := Form_Information.connRefereeDB;   TQ_Wedstrijden.SQL.Text := cSQL;   // Dit zorgt voor dat :Sei_id uit season_selection komt   //  TQ_Wedstrijden.DataSource := DS_Seizoen;   // dit zorgt ervoor dat je .Delete kunt doen   TQ_Wedstrijden.DeleteSQL.Text :=     'DELETE FROM tbl_Wedstrijden WHERE Wed_ID=:OLD_Wed_ID';   DBGrid_Wedstrijden.OnCellClick := nil;   DBGrid_Wedstrijden.OnSelectEditor := nil;   // parameters alvast op 0 zetten.   TQ_Wedstrijden.Params.ParamByName('Sei_ID').AsInteger := Form_Information.BepaalHuidigSeizoen;   TQ_Wedstrijden.Params.ParamByName('Divisie_ID').AsInteger := 0;   TQ_Wedstrijden.Params.ParamByName('Scheids_ID').AsInteger := 0;   TQ_Wedstrijden.Active := True;   WedstrijdenSelectie; end;     // FormShow procedure TForm_Wedstrijden.WedstrijdenSelectie; begin   if not TQ_Wedstrijden.Active then exit;   TQ_Wedstrijden.Active := False;   TQ_Wedstrijden.ParamByName('Sei_ID').Value := CB_Seizoen.KeyValue;   BepaalScheidsrechters;   if CB_Divisie.KeyValue=22 then     TQ_Wedstrijden.ParamByName('Divisie_ID').Value := 0   else     TQ_Wedstrijden.ParamByName('Divisie_ID').Value := CB_Divisie.KeyValue;   TQ_Wedstrijden.ParamByName('Scheids_ID').Value := CB_Scheidsrechters.KeyValue;   TQ_Wedstrijden.Active := True;   Format_Grid_Wedstrijden;   TQ_Wedstrijden.Last;   TQ_Wedstrijden.First;   // DBGrid_Wedstrijden.SetFocus;        Zou ik niet doen !   GroupBox_Wedstrijden.Caption :=     Format('Games (%d)', [TQ_Wedstrijden.RecordCount]); end;     // ComboBoxWedstrijdenSelectie The queries work perfectly but i have to select a referee to get a result. How can i get all the games without selecting a referee? ---------------------------------------------------------------------- howardpc · 2015-08-12 08:35 Design a new query that assembles the data you require (ignoring referees altogether) independently of GUI combobox selection handlers. i. e. don't couple your GUI and data queries so tightly. Without knowing the structure and inter-relationships of your tables it is hard to be more specific. ---------------------------------------------------------------------- madref · 2015-08-12 09:11 If i leave out the referees it works good. But adding the referees gives the problem ---------------------------------------------------------------------- madref · 2015-08-16 18:28 The problem didn't lie within these queries but somewhere else. The problem was that I did make a new connection to my database which made the referee-selection NULL and then the query doesn't work.