Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Записть полей типа text в MS SQL


frogl ©   (2003-11-09 11:26:00) 

Добрый день.

Делаю вот так:

_messag:=AnsiReplaceStr(_messag, """", """);
_message_name:=AnsiReplaceStr(_message_name, """", " ");

s:= "insert into messages(forum_id, message_name," +
"readed, marked, comment, messag, import_data)" +
" values (" + IntToStr(_forum_id) + "," +
"""" + _message_name + """" +
"," + IntToStr(_readed) +
"," + IntToStr(_marked) +
"," + """" + _comment + """" +
"," + ":messag" +
"," + dataStr +
")";

msq_genQuery.SQL.Text:=s;

try
msq_genQuery.Parameters.ParamByName("messag").Value:=_messag;
msq_genQuery.ExecSQL;
except
Inc(errorCount);
end;

При импорте около 1400 записей, 300 не вставляются - выбрасывается исключение. Это происходит именно из-за blob поля. То есть, если не вставлять его - все проходит - ок.

Что посоветуете ? Blob поле это ограмные HTML файлы, на что там обращать внимание уже не знаю ?
Может есть альтернативный способ вставки blob"ов ?

Заранее благодарен.


frogl   (2003-11-10 13:47:00) [1]

Спасибо - то, что надо.


sniknik   (2003-11-09 16:57:00) [2]

:(
ADOQuery1 = msq_genQuery


sniknik   (2003-11-09 16:56:00) [3]

зря ушол от первого варианта (ИМХО),

....
try
//msq_genQuery.Parameters.ParamByName("messag").Value:=_messag;
ADOQuery1.Parameters[0].LoadFromFile("c:\axfc.tmp", ftMemo);
msq_genQuery.ExecSQL;
except
Inc(errorCount);
end;
и все (вроде ;о))
вот с этим проблем если в тексте " быть не должно, проверь другие пераметры которые прямо в запрос вставляются (особенно дату, не на ", а вообще).


frogl   (2003-11-09 14:25:00) [4]

Вот так (пока через файл) :

// выгружаем сообщение во внешний файл
messag:=cds.FieldByName("messag").AsString;
messag:=AnsiReplaceStr(messag, """", """);
file_stream:=TFileStream.Create("c:\axfc.tmp", fmCreate or fmOpenWrite);
file_stream.Write(PChar(messag)^, Length(messag));
file_stream.Free;

// Загрузка в БД
msq_blobwriter.SQL.Text:="select * from messages where forum_id=" +
IntToStr(cds.FieldByName("forum_id").AsInteger) +
" and message_name=""" +
cds.FieldByName("message_name").AsString +
"""";
msq_blobwriter.Close;
msq_blobwriter.Open;

if (msq_blobwriter.RecordCount > 0) then
begin
msq_blobwriter.Edit;
TBlobField(msq_blobwriter.FieldByName("messag")).LoadFromFile("c:\axfc.tmp");
msq_blobwriter.Post;
end;

blob_stream.Free;


sniknik   (2003-11-09 14:20:00) [5]

по идее для параметра все значение строка, есть там " или нет. т.е. должно работать. покажи как делаеш.


frogl   (2003-11-09 13:11:00) [6]

Переделал с помощью Stream - все равно ошибки при загрузке поля.
Удалось локализовать проблему - ошибки возникают в тех случаях, когда в загружаемом html есть строки вида - "<строка>"<строка>" - например "enter"ов".

Вот это не помогает:

_messag:=AnsiReplaceStr(_messag, """", """);

В принципе эти " " " можно было бы вообще заменить на " ", но это тоже нельзя, так как в html повсюду встречается строки вида color="red" и т.д.

Что посоветуете ?


sniknik   (2003-11-09 11:59:00) [7]

не обязательно, это поток а откуда из файла или из другого места (другого потока/из сети/...) неважно (до определенной степени ;о))).


frogl   (2003-11-09 11:31:00) [8]

Stream"ом является файл на диске ? То есть мне нужно сначала строку сохранить на диск, а томом с диска грузить в БД ?


sniknik   (2003-11-09 11:30:00) [9]

> Может есть альтернативный способ вставки blob"ов ?
LoadFromStream


Наверх

Титульная страница Поиск, карта сайта Написать письмо