Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение BLOB в таблицу 
:(
    Опции темы
tresda
  Дата 14.12.2006, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Мир Вам великие Мастера!!

Такая проблема возникла при передачи при помощи SQL-запроса картинки загруженной в DBImage1 в таблицу.

Делаю всё при помощи следующего запроса:
Код

with form1.ADOQuery1 do
begin
SQL.add('insert into house (image) ');
sql.add(' values (:image)');
parameters.ParamValues['image'].LoadFromFile(OpenPictureDialog1.FileName);
execsql;

Однако при отработке запроса вылетает сообщение:
"Invalid variant operation"

Грабли в принципе понятно в чем, но как с ними справиться.

Заранее Большое спасибо за оказанную помощь, действительно ОЧЕНЬ нужно сделать
PM MAIL ICQ   Вверх
tresda
Дата 14.12.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Пробую еще делать так, на первой кнопке загружаю картинку в DBImage, а во второй отправляю с DBIMAGE в таблицу house. 

Процедура первой кнопки: 
Код

Var B: TBitmap; 
begin 
if messagedlg('Добавить изображение?', mtwarning, [mbYes, mbNo],0)=mrNo 
then 
exit 
else 
dbimage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); 
try 
if OpenPictureDialog1.Execute then 
begin 
B := TBitmap.Create; 
B.LoadFromFile(OpenPictureDialog1.FileName); 
DBImage1.Picture.Assign(B); 
end 
else 
exit; 
finally 
B.Free; 

Процедура второй кнопки: 

Код

with form1.ADOQuery1 do 
begin 
sql.clear; 
SQL.add('insert into house (image) '); 
sql.add(' values (:image)'); 
parameters.ParamValues['image']:=B; 
execsql; 

Вываливает ошибка: 
'Variant' and 'TBitmap' 

Однако здесь он от меня ждёт опять Variant, а я ему TBitmap даю. 

Блин что делать? У кого может другие вариант есть??? ГОРЮ!!! 
PM MAIL ICQ   Вверх
Alexeis
Дата 14.12.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: нет
Всего: 459



Может сделать приведение типов Variant(B); ?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Mephisto
Дата 22.12.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Код
procedure TForm1.SavePicture(ID : integer);
var
  AStream : TMemoryStream;
begin
  AStream := TMemoryStream.Create;
  try
    AStream.LoadFromFile(OpenPictureDialog1.FileName);

    Query1.Close;
    Query1.SQL.Text := 'insert into table1 (ID, pctBLOB) values (:id, :pct)';

    Query1.Parameters.ParamByName('ID').Value := ID;
    Query1.Parameters.ParamByName('pct').LoadFromStream(AStream, ftBlob);

    Query1.ExecSQL;
  finally
    FreeAndNil(AStream);
  end;
end;

PM   Вверх
tresda
Дата 25.12.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Спасибо большое интересная мысль, сейчас поробую сделать  smile
PM MAIL ICQ   Вверх
tresda
Дата 25.12.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Ругается "СВОЛОШЬ" говорит ошибка в инструкции INSERT INTO  smile 
Вот полный код отработки кнопки, всё нормально работало до тех пор пока параметр image не добавил

Код

