![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Записть полей типа 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