Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 1
Регистрация: 22.05.2015
Сообщений: 69
1

DBGrid значения true-false

02.02.2017, 14:12. Показов 3639. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, помогите пожалуйста с такой проблемой.
На форме имеется DBGrid, ADOQuery, DataSource. БД Access имеет поле "рус" типа Boolean.
При выводе значений в DBGrid отображается true-false.

Знаю что в интернете эта тема уже обсуждалась и не раз (в частности и на этом форуме), но там все советы либо относятся к Delphi 7 (у меня RAD Studio 10 Seatle и у поля нет свойства DisplayText), либо советуют DBGRidEh (нет возможности ставить доп библиотеки).

Нашел вот такой код, который по задумке должен выводить checkbox'ы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.DrawGridCheckBox(Canvas: TCanvas; Rect: TRect; Checked: boolean);
var
  DrawFlags: Integer;
begin
  Canvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, ' ');
  DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_ADJUSTRECT);
  DrawFlags := DFCS_BUTTONCHECK or DFCS_ADJUSTRECT;// DFCS_BUTTONCHECK
  if Checked then
    DrawFlags := DrawFlags or DFCS_CHECKED;
  DrawFrameControl(Canvas.Handle, Rect, DFC_BUTTON, DrawFlags);
end;
В DBGridDrowColumnCell:
Delphi
1
2
3
4
5
if Column.FieldName = 'рус' then   // рус - поле в DBGrid
   if Column.Field.AsInteger > 10 then                       // вот тут сравнивается значение Integer, хотя поле если я правильно понимаю типа Boolean 
     DrawGridCheckBox(DBGrid1.Canvas, Rect, true)
   else
     DrawGridCheckBox(DBGrid1.Canvas, Rect, false)
В DBGridColEnter:
Delphi
1
2
3
4
5
6
7
begin
    with TDBGrid(Sender) do
      if SelectedField.FieldName = 'рус' then   // рус - поле в DBGrid
        Options := Options - [dgEditing]
      else
        Options := Options + [dgEditing]
  end;
При компиляции ошибки нет, а при выполнении программы вылетает:
Cannot access field 'рус' as type Integer. (Не может открыть 'рус' как тип integer.)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2017, 14:12
Ответы с готовыми решениями:

на кнопку кликаешь, Image1.Visible:=False; Image2.Visible:=True; Eще раз ликаешь, Image1.Visible:=True; Image2.Visible:=False.
на кнопку кликаешь, Image1.Visible:=False; Image2.Visible:=True; Eще раз ликаешь,...

True или False
Доброго дня программистам! Ребят подскажите - есть "панель", есть "CheckBox" и есть кнопка...

goRowSelect True/False
Люди... Прошу помощи... Я Решил не мудрить и сделать проще... Есть опция в StringGrid'e -...

Не работает Enabled:=false;true [Delphi 7]
Товарищи, возникла проблемка, дано: У нас есть MainMenu1 на нём есть вкладка поиск. У нас есть на...

11
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
02.02.2017, 14:56 2
не то)
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.02.2017, 15:00 3
Цитата Сообщение от badkass Посмотреть сообщение
if Column.Field.AsInteger > 10 then
ну так поставь там точку останова и посмотри Column.Field.Value и varType(Column.Field.Value)
0
0 / 0 / 1
Регистрация: 22.05.2015
Сообщений: 69
02.02.2017, 15:00  [ТС] 4
Цитата Сообщение от rusqwe Посмотреть сообщение
http://www.delphiplus.org/articles/c...rid/index.html
3. CheckBox в поле DBGrid
Если поле DataSet’а имеет тип Boolean, то никаких дополнительных усилий делать не придется, грид сам будем отображать checkbox. Для полей других типов нужно настроить свойства столбца DBGridEh следующим образом:
DelphiВыделить код
1
2
3
4
*//1.сделаем поле Code - полем с CheckBox
*EhGrid.Columns[3].KeyList.Add('8;9;7;6;5;4;3;2;1'); //TRUE
*EhGrid.Columns[3].KeyList.Add('0'); //FALSE
*EhGrid.Columns[3].Checkboxes := TRUE;
Там речь идет о DBGridEh, а у меня нет возможности ставить доп библиотеки (EhLib).
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.02.2017, 15:13 5
Лучший ответ Сообщение было отмечено badkass как решение

