Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

добавление рисунка в БД из файла   Найти похожие ветки 

 
KirillRepin ©   (2008-09-12 12:04) [0]

Подскажите пожалуйста в чем ошибка? рисунок в БД не добавляется.
процедура в БД:
CREATE PROCEDURE Proc_AddImage
@im image
AS
BEGIN
 INSERT INTO Tab_Pictures (Pic_Name, Pic)
  VALUES ("picture1", @im)
END

GO

код в дельфи:
 StoredProc1.ParamByName("@im").LoadFromFile("C:\1r.bmp", ftBlob);
 StoredProc1.ExecProc;

Что сделано не правильно и как надо?
Заранее благодарен!


 
stas ©   (2008-09-12 12:17) [1]

А почему решил что недобавляется?


 
KirillRepin ©   (2008-09-12 12:20) [2]

в базе таблицу смотрел она пустая


 
www   (2008-09-12 12:22) [3]

а коммит был ?


 
stas ©   (2008-09-12 12:22) [4]

И ошибка никакая не пишеться?


 
Ega23 ©   (2008-09-12 12:23) [5]


> а коммит был ?


При чём тут коммит?????


 
www   (2008-09-12 12:28) [6]


> При чём тут коммит?????

как причем?!
а если проверяет наличие данных из другой проги?


 
Ega23 ©   (2008-09-12 12:29) [7]

1. выбрасываем StoredProcedure. Вообще забудь про этот компонент.
2. Берём TQuery в случае BDE (тоже лучше забудь про эту технологию) или TADOCommand в случае ADO (это наш выбор!)
3. Пишем текст exec Proc_AddImage @im=:im
4. Ставим parameters.ParamByName("im").Paramtype = ftBLOB;
5. Грузим parameters.ParamByName("im").LoadFrom....
6. Execute.


 
KirillRepin ©   (2008-09-12 12:29) [8]

никаких ошибок не всплывает, курсор меняется на sql часы и обратно. внешне кажется что процедура отрабатывает нормально.


 
Ega23 ©   (2008-09-12 12:31) [9]


> как причем?!
> а если проверяет наличие данных из другой проги?


Да хоть откуда.
Ещё раз: при чём конкретно в этом примере коммит. И где ты его "не видишь"?


 
KirillRepin ©   (2008-09-12 12:33) [10]


> 1. выбрасываем StoredProcedure. Вообще забудь про этот компонент.

а чем это хуже TQuery или ADO


 
KirillRepin ©   (2008-09-12 12:34) [11]

и как это можно решить через StoredProcedure?


 
www   (2008-09-12 12:34) [12]


> Ega23 ©   (12.09.08 12:31) [9]

автор пишет что не видит результата
чем он его не видит - не сказал
мож он из какаго-то sql-манагера смотрит который до комита данных их не увидит


 
KirillRepin ©   (2008-09-12 12:38) [13]


> мож он из какаго-то sql-манагера смотрит который до комита
> данных их не увидит

именно из него и QueryAnalizer


 
Ega23 ©   (2008-09-12 12:42) [14]


> который до комита данных их не увидит


Ты, вообще, с какой СУБД работаешь?


> а чем это хуже TQuery или ADO


Всем. Объяснять - это на пол-дня. В кратце: ADO для MSSQL - родная технология для доступа к данным. Т.е. наиболее оптимальная.


 
Ega23 ©   (2008-09-12 12:44) [15]


> именно из него и QueryAnalizer
>


Набери в QA текст:

exec Proc_AddImage @im=0xFFFF
select * from Tab_Pictures


выдай результат сюда.


 
www   (2008-09-12 12:44) [16]


> Ega23 ©   (12.09.08 12:42) [14]

а что mssql только dirty read поддерживает? или вообще понятие транзакции для нее - мыльный пузырь?


 
Ega23 ©   (2008-09-12 12:48) [17]


> а что mssql только dirty read поддерживает? или вообще понятие
> транзакции для нее - мыльный пузырь?
>


