Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

BLOB и параметрический запрос [D7, MySQL]


Страницы:   1 2 3

совсем чайник ©   (2007-02-21 13:30:00) 

Здравствуйте, использую dbexpress и Mysql
Мне необходимо в запросе добавить в BLOB поле картинку.
Воспользовавшись примером на данном форуме написал такой код:


if rra.image<>'' then
 begin
   fproc.q1.SQL.Text:=fproc.q1.SQL.Text+',sepcimage= '':paramblob''';
   p:=tparam.Create(nil);
   p.Name:='paramblob';
   fproc.q1.Params.AddParam(p);
   fproc.q1.ParamByName('paramblob').DataType := ftBlob;
   fproc.Q1.ParamByName('paramblob').ParamType := ptInput;
   fproc.Q1.ParamByName('paramblob').LoadFromFile(rra.image,ftBlob);
 end;
try
 fproc.q1.ExecSQL(true);
 result:=0;
except
 result:=1;

И в результате значения параметра paramblob в BLOB поле добавляется просто ':paramblob' т.е. просто строчка...
Скажите пожалуйста почему так ? и как это исправить ?


Reindeer Moss Eater   (2007-02-21 14:26:00) [41]

В чем проблема тебе уже написали.
У тебя ошибка в синтаксисе.

Что делать тоже сказали
check the manual that corresponds to your
MySQL server version for the right syntax to use near ':paramblob' at line 1")'.


совсем чайник   (2007-02-21 14:22:00) [42]


> insert into Jurup set Term_id=1399
>
> Кури учебник по SQL и не парь людям мозги.
>

А чем вам не понравилось ?
уберем блоб из запроса и все работает:
insert into Jurup set Term_id=1399 , Qps='',Rxp='',Gcuber='',Txp='',Date_up='21.02.2007',Comment=' block',Nes='',type=0,time=0

все без проблем выполняется


Reindeer Moss Eater   (2007-02-21 14:15:00) [43]

insert into Jurup set Term_id=1399

Кури учебник по SQL и не парь людям мозги.


совсем чайник   (2007-02-21 14:14:00) [44]

для доказательства вот полный текст:

 object q1: TSQLQuery
   MaxBlobSize = -1
   Params = <>
   SQLConnection = sqlcon
   Left = 128
   Top = 48
 end

вот текст процедуры:

function newup (rra:rzap_up):integer;
var Stream: tstream;
   p:tparam;
   sq:string;
begin
strex:=strex+'  '+'newup';
 fproc.q1.Active:=false;
 fproc.q1.SQL.Clear;
 sq:='insert into Jurup set Term_id='+rra.id_term+' , Qps='''+rra.Qps+''',Rxp='''+rra.Rxp+''',Gcuber='''+rra.Gcuber+''',Txp='''+rra.Txp+''',Date_up='''+datetostr(rra.date)+''',Comment='''+rra.coment+''',Nes='''+rra.nes+''',type='+inttostr(rra.auto);
if not(rra.time=null) then
 sq:=sq+',time='+inttostr(rra.time);
if rra.image<>'' then
 begin
   sq:=sq+',sepcimage= :paramblob';
   p:=tparam.Create(nil);
   p.Name:='paramblob';
   fproc.q1.Params.AddParam(p);
   fproc.q1.ParamByName('paramblob').DataType := ftBlob;
   fproc.Q1.ParamByName('paramblob').ParamType := ptInput;
   fproc.Q1.ParamByName('paramblob').LoadFromFile(rra.image,ftBlob);
 end;
if rra.author<>'' then
 sq:=sq+',author='''+rra.author+'''';
try
 fproc.q1.SQL.Text:=sq;
//  showmessage(fproc.q1.SQL.Text);
 fproc.q1.ExecSQL(true);
 result:=0;
except
 result:=1;
   raise;
end;
end;


вот содержание типа:

rzap_up =record
 id:string;
 id_term:string;
 date:tdate;
 Qps:string;
 Rxp:string;
 Gcuber:string;
 Txp:string;
 coment:string;
 nes:string;
 auto:integer;
 time:integer;
 author:string;
 ebno:string;
 attn:string;
 attngcu:string;
 image:string;
end;


Ошибка, которую я описал на пост выше (


совсем чайник   (2007-02-21 14:08:00) [45]

В Disign-time параметров нет.
переделал код, вот запрос перед
fproc.q1.ExecSQL(true);

insert into Jurup set Term_id=1399 , Qps='',Rxp='',Gcuber='',Txp='',Date_up='21.02.2007',Comment='
bock',Nes='',type=0,time=0,sepcimage= :paramblob

вот ошибка:

Project Linkterm.exe raised exception class EDatabaseError with message 'Database Server Error: Failed to query
the server.(Error "1064"; Reason "You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ':paramblob' at line 1")'.


Johnmen   (2007-02-21 14:06:00) [46]


> Val ©   (21.02.07 13:55) [6]

Да, у него походу два параметра получается, с одинаковыми именами :)


Reindeer Moss Eater   (2007-02-21 13:58:00) [47]

А нужны ли строки, добавляющие к готовому в дизайне тексту sql строковый литерал?
Мысль конечно зело мудрая.
Особенно если код добавления выполнится несколько раз.


Val   (2007-02-21 13:55:00) [48]

кстати - нужны ли эти строки:
p:=tparam.Create(nil);
p.Name:='paramblob';
fproc.q1.Params.AddParam(p);

?
обычно, при объявлении параметра в тексте запроса, он создается автоматически, при разборе...


Reindeer Moss Eater   (2007-02-21 13:51:00) [49]

fproc.q1.SQL.Text:=fproc.q1.SQL.Text+',sepcimage= :paramblob';
ShowMessage('пасматри, какую фигню ты написал'#13#10 + fproc.q1.SQL.Text);


Reindeer Moss Eater   (2007-02-21 13:50:00) [50]

И чего же тогда тебе не ясно?

You have an error in your SQL syntax

И даже указано где именно


совсем чайник   (2007-02-21 13:42:00) [51]


> А нам предлагается угадать, что там у тебя написано в fproc.
> q1.SQL.Text.
> Да?

Заполняются остальные поля таблицы, запрос проходит корректно, все заполняется хорошо, кроме BLOB

> потому что в кавычках. убрать, соответственно.

Убираю кавычки:
if rra.image<>'' then
 begin
   fproc.q1.SQL.Text:=fproc.q1.SQL.Text+',sepcimage= :paramblob';
   p:=tparam.Create(nil);
   p.Name:='paramblob';
   fproc.q1.Params.AddParam(p);
   fproc.q1.ParamByName('paramblob').DataType := ftBlob;
   fproc.Q1.ParamByName('paramblob').ParamType := ptInput;
   fproc.Q1.ParamByName('paramblob').LoadFromFile(rra.image,ftBlob);
 end;
try
 fproc.q1.ExecSQL(true);
 result:=0;
except
 result:=1;


при выполнении запроса получаю ошибку:

Project Linkterm.exe raised exception class EDatabaseError with message 'Database Server Error: Failed to query
the server.(Error "1064"; Reason "You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ':paramblob' at line 3")'.


Reindeer Moss Eater   (2007-02-21 13:36:00) [52]

fproc.q1.SQL.Text:=fproc.q1.SQL.Text+',sepcimage= '':paramblob''';

А нам предлагается угадать, что там у тебя написано в fproc.q1.SQL.Text.
Да?


Val   (2007-02-21 13:36:00) [53]

потому что в кавычках. убрать, соответственно.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо