Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: CL | DM;

Вниз

Записть полей типа 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-89825
Slym
2003-11-14 10:49
2003.11.27
Большие целые числа (128бит) и математические операции с ними


14-90074
Stas
2003-11-05 12:12
2003.11.27
Структура EXE файла


14-90084
hawkins
2003-11-05 08:51
2003.11.27
Проблема при запуске программы Regmon


6-90036
delpher_gray
2003-09-29 12:27
2003.11.27
Приём команд/файлов


1-89837
td
2003-11-13 20:31
2003.11.27
WordApplication1.Selection.Collapse(Direction)