![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MS SQL, записать поле text
frogl © (2003-10-21 18:42:00)
Добрый день.
Есть MS SQL. Есть таблица с полем типа text. Как в нее записать какой-либо текстовый файл.
Пробовал так:
memo.Lines.LoadFromFile("c:\1.htm");
s:="insert into messages(forum_id, messag) values (12," +
"""" + memo.Lines.Text + """"
+ ")";
q.SQL.Text:=s;
q.ExecSQL;
Если в memo что-то простое, вида "привет" - все работает. Если загружаю реальный файл - при выполнении запроса выскакивает сообщение - reaised exception class EOleException with message "Parameters object is improperly defined. Inconsistent or incomplete information was provided."
Как делать правильно ?
frogl (2003-10-22 10:20:00) [1]
Семен - спасибо. Мнепомог твой способ.
me - тоже спасибо. Постараюсь в ближайшее время разобраться и с твоим вариантом.
me (2003-10-21 20:55:00) [2]
Этот пример загрузки текстового файла в поле my_text_field таблицы my_table можно оформить как хранимую процедуру:
declare @FSObject int, @FileID int, @hr int, @FileName varchar(256), @stm int, @buff varchar(8000)
execute @hr = sp_OACreate "Scripting.FileSystemObject", @FSObject OUT
if @hr = 0
begin
set @FileName = "c:\some_folder\some_file.txt"
execute @hr = sp_OAMethod @FSObject, "FileExists", @exist OUT, @FileName
if @exist = 1
begin
execute @hr = sp_OAMethod @FSObject, "GetFile", @FileID OUT, @FileName
IF @hr = 0
begin
execute @hr = sp_OAMethod @FileID, "OpenAsTextStream", @stm OUT, 1
IF @hr = 0
begin
execute @hr = sp_OAMethod @stm, "ReadAll", @buff OUT
update my_table set my_text_field = @buff where ...
end
end
end
end
execute @hr = sp_OADestroy @FSObject
alxx (2003-10-21 19:22:00) [3]
Вообще то реальный текст не вставляется потому, что там двоеточия встречаются. А еще если апострофы встретятся - тоже баги будут.
Семен Сорокин (2003-10-21 18:47:00) [4]
попробуй так:
memo.Lines.LoadFromFile("c:\1.htm");
q.SQL.Add("insert into messages(forum_id, messag) values (12, :text)")
q.ParamByName("text").AsString := memo.Lines.Text;
{для ADO: q.Parameters.ParamByName("text").Value := ...}
q.ExecSQL;