[решено] Lazarus + SQLdb не видит BLOB поле

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

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

[решено] Lazarus + SQLdb не видит BLOB поле

Сообщение Keeper » 08.03.2012 23:08:30

Приветствую! Переношу проект с Delphi на Lazarus. Версия Lazarus 0.9.30.2. Использую базу Oracle XE 10g и стандартные компоненты лазаруса для доступа к ней. Нужно считать картинку из BLOB-поля во временный файл. В Delphi я делал это следующим образом:

Код: Выделить всё
Query.SQL.Text := 'select QuestID, Text, Image from ExQuest where QuestID = '
   + GetQuestID(cbQuest.ItemIndex - 1));
Query.Active := True;
TBlobField(Query.FieldByName('Image')).SaveToFile(GetExePath+'temp.jpg')


и всё нормально работало. В лазарусе я получаю сообщение об ошибке:

Query : Field not found : "Image"


Поле в таблице абсолютно точно есть, абсолютно такой-же код в Delphi работает. Что делать, в какую сторону копать?
Последний раз редактировалось Keeper 09.03.2012 13:03:16, всего редактировалось 1 раз.
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Ism » 09.03.2012 00:15:38

Может объявить объект TBlobField отдельно, а затем Query.FieldByName('Image').AssignTo
http://docwiki.embarcadero.com/VCL/en/C ... t.AssignTo
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Keeper » 09.03.2012 01:30:08

Все равно пишет, что поле не найдено. Мистика какая-то.
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Ism » 09.03.2012 02:05:34

Может регистр букв имеет значение ?

Или слово image конфликтует с каким нибудь оператором базы данных, хотя маловероятно, но попробуйте переименовать в базе на image_
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Vadim » 09.03.2012 04:55:36

А Вы проверьте, есть такое поле в наборе данных или нет. :) Не в БД, а именно в том наборе данных, который Вы получили:
Код: Выделить всё
For i:=0 To Query.FieldCount-1 Do
  ShowMessage(Query.Fields[i].DisplayName);
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение sign » 09.03.2012 05:01:12

Попробуйте вот так:
Код: Выделить всё
procedure ppp;
const flQuestID = 0; flText = 1; flImage = 2;
begin
  Query.SQL.Text := Format('SELECT QuestID, Text, Image FROM ExQuest WHERE QuestID = %d', [GetQuestID(cbQuest.ItemIndex - 1)]);
  Query.Open;
  TBlobField(Query.Fields[flImage]).SaveToFile(Format('%stemp.jpg', [GetExePath]));
end;

Т.е. обратиться к полю не по имени, а индексу.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Keeper » 09.03.2012 10:47:33

Vadim писал(а):А Вы проверьте, есть такое поле в наборе данных или нет. :) Не в БД, а именно в том наборе данных, который Вы получили:
Код: Выделить всё
For i:=0 To Query.FieldCount-1 Do
  ShowMessage(Query.Fields[i].DisplayName);


В наборе данных нужного поля нет. Из-за чего такое может быть?
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Vadim » 09.03.2012 11:20:21

Keeper писал(а):Из-за чего такое может быть?

Не имею ни малейшего понятия. С Oracle никогда не работал. :)
Алгоритм такой:
1. Какое количество полей получилось после выборки? Если три, как Вы и запрашивали, то выборка прошла нормально.
2. Поскольку поле "Image" у Вас третье по счёту, то нужно узнать, как называется третье поле в Вашем наборе данных:
Код: Выделить всё
ShowMessage(Query.Fields[2].DisplayName);

3. Именно это имя используйте в FieldByName().
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus + SQLdb не видит BLOB поле

Сообщение Keeper » 09.03.2012 11:31:32

Код: Выделить всё
ShowMessage(IntToStr(Query.FieldCount)); 

Показывает 2. Значит что-то не так с выборкой.

Добавлено спустя 1 час 31 минуту 6 секунд:
Проблема была в SQLdb компонентах. Перешёл на Zeos и всё заработало. Спасибо всем за помощь!
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль


Вернуться в Lazarus

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

Сейчас этот форум просматривают: xchgeaxeax и гости: 251

Рейтинг@Mail.ru