Вопрос по CheckGroup

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Вопрос по CheckGroup

Сообщение 0beron » 22.03.2018 10:48:16

Здравствуйте все.
Имеется БД SqLite3, а на форме CheckGroup
В программе делаю запрос и пытаюсь поменять названия чеков,
доступность и состояние взяв значения из БД

...
sqlIO.First;
for i := 0 to 7 do begin
CheckGroup.Controls[i].Caption := FieldValues['Cap'];
CheckGroup.Controls[i].Enabled := FieldValues['Enb'];
// Не работает никоим образом!!!!!!!!!!!!!!!!!
CheckGroup.Checked[i] := FieldValues['Chk'];
sqlIO.Next;
end;

Caption и Enabled работают на ура, проблемма с Chacked
В БД в этом поле все значения true - в CheckGroup
через один, меняю на false - то же самое...
Что делаю не так?

Lazarus 1.8.2 Linux Rosa KDE
0beron
новенький
 
Сообщения: 13
Зарегистрирован: 18.08.2012 19:32:10

Re: Вопрос по CheckGroup

Сообщение wadman » 22.03.2018 15:33:30

0beron писал(а):CheckGroup.Checked[i] := FieldValues['Chk'];

Тут Controls[i] не нужен, как выше?
wadman
новенький
 
Сообщения: 89
Зарегистрирован: 18.10.2016 15:54:28

Re: Вопрос по CheckGroup

Сообщение pupsik » 22.03.2018 19:06:26

FieldValues['****']; а из какого датасета значения берём?
Т.е. не надо ли хотя бы
With sqlIO do .....
? Или вы его забыли показать в примере кода?

Плюс. А в литле уже true, false появились?
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).


Добавлено спустя 2 минуты 31 секунду:
т.е.
Код: Выделить всё
case FieldValues['Chk'] of
  0: CheckGroup.Checked[i]  := false;
  1: CheckGroup.Checked[i]  := true;
end;

or....
CheckGroup.Checked[i] := FieldValues['Chk'] = 1;

Вроде так.
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Вопрос по CheckGroup

Сообщение Снег Север » 22.03.2018 23:15:40

У меня на тестовом примере код наподобие CheckGroup.Checked[i] := FieldValues['Chk'] работает прекрасно, когда поле 'Chk' целого типа и принимает значения 0 или 1.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1050
Зарегистрирован: 27.11.2007 16:14:47

Re: Вопрос по CheckGroup

Сообщение 0beron » 22.03.2018 23:24:15

Снег Север писал(а):У меня на тестовом примере код наподобие CheckGroup.Checked[i] := FieldValues['Chk'] работает прекрасно, когда поле 'Chk' целого типа и принимает значения 0 или 1.

Я так и поступил - обошел проблемму. Смутило то что CheckGroup.Controls[i].Enabled := FieldValues['Enb']; нормально отрабатывает с Boolean
Всем спасибо тему можно закрывать.
0beron
новенький
 
Сообщения: 13
Зарегистрирован: 18.08.2012 19:32:10

Re: Вопрос по CheckGroup

Сообщение pupsik » 22.03.2018 23:45:00

Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.

п.с.
Я так и поступил - обошел проблемму.
А в чём проблема? В том что в литле используется эмуляция Boolean и это по ссылке написано?
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Вопрос по CheckGroup

Сообщение Снег Север » 23.03.2018 07:07:56

pupsik писал(а):Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.
Ну да, SqLite не знает boolean, просто есть разные варианты, встречал любителей вместо 0,1 использовать 0,-1 или вообще текстом T и F.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1050
Зарегистрирован: 27.11.2007 16:14:47

Re: Вопрос по CheckGroup

Сообщение 0beron » 23.03.2018 09:35:02

[quote="pupsik"]Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.
Вот как число я его и обработал...
0beron
новенький
 
Сообщения: 13
Зарегистрирован: 18.08.2012 19:32:10

Re: Вопрос по CheckGroup

Сообщение pupsik » 23.03.2018 10:43:13

Да это был риторический вопрос.
Снег Север и чем вы хуже таких любителей? :lol:
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Вопрос по CheckGroup

Сообщение Снег Север » 23.03.2018 13:05:18

pupsik писал(а):Да это был риторический вопрос.
Снег Север и чем вы хуже таких любителей? :lol:

Не понял... В делфи/фрипаскале логическое значение представлено как 0 и 1, естественно его так и хранить в базе. Но в других языках это не так, а sqlite используют не только паскалевские программы.

Добавлено спустя 9 минут 41 секунду:
0beron писал(а):Вот как число я его и обработал...
FieldValues возвращает тип Variant, и, в данном случае, как varInteger. При присвоении булевской переменной идет двойное преобразование типа из varInteger в обычное целое, и потом это целое в boolean. Где-то вполне мог выскочить баг, тем более, что свою версию компилятора вы не указали. Я проверял на последней стабильной.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1050
Зарегистрирован: 27.11.2007 16:14:47

Re: Вопрос по CheckGroup

Сообщение pupsik » 23.03.2018 16:59:04

Не понял...
т.е. вы поменяли тип поля... Чем вы отличаетесь от описанных вами любителей?
Или понятие "целый тип" - это Boolean тип?

Добавлено спустя 5 минут 16 секунд:
А вот тут я не понял...

В делфи/фрипаскале логическое значение представлено как 0 и 1, естественно его так и хранить в базе.

Ведь это так хранит сам литл...
Но в других языках это не так, а sqlite используют не только паскалевские программы.

И, учитывая использования в других вариантах (не только паскаль), смена типа поля... влечёт за собой недопонимание. В т.ч. и при просмотре другими программами. Или они догадаются что там Boolean поле?
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Вопрос по CheckGroup

Сообщение Снег Север » 23.03.2018 18:36:53

pupsik писал(а):Или они догадаются что там Boolean поле?
sqlite база однопользовательская, поэтому каждое приложение, естественно, использует поля так, как ему удобнее.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1050
Зарегистрирован: 27.11.2007 16:14:47

Re: Вопрос по CheckGroup

Сообщение pupsik » 23.03.2018 19:21:56

Естественно - использование логики.
Ну а так... в общем: мда..а.

п.с.
Ну и пояснения у вас. Жостик: "Что хочу то и ворочу, уволят... пущай другие фигеют".... Хотя в этом есть логика... но можно и на свои грабли плюхнуться. :wink:
pupsik
энтузиаст
 
Сообщения: 1116
Зарегистрирован: 20.08.2014 16:20:13

Re: Вопрос по CheckGroup

Сообщение Снег Север » 23.03.2018 21:37:23

Наверное, я как-то неудачно поясняю, если вы меня понимаете столь диковинным образом. Еще раз - если в некоторой базе данных нет стандарта на некоторый тип данных, то не может и быть претензии по суррогатной замене этого типа. Для сишника вполне естественным будет представление логической "истины" любым ненулевым значением поля, а вовсе не обязательно единицей.
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1050
Зарегистрирован: 27.11.2007 16:14:47


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 4

Рейтинг@Mail.ru