Для тех кто в танке: где ты видишь открытие транзакции, которую надо коммитить?


 
www   (2008-09-12 12:53) [18]


> Для тех кто в танке

"ты суслика видишь? а он есть"
телепатор-с


 
KirillRepin ©   (2008-09-12 12:53) [19]


> выдай результат сюда.


1 picture1 0xFFFF


 
Ega23 ©   (2008-09-12 12:57) [20]


> 1 picture1 0xFFFF


Теперь возьми TQuery, вбей ему SQL = еxec Proc_AddImage @im=0xFFFF
и выполни (ExecSQL). Таблицу предварительно очисти.
Запись появилась или нет?


 
KirillRepin ©   (2008-09-12 12:58) [21]


> ADO для MSSQL - родная технология для доступа к данным.
> Т.е. наиболее оптимальная.

благодарю за краткое и грамотное объяснение!
в дальнейшем буду использовать.
но в данный момент хотелось бы решить вопрос как он есть.


 
stas ©   (2008-09-12 13:07) [22]

D5,BDE, а MSSQL 2000? в BDE поддержки MSSQL 2000 уже нет, т.е. все нововведения, которые появились в MSSQL 2000 (типы полей в частности) BDE не поддерживает. А это означает что можешь столкнуться еще с другими проблемами. Поэтому лучше ADO.


 
Ega23 ©   (2008-09-12 13:41) [23]


> т.е. все нововведения, которые появились в MSSQL 2000 (типы
> полей в частности) BDE не поддерживает


Хочу услышать, какие типы полей в MSSQL 2000 не поддерживает BDE (за езыг тебя никто не тянул, заметь).


 
stas ©   (2008-09-12 14:00) [24]

Да как раз с BLOB полями проблемы. И  nvarchar.
Как работает BDE с новыми типами sql_variant и bigint незнаю, возможно тоже проблематично.
Но а о переходе на MSSQL 2005 при работе с BDE и разговоров быть неможет.


 
Ega23 ©   (2008-09-12 14:31) [25]


> Да как раз с BLOB полями проблемы. И  nvarchar.


Нет никаких проблем. Как с BLOB-ами, так и с nvarchar. 7 лет уже система работает.


> sql_variant


Гм... Действительно есть такой тип. А нафига он на клиенте?


> Но а о переходе на MSSQL 2005 при работе с BDE и разговоров
> быть неможет.


Т.е. мне нужно срочно на старую работу письмо отправить, чтобы они всем серверам даунгрейд сделали, т.к. stas ©  сказал, что это работать не может (а почему-то работает)?

З.Ы. Может хватит чушь пороть?


 
stas ©   (2008-09-12 14:45) [26]

Ega23 ©   (12.09.08 14:31) [25]
> 7 лет уже система работает.
Значит она и с 6.5 работала
>Т.е. мне нужно срочно на старую работу письмо
опять же клиент заточен под 6.5.
т.е. не используются новые возможности.

И еще вопрос у тебя клиент был написан на D5?


 
KirillRepin ©   (2008-09-12 14:46) [27]

попробовал с Query выдает ошибку:
Query1: No SQL statement aviable


 
Ega23 ©   (2008-09-12 14:48) [28]


> Значит она и с 6.5 работала


Ну с ней - нет, с 7.0 - да.


> И еще вопрос у тебя клиент был написан на D5?


D5, полтора года назад на D7 перевёл.


> т.е. не используются новые возможности.


Ясен пень не используются. Поддержка BDE прекращена давным-давно (с D4 вроде). Только это не значит, что оно "не работает".


 
Ega23 ©   (2008-09-12 14:49) [29]


> Query1: No SQL statement aviable


О чём это говорит, не догадываешься?


 
KirillRepin ©   (2008-09-12 15:00) [30]

Сделал так:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("exec Proc_AddImage @im=0xFFFF");
Query1.ExecSQL;

все заработало!

в БД:
2 picture1 0xFFFF