var AStream : TMemoryStream;
begin
AStream := TMemoryStream.Create;
AStream.LoadFromFile(sOpenPictureDialog1.FileName);
with form1.ADOQuery1 do
begin
if sEdit1.Text='' then
begin
messagedlg('Вы не ввели номер дома!!!'+#13#10+'Это поле обязательно для ввода!!!', mtwarning,[mbOk],0);
exit
end
else
begin
SQL.Clear;
SQL.add('insert into house (num_home, address, raion, korpus, index_home, count_etazh, type_home, count_kv, count_podezd, count_sobstv, count_propis, lift, otoplenie, Ploshad_zd, num_ZHEU, date_postr, date_kap_rem, date_next_rem, ksk, notik, image) ');
sql.add('  values (:num_home, :address, :raion, :korpus, :index_home, :count_etazh, :type_home, :count_kv, :count_podezd, :count_sobstv, :count_propis, :lift, :otoplenie, :Ploshad_zd, :num_ZHEU, :date_postr, :date_kap_rem, :date_next_rem, :ksk, :notik, :image)');

Parameters.ParamValues['num_home']:=sEdit1.text;
Parameters.ParamValues['address']:=sEdit5.text;
Parameters.ParamValues['raion']:=sEdit2.text;
Parameters.ParamValues['korpus']:=sEdit3.text;
Parameters.ParamValues['index_home']:=sMaskEdit4.text;
Parameters.ParamValues['count_etazh']:=sEdit8.text;
Parameters.ParamValues['type_home']:=sComboBox1.text;
Parameters.ParamValues['count_kv']:=sEdit10.text;
Parameters.ParamValues['count_podezd']:=sEdit9.text;
Parameters.ParamValues['count_sobstv']:=sEdit11.text;
Parameters.ParamValues['count_propis']:=sEdit12.text;
Parameters.ParamValues['lift']:=sComboBox3.text;
Parameters.ParamValues['otoplenie']:=sComboBox2.text;
Parameters.ParamValues['Ploshad_zd']:=sEdit6.text;
Parameters.ParamValues['num_ZHEU']:=sEdit7.text;
Parameters.ParamValues['date_postr']:=sMaskEdit1.text;
Parameters.ParamValues['date_kap_rem']:=sMaskEdit2.text;
Parameters.ParamValues['date_next_rem']:=sMaskEdit3.text;
Parameters.ParamValues['ksk']:=sComboBox4.text;
Parameters.ParamValues['notik']:=sEdit13.text;
Parameters.ParamByName('image').LoadFromStream(AStream, ftBlob);


end;
//memo1.Lines.Add(form1.ADOQuery1.SQL.Text);
try
execsql;
sql.clear;
SQL.add('select * from House order by num_home');
open;
messagedlg('Данные успешно добавлены!!!',mtinformation,[mbOK],0)
except
messagedlg('Неизвестная ошибка!!!'+#13#10+'Проверьте правильность введенных значений'+#13#10+'Возможно введены: повторный номер дома, неверные даты', mterror,[mbOk],0);
sql.clear;
SQL.add('select * from House order by num_home');
open;
exit
end;
FreeAndNil(AStream);
end;





А вот сам запрос который формируется, я его специально перед отработкой в Memo слил, чтобы глянуть  smile :


Код

insert into house (num_home, address, raion, korpus, index_home, count_etazh, type_home, count_kv, count_podezd, count_sobstv, count_propis, lift, otoplenie, Ploshad_zd, num_ZHEU, date_postr, date_kap_rem, date_next_rem, ksk, notik, image) 
  values(:num_home, :address, :raion, :korpus, :index_home, :count_etazh, :type_home, :count_kv, :count_podezd, :count_sobstv, :count_propis, 
:lift, :otoplenie, :Ploshad_zd, :num_ZHEU, :date_postr, :date_kap_rem, :date_next_rem, :ksk, :notik, :image)
 


В ЧЕМ ДЕЛО НЕ ПОЙМУ?!?!?!?!   smile   smile  

ЛЮДИ ДОБРЫЕ ПОМОГИТЕ!!!! smile 
PM MAIL ICQ   Вверх
Mephisto
Дата 25.12.2006, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Я так понял ругается в строчке номер 44? 
А можешь именно текст ошибки написать?

Добавлено @ 11:46 
Код

Parameters.ParamValues['notik']:=sEdit13.text;
AStream.Seek(0, soFromBegining); //вставленная строчка.
Parameters.ParamByName('image').LoadFromStream(AStream, ftBlob);

Блин, может тогда так. Больше ничего не вижу..  smile

Добавлено @ 11:47 
Кстати, а что такое Parameters?  smile 
PM   Вверх
tresda
Дата 25.12.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Вот эта ошибка
"Exception class EOleException with message 'Ошибка синтаксиса в инструкции INSERT INTO'. Process KSKPro.exe (3928)"
PM MAIL ICQ   Вверх
Mephisto
Дата 25.12.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Попробуй упростить запрос оставив 2 поля. Ключ и BLOB. И попробуй...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.