Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизЗаписть полей типа text в MS SQL Найти похожие ветки
← →
frogl (2003-11-09 11:26) [0]Добрый день.
Делаю вот так:
_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"ов ?
Заранее благодарен.
← →
sniknik (2003-11-09 11:30) [1]> Может есть альтернативный способ вставки blob"ов ?
LoadFromStream
← →
frogl (2003-11-09 11:31) [2]Stream"ом является файл на диске ? То есть мне нужно сначала строку сохранить на диск, а томом с диска грузить в БД ?
← →
sniknik (2003-11-09 11:59) [3]не обязательно, это поток а откуда из файла или из другого места (другого потока/из сети/...) неважно (до определенной степени ;о))).
← →
frogl (2003-11-09 13:11) [4]Переделал с помощью Stream - все равно ошибки при загрузке поля.
Удалось локализовать проблему - ошибки возникают в тех случаях, когда в загружаемом html есть строки вида - "<строка>"<строка>" - например "enter"ов".
Вот это не помогает:
_messag:=AnsiReplaceStr(_messag, """", """);
В принципе эти " " " можно было бы вообще заменить на " ", но это тоже нельзя, так как в html повсюду встречается строки вида color="red" и т.д.
Что посоветуете ?
← →
sniknik (2003-11-09 14:20) [5]по идее для параметра все значение строка, есть там " или нет. т.е. должно работать. покажи как делаеш.
← →
frogl (2003-11-09 14:25) [6]Вот так (пока через файл) :
// выгружаем сообщение во внешний файл
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 16:56) [7]зря ушол от первого варианта (ИМХО),
....
try
//msq_genQuery.Parameters.ParamByName("messag").Value:=_messag;
ADOQuery1.Parameters[0].LoadFromFile("c:\axfc.tmp", ftMemo);
msq_genQuery.ExecSQL;
except
Inc(errorCount);
end;
и все (вроде ;о))
вот с этим проблем если в тексте " быть не должно, проверь другие пераметры которые прямо в запрос вставляются (особенно дату, не на ", а вообще).
← →
sniknik (2003-11-09 16:57) [8]:(
ADOQuery1 = msq_genQuery
← →
frogl (2003-11-10 13:47) [9]Спасибо - то, что надо.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c