Столбцы в Dbgrid

  • Автор темы aravall
  • Дата начала
A

aravall

Здравствуйте, одним словом у меня такая проблема, есть база в Access подключена через АДО и АДОквери, так как в одной из таблиц очень много столбцов появилась нужда в их отключении включении... создал кнопку ФИЛЬТР СТОЛБЦОВ, новую форму с TCheckBox-ами каждый из которых соответствует столбцу, и тут настал творческий и умственный кризис, даже представить не могу как решить проблему с реализацией, чтобы в SQL запросе оставил те столбцы которые включены и убрал те, которые отключены, есть идея проверка каждого, но это многостраничный код, я думаю есть выходы попроще, если кто то знает или имеет уже готовый или полезные ссылки, будьте добры поделитесь буду премного благодарен.
 
E

etc

Можно запрос генерить руками можно и просто указывать отображать/или нет
 
A

AndreyS

Можно загрузить всю талблице с екселя на форму (DBGrid) и выводить (в другую таблицу) те колонки которые отмечены TCheckBox-ами .

или

select col1, col2,... ,colN from TABLE
 
A

aravall

я сейчас на работе не дома, исходники там, но если обьяснять простым языком, я хочу сделать через запрос
adoquery1.text:= (здесь запрос) - вот в нем вся загвоздка, так как я не знаю какое количество столбцов выберет пользователь для отображения

AndreyS, select col1, col2,... ,colN from TABLE, вот типа того точно, просто у меня были проблемы с запятыми, потому что если не выберешь все столбцы, то запятые останутся и в запросе ошибка, я просто кину их в переменные вместе с названиями столбцов стринг, их будет столько же сколько столбцов и через условие присваивать им значение, если выбран чекед, то присваивать переменной 'col,' а если нет то пустое значение '' и получится что то типа
'select'+'col1, '+'col2, '+'col3 '+'from table ' но тогда нужно вычислить последний выбранный чекед и присвоить ему значение без запятой иначе опять ошибка синтаксиса будет. это уже попроще...вычислить последний выделенный проще чем все проверять на условие. спасибо всем, я стал немножко умнее в запросах и условиях!
 
O

oleksandr

:rolleyes:
поставь запятую впереди колонки типа ', col2' , тогда всё будет просто:
Пишешь код:
var s: String;
if CheckBox1.Checked then s:=s+', col2';
if CheckBox2.Checked ...
... ADOQuery1.SQL.Add('SELECT col1'+s+' FROM Table1');
если не хочешь чтобы первое поле было видно пишешь:
DBGrid1.Columns[0].Visible:=false; Но если ты хочешь чтобы первое поле выбирал пользователь
тогда: if CheckBox1.Checked then s:=s+', col1';
а перед ADOQuery1.SQL.Add(... пишешь delete(s,1,1);
не такой уж громоздкий код получается.
 
A

aravall

все гениальное просто...) не думал что сократить код можно еще, но этот способ сокращает его почти в 2 раза, спасибо вам за помощь вы мне очень помогли в решении моей проблемы!
 
M

MusicMan

Помогите с вопросом.

Есть у меня dbgrid. В нем есть столбец, значения которого берутся из picklist'а. В ходе программы сделал формочку для добавления значений picklist'а. Тут всё четко.
Но. Как запустить проверку при добавлении очередной строчки на предмет того, есть ли такая уже или нет? Чтобы небыло возможности добавить уже существующую строчку...
Т.е. примерно что-то такое:

if proizv.Text = reg_tovar.DBGrid1.Columns[6].PickList.text then showmessage('Есть такая страна');

screen_zadacha_1.jpg
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!