Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.007 c
11-1200582121
MTsv DN
2008-01-17 18:02
2009.05.24
Странная вещь...


15-1237584603
Юрий
2009-03-21 00:30
2009.05.24
С днем рождения ! 21 марта 2009 суббота


2-1239093371
Анфиса
2009-04-07 12:36
2009.05.24
Excel в Delphi


2-1238932787
Андрей (начинающий)
2009-04-05 15:59
2009.05.24
Движение по StringGrid


2-1239083759
Нов_и_чок
2009-04-07 09:55
2009.05.24
Экспорт DBF в MDB





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский