Особенности работы с БД в 0.9.28

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

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

Особенности работы с БД в 0.9.28

Сообщение Владимир » 28.10.2009 21:15:27

Всем доброго!
Использую MySQL
Хочу обратить внимание на чтение записей из БД с использованием SQLdb.
Вольности кончились!
Это теперь не работает!
Код: Выделить всё
CmboBox1.Items.Clear;
select name from table_nm;//name-char
with SQLQuery do begin
First;
  while not EOF do begin
ComboBox1.Items.Add(FieldByName('name').Value);
Next;
end;//while
end;//with

Аналогично - тоже не работает
Код: Выделить всё
select number from table_nm;//number-int
with SQLQuery do begin
First;
while not EOF do begin
  case FieldByName('number').Value of
0:  ....
1:  ....
  end;//case
Next;
end;//while
end;//with


Теперь следует аккуратно читать ответ в переменную, соответствующую типу поля, а уж потом делать присваивание.
Т.е. в первом примере
Код: Выделить всё
var
s:String;
....
CmboBox1.Items.Clear;
select name from table_nm;//name-char
with SQLQuery do begin
First;
while not EOF do begin
s:=FieldByName('name').Value
CmboBox1.Items.Add(s);
Next;
end;//while
end;//with

и соответственно во втором
Код: Выделить всё
var
i:Integer;
....
select number from table_nm;//number-int
with SQLQuery do begin
First;
while not EOF do begin
i:=FieldByName('number').Value;
  case i of
  0:  ....
  1:  ....
  end;//case
Next;
end;//while
end;//with
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: Особенности работы с БД в 0.9.28

Сообщение GAMER » 28.10.2009 23:03:03

Не работает на этапе компиляции или в ран-тайме?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Особенности работы с БД в 0.9.28

Сообщение Logo » 29.10.2009 18:02:16

Код: Выделить всё
FieldByName('name').Value

С Value всегда была неразбериха в разных версиях fpc/Lazarus. Попробуйте
Код: Выделить всё
ComboBox1.Items.Add(FieldByName('name').AsString);

Ну и для остальных данных соответственно AsInteger, AsFloat....
Logo
постоялец
 
Сообщения: 464
Зарегистрирован: 20.08.2008 01:00:47

Re: Особенности работы с БД в 0.9.28

Сообщение Владимир » 29.10.2009 22:21:09

GAMER писал(а):Не работает на этапе компиляции или в ран-тайме?

К компиляции это отношения не имеет - ошибки нет. Дело в том, что FieldByName().Value изначально имеет тип Variant, т.е. может быть ЛЮБЫМ типом, а разработчик, зная тип поля, присваивает ему переменную с правильным типом. Компилятор об этом не знает. В run-time ошибки также не возникает, просто значение запрашиваемого поля оказывается пустым.

Добавлено спустя 12 минут 46 секунд:
Logo писал(а):
Код: Выделить всё
FieldByName('name').Value

С Value всегда была неразбериха в разных версиях fpc/Lazarus. Попробуйте
Код: Выделить всё
ComboBox1.Items.Add(FieldByName('name').AsString);

Ну и для остальных данных соответственно AsInteger, AsFloat....

Понятно, спасибо. Я думаю, что персональное присваивание ожидаемому типу должно работать всегда!
Надеюсь...
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

Рейтинг@Mail.ru
cron