-
Подскажите пожалуйста в чем ошибка? рисунок в БД не добавляется.
процедура в БД:
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;
Что сделано не правильно и как надо?
Заранее благодарен!
-
А почему решил что недобавляется?
-
в базе таблицу смотрел она пустая
-
а коммит был ?
-
И ошибка никакая не пишеться?
-
> а коммит был ?
При чём тут коммит?????
-
> При чём тут коммит?????
как причем?!
а если проверяет наличие данных из другой проги?
-
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.
-
никаких ошибок не всплывает, курсор меняется на sql часы и обратно. внешне кажется что процедура отрабатывает нормально.
-
> как причем?!
> а если проверяет наличие данных из другой проги?
Да хоть откуда.
Ещё раз: при чём конкретно в этом примере коммит. И где ты его "не видишь"?
-
> 1. выбрасываем StoredProcedure. Вообще забудь про этот компонент.
а чем это хуже TQuery или ADO
-
и как это можно решить через StoredProcedure?
-
> Ega23 © (12.09.08 12:31) [9]
автор пишет что не видит результата
чем он его не видит - не сказал
мож он из какаго-то sql-манагера смотрит который до комита данных их не увидит
-
> мож он из какаго-то sql-манагера смотрит который до комита
> данных их не увидит
именно из него и QueryAnalizer
-
> который до комита данных их не увидит
Ты, вообще, с какой СУБД работаешь?
> а чем это хуже TQuery или ADO
Всем. Объяснять - это на пол-дня. В кратце: ADO для MSSQL - родная технология для доступа к данным. Т.е. наиболее оптимальная.
-
> именно из него и QueryAnalizer
>
Набери в QA текст:
exec Proc_AddImage @im=0xFFFF
select * from Tab_Pictures
выдай результат сюда.
-
> Ega23 © (12.09.08 12:42) [14]
а что mssql только dirty read поддерживает? или вообще понятие транзакции для нее - мыльный пузырь?
-
> а что mssql только dirty read поддерживает? или вообще понятие
> транзакции для нее - мыльный пузырь?
>
Для тех кто в танке: где ты видишь открытие транзакции, которую надо коммитить?
-
> Для тех кто в танке
"ты суслика видишь? а он есть"
телепатор-с
-
> выдай результат сюда.
1 picture1 0xFFFF
-
> 1 picture1 0xFFFF
Теперь возьми TQuery, вбей ему SQL =
еxec Proc_AddImage @im=0xFFFF
и выполни (ExecSQL). Таблицу предварительно очисти.
Запись появилась или нет?
-
> ADO для MSSQL - родная технология для доступа к данным.
> Т.е. наиболее оптимальная.
благодарю за краткое и грамотное объяснение!
в дальнейшем буду использовать.
но в данный момент хотелось бы решить вопрос как он есть.
-
D5,BDE, а MSSQL 2000? в BDE поддержки MSSQL 2000 уже нет, т.е. все нововведения, которые появились в MSSQL 2000 (типы полей в частности) BDE не поддерживает. А это означает что можешь столкнуться еще с другими проблемами. Поэтому лучше ADO.
-
> т.е. все нововведения, которые появились в MSSQL 2000 (типы
> полей в частности) BDE не поддерживает
Хочу услышать, какие типы полей в MSSQL 2000 не поддерживает BDE (за езыг тебя никто не тянул, заметь).
-
Да как раз с BLOB полями проблемы. И nvarchar.
Как работает BDE с новыми типами sql_variant и bigint незнаю, возможно тоже проблематично.
Но а о переходе на MSSQL 2005 при работе с BDE и разговоров быть неможет.
-
> Да как раз с BLOB полями проблемы. И nvarchar.
Нет никаких проблем. Как с BLOB-ами, так и с nvarchar. 7 лет уже система работает.
> sql_variant
Гм... Действительно есть такой тип. А нафига он на клиенте?
> Но а о переходе на MSSQL 2005 при работе с BDE и разговоров
> быть неможет.
Т.е. мне нужно срочно на старую работу письмо отправить, чтобы они всем серверам даунгрейд сделали, т.к. stas © сказал, что это работать не может (а почему-то работает)?
З.Ы. Может хватит чушь пороть?
-
Ega23 © (12.09.08 14:31) [25]
> 7 лет уже система работает.
Значит она и с 6.5 работала
>Т.е. мне нужно срочно на старую работу письмо
опять же клиент заточен под 6.5.
т.е. не используются новые возможности.
И еще вопрос у тебя клиент был написан на D5?
-
попробовал с Query выдает ошибку:
Query1: No SQL statement aviable
-
> Значит она и с 6.5 работала
Ну с ней - нет, с 7.0 - да.
> И еще вопрос у тебя клиент был написан на D5?
D5, полтора года назад на D7 перевёл.
> т.е. не используются новые возможности.
Ясен пень не используются. Поддержка BDE прекращена давным-давно (с D4 вроде). Только это не значит, что оно "не работает".
-
> Query1: No SQL statement aviable
О чём это говорит, не догадываешься?
-
Сделал так:
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('exec Proc_AddImage @im=0xFFFF');
Query1.ExecSQL;
все заработало!
в БД:
2 picture1 0xFFFF
а как теперь с загрузкой из файла быть?-
-
> Query1.SQL.Clear;
> Query1.SQL.Add('exec Proc_AddImage @im=0xFFFF');
Query1.SQL.Text := '.....';
> а как теперь с загрузкой из файла быть?-
Я тебе уже выше ответил.
-
Ega23 © (12.09.08 14:31) [25]
> Только это не значит, что оно "не работает".
А я и не писал этого
> т.е. все нововведения, которые появились в MSSQL 2000 (типы
> полей в частности)
А то что работаю программы, которые и с 7-кой работали, то ясно что они и будут работать и на 2008.
KirillRepin © (12.09.08 15:00) [30]
А твоя проблема в том что на BLOB нужно в алиасе BDE устанавливать максимальный размер, который по умолчанию меньше чем твоя картинка.
-
Все получилось! спасибо большое за помощь в решении моей проблемы!
-
> З.Ы. Может хватит чушь пороть?
это не чушь, действительно встречал предупреждения (и не где нибудь в инете, а в официальной доке) о прекращении поддержки с версии 6,5 или 7 и потому работа на более старшей версии не гарантируется...
единственное о чем он не упомянул, это о том, что речь там шла о "нативном" BDE-шном драйвере(/линке), а не о чем то другом, вроде ODBC, поддержка которого продолжалась существенно дольше.
и насколько понимаю все успешно работающие проекты на BDE используют именно ODBC, т.к. иначе проблемы были бы наверняка.
вот ты что используешь в том на что ссылаешься?
-
KirillRepin © (12.09.08 15:33) [33]
Ты хоть напиши что сделал.
-
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text := 'exec Proc_AddImage @im=:im';
Query1.ParamByName('im').LoadFromFile('C:\bear.bmp', ftBlob);
Query1.ExecSQL;
Мне теперь интересно а как загрузить из TImage?
-
> Мне теперь интересно а как загрузить из TImage?
loadfromstream
-
> вот ты что используешь в том на что ссылаешься?
ODBC, конечно. Откровенно говоря, ни разу не видел, чтобы кто-то именно на BDE-шном драйвере что-то делал. Ну если только ОЧЕНЬ давно...
-
Подскажите пожалуйста, а загрузить из БД обратно в 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 ?
-
TBlobField.SaveToStream ()