Решение

проверил сам, Column.Field.value это boolean
поэтому просто
Delphi
1
if Column.Field.Value then
1
0 / 0 / 1
Регистрация: 22.05.2015
Сообщений: 69
02.02.2017, 15:22  [ТС] 6
Цитата Сообщение от YuryK Посмотреть сообщение
проверил сам, Column.Field.value это boolean
поэтому просто
Delphi Выделить код
if Column.Field.Value then
Скомпилировал без ошибок, но в DBGrid отображается так же True-False
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.02.2017, 15:26 7
badkass, у меня твой код рисует так:
Миниатюры
DBGrid значения true-false  
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.02.2017, 15:31 8
при выполнении, конечно. В дизайне, естественно, отображается по старому
0
0 / 0 / 1
Регистрация: 22.05.2015
Сообщений: 69
02.02.2017, 15:36  [ТС] 9
Цитата Сообщение от YuryK Посмотреть сообщение
при выполнении, конечно. В дизайне, естественно, отображается по старому
вот блин, а у меня при выполнении хоть убей true-false.... ладно, спасибо, буду копаться дальше
0
60 / 60 / 26
Регистрация: 30.05.2016
Сообщений: 293
02.02.2017, 15:40 10
попробуй так
if Column.Field.FieldName='рус' then
хотя это тоже самое...

Добавлено через 1 минуту
так же можно обратиться к полю по индексу
Delphi
1
2
 if Column.Field.Index='номер поля от 0'  then  
 if SelectedField.Index = 'номер поля от 0' then
1
0 / 0 / 1
Регистрация: 22.05.2015
Сообщений: 69
02.02.2017, 15:42  [ТС] 11
всем спасибо, разобрался, причина была в том, что я сначала на
Цитата Сообщение от badkass Посмотреть сообщение
В DBGridDrowColumnCell:
DelphiВыделить код

if Column.FieldName = 'рус' then * // рус - поле в DBGrid
* *if Column.Field.AsInteger > 10 then * * * * * * * * * * * // вот тут сравнивается значение Integer, хотя поле если я правильно понимаю типа Boolean
* * *DrawGridCheckBox(DBGrid1.Canvas, Rect, true)
* *else
* * *DrawGridCheckBox(DBGrid1.Canvas, Rect, false)
В DBGridColEnter:
а потом разукрашивал строки, поставил код в конец процедуры и все ок.
0
1040 / 856 / 335
Регистрация: 08.12.2016
Сообщений: 3,283
02.02.2017, 15:44 12
замени проверку на имя поля проверкой на тип: и универсальней и избежишь ошибок при неверном написании имени поля

Delphi
1
if Column.Field.DataType = ftBoolean then
1
02.02.2017, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2017, 15:44
Помогаю со студенческими работами здесь

Если число является степенью числа 3, то вывести true, иначе false
У меня есть код паскаля uses crt; var n,k:integer; begin clrscr; repeat write('Введите...

Написать программу, которая печатает true или false в зависимости от условий уравнения
Здравствуйте, требуется помощь в реализации простой (для Вас, знатоки) студенческой задачи....

Как программно свойство checked у checkbox выставить в false или true (т.е. галочку убрать)
Как программно свойство checked у checkbox выставить в false или true (т.е. галочку убрать)

Вывести рандомно число в двоичной системе, пользователь должен дать ответ, а пк его сравнить и выдать True or False
Доброе время суток. Есть определённая задача программы, надо вывести рандомно число в двоичной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru