Вопрос по CheckGroup
Модератор: Модераторы
Вопрос по CheckGroup
Здравствуйте все.
Имеется БД 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
Имеется БД 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 писал(а):CheckGroup.Checked[i] := FieldValues['Chk'];
Тут Controls[i] не нужен, как выше?
FieldValues['****']; а из какого датасета значения берём?
Т.е. не надо ли хотя бы
Плюс. А в литле уже true, false появились?
Добавлено спустя 2 минуты 31 секунду:
т.е.
Вроде так.
Т.е. не надо ли хотя бы
? Или вы его забыли показать в примере кода?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;
Вроде так.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
У меня на тестовом примере код наподобие CheckGroup.Checked[i] := FieldValues['Chk'] работает прекрасно, когда поле 'Chk' целого типа и принимает значения 0 или 1.
Снег Север писал(а):У меня на тестовом примере код наподобие CheckGroup.Checked[i] := FieldValues['Chk'] работает прекрасно, когда поле 'Chk' целого типа и принимает значения 0 или 1.
Я так и поступил - обошел проблемму. Смутило то что CheckGroup.Controls[i].Enabled := FieldValues['Enb']; нормально отрабатывает с Boolean
Всем спасибо тему можно закрывать.
Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.
п.с.
Так оно то, вроде как, в базе и хранится как число.
п.с.
А в чём проблема? В том что в литле используется эмуляция Boolean и это по ссылке написано?Я так и поступил - обошел проблемму.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Ну да, SqLite не знает boolean, просто есть разные варианты, встречал любителей вместо 0,1 использовать 0,-1 или вообще текстом T и F.pupsik писал(а):Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.
[quote="pupsik"]Снег Север чёт не "врубился". Т.е вы его в integer "перевели"?
Так оно то, вроде как, в базе и хранится как число.
Вот как число я его и обработал...
Так оно то, вроде как, в базе и хранится как число.
Вот как число я его и обработал...
Да это был риторический вопрос.
Снег Север и чем вы хуже таких любителей?
Снег Север и чем вы хуже таких любителей?
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
pupsik писал(а):Да это был риторический вопрос.
Снег Север и чем вы хуже таких любителей?
Не понял... В делфи/фрипаскале логическое значение представлено как 0 и 1, естественно его так и хранить в базе. Но в других языках это не так, а sqlite используют не только паскалевские программы.
Добавлено спустя 9 минут 41 секунду:
FieldValues возвращает тип Variant, и, в данном случае, как varInteger. При присвоении булевской переменной идет двойное преобразование типа из varInteger в обычное целое, и потом это целое в boolean. Где-то вполне мог выскочить баг, тем более, что свою версию компилятора вы не указали. Я проверял на последней стабильной.0beron писал(а):Вот как число я его и обработал...
т.е. вы поменяли тип поля... Чем вы отличаетесь от описанных вами любителей?Не понял...
Или понятие "целый тип" - это Boolean тип?
Добавлено спустя 5 минут 16 секунд:
А вот тут я не понял...
В делфи/фрипаскале логическое значение представлено как 0 и 1, естественно его так и хранить в базе.
Ведь это так хранит сам литл...
Но в других языках это не так, а sqlite используют не только паскалевские программы.
И, учитывая использования в других вариантах (не только паскаль), смена типа поля... влечёт за собой недопонимание. В т.ч. и при просмотре другими программами. Или они догадаются что там Boolean поле?
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
sqlite база однопользовательская, поэтому каждое приложение, естественно, использует поля так, как ему удобнее.pupsik писал(а):Или они догадаются что там Boolean поле?
Естественно - использование логики.
Ну а так... в общем: мда..а.
п.с.
Ну и пояснения у вас. Жостик: "Что хочу то и ворочу, уволят... пущай другие фигеют".... Хотя в этом есть логика... но можно и на свои грабли плюхнуться.
Ну а так... в общем: мда..а.
п.с.
Ну и пояснения у вас. Жостик: "Что хочу то и ворочу, уволят... пущай другие фигеют".... Хотя в этом есть логика... но можно и на свои грабли плюхнуться.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Наверное, я как-то неудачно поясняю, если вы меня понимаете столь диковинным образом. Еще раз - если в некоторой базе данных нет стандарта на некоторый тип данных, то не может и быть претензии по суррогатной замене этого типа. Для сишника вполне естественным будет представление логической "истины" любым ненулевым значением поля, а вовсе не обязательно единицей.
