![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
BLOB и параметрический запрос [D7, MySQL]
совсем чайник © (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]потому что в кавычках. убрать, соответственно.