memult
Написал универсальную процедуру, для поиска по любому количеству кобобоксов
procedure SearchByComboBoxes (ComboBoxes: Array of TdbComboBox; Grid: TdbStringGridEx);
var
Results: TDataSet;
sSQL: string;
sWhere: string;
s: string;
i,c: integer;
ComboBox: TdbComboBox;
begin
sSQL := 'SELECT id, lastname FROM employees';
sWhere := '';
c := Length(ComboBoxes)-1;
for i := 0 to c do
begin
ComboBox := ComboBoxes[i];
s := '';
for i := 0 to ComboBox.Items.Count-1 do
begin
if ComboBox.ItemsChecked[i] then
s := s + ' '+ComboBox.dbForeignKeyShort+'='+IntToStr(ComboBox.dbIndexToID(i))+' OR';
end;
if s<>'' then
begin
SetLength(s, Length(s)-3);
s := '(' + s + ')';
if sWhere<>'' then sWhere := sWhere + ' AND ';
sWhere := sWhere + s;
end;
end;
if sWhere<>'' then sSQL := sSQL + ' WHERE ' + sWhere;
Grid.dbSQL:=sSQL; // the id field, want to be able to edit or delete the entry from the table component
Grid.dbGeneralTable := 'employees'; // Optional (in the case of complex SQL queries with sub queries, you need to choose the main table of the database, also it need to be able to edit or delete the entry from the table component)
Grid.dbListFieldsNames :='delete_col,Lastname'; // If you do not want to see the value of the id in the component table, enter a name for the column delete_col
Grid.dbSQLExecute;
end;
Для использования данной процедуры, необходимо передать ей массив ComboBox-ов и компонент грида, куда необходимо вывести результат, пример использования:
procedure Form1_Button8_OnClick (Sender: string; var Cancel: boolean);
begin
SearchByComboBoxes( [Form1.cbGroups, Form1.cbSex, Form1.ComboBox1] , Form1.TableGrid1)
end;
Dmitry.