а как теперь с загрузкой из файла быть?-


 
Ega23 ©   (2008-09-12 15:11) [31]


> Query1.SQL.Clear;
> Query1.SQL.Add("exec Proc_AddImage @im=0xFFFF");


Query1.SQL.Text := ".....";


> а как теперь с загрузкой из файла быть?-


Я тебе уже выше ответил.


 
stas ©   (2008-09-12 15:26) [32]

Ega23 ©   (12.09.08 14:31) [25]
>  Только это не значит, что оно "не работает".


А я и не писал этого


> т.е. все нововведения, которые появились в MSSQL 2000 (типы
> полей в частности)

А то что работаю программы, которые и с 7-кой работали, то ясно что они и будут работать и на 2008.

KirillRepin ©   (12.09.08 15:00) [30]
А твоя проблема в том что на BLOB нужно в алиасе BDE устанавливать максимальный размер, который по умолчанию меньше чем твоя картинка.


 
KirillRepin ©   (2008-09-12 15:33) [33]

Все получилось! спасибо большое за помощь в решении моей проблемы!


 
sniknik ©   (2008-09-12 15:34) [34]

> З.Ы. Может хватит чушь пороть?
это не чушь, действительно встречал предупреждения (и не где нибудь в инете, а в официальной доке) о прекращении поддержки с версии 6,5 или 7 и потому работа на более старшей версии не гарантируется...
единственное о чем он не упомянул, это о том, что речь там шла о "нативном" BDE-шном драйвере(/линке), а не о чем то другом, вроде ODBC, поддержка которого продолжалась существенно дольше.

и насколько понимаю все успешно работающие проекты на BDE используют именно ODBC, т.к. иначе проблемы были бы наверняка.
вот ты что используешь в том на что ссылаешься?


 
stas ©   (2008-09-12 15:34) [35]

KirillRepin ©   (12.09.08 15:33) [33]
Ты хоть напиши что сделал.


 
KirillRepin ©   (2008-09-12 15:38) [36]

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := "exec Proc_AddImage @im=:im";
Query1.ParamByName("im").LoadFromFile("C:\bear.bmp", ftBlob);
Query1.ExecSQL;

Мне теперь интересно а как загрузить из TImage?


 
www   (2008-09-12 15:47) [37]


> Мне теперь интересно а как загрузить из TImage?

loadfromstream


 
Ega23 ©   (2008-09-12 16:03) [38]


> вот ты что используешь в том на что ссылаешься?


ODBC, конечно. Откровенно говоря, ни разу не видел, чтобы кто-то именно на BDE-шном драйвере что-то делал. Ну если только ОЧЕНЬ давно...


 
KirillRepin ©   (2008-09-12 16:31) [39]

Подскажите пожалуйста, а загрузить из БД обратно в TImage как?
как я понимаю это SaveToStream вот только немогу сформировать нормально код. Вот что делаю я:
var
 s:TMemoryStream;
begin
 s:=TMemoryStream.Create;
 Query1.Close;
 Query1.SQL.Clear;
 Query1.SQL.Text := "SELECT Pic FROM Tab_Pictures WHERE Id_Pictures = 4";

 Query1.ExecSQL;

end;

Что не так? и как правильно воткнуть и куда SaveToStream ?


 
stas ©   (2008-09-12 16:57) [40]

TBlobField.SaveToStream ()



Страницы: 1 2 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.026 c
11-1200709306
Jon
2008-01-19 05:21
2009.05.24
Binary search


2-1239057754
Dim
2009-04-07 02:42
2009.05.24
Совместный доступ к файлу


3-1221456538
checkmate-maker
2008-09-15 09:28
2009.05.24
ODAC. Параметризованные запросы.


15-1236982065
вопро про кладовку
2009-03-14 01:07
2009.05.24
А что с кладовкой? Ничего не скачать, не посмотреть нельзя.


15-1237366575
ZeroDivide
2009-03-18 11:56
2009.05.24
А у меня дочка родилась...