Форум: "Базы";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизOut of Memory error After Post in FB table Найти похожие ветки
← →
DelphiN! © (2005-12-07 08:18) [0]Ситуация такая, есть программа каторая принимает данные с почты, отбрабатывает их, а далее заносит в таблицу БД. Когда программа заносит почту в базу с локального почтового сервера все проходит нормально, но если качает почту из Интернета, при попытке добавить данные в таблицу вылетает ошибка Out of Memory.
Не могу понять, почему такое происходит.
Вот код принятия почты :
mc := DATA.idPOP3.CheckMessages;
for i := 1 to mc do
begin
if idMessage[i] = nil then
idMessage[i] := TidMessage.Create(nil);
IdMessage[i].Clear;
DATA.idPOP3.Retrieve(i, IdMessage[i]);
end;
for i := 1 to mc do
begin
DATA.ProgressMail(IdMessage[i]);
DATA.idPOP3.Delete(i);
end;
Далее идет выборка и обработка необходимых данных, а после все заносится в таблицу с помощью следующей процедуры :
procedure InsertIntoState(Value,_Type, _Time, City,Organization,Period: String);
var
s: String;
begin
s := """"+Value+""", """+_Type+""", """+_Time+""", """+City+""", """+Organization+""", """+Period+""", NULL";
if not State2.Active then
State2.Open;
State2.Append;
State2.FieldByName("Value_").AsString := Value;
State2.FieldByName("TYPE_").AsString := _Type;
State2.FieldByName("Time_").AsString := _Time;
State2.FieldByName("City_").AsString := City;
State2.FieldByName("Organization_").AsString := Organization;
State2.FieldByName("Period_").AsString := Period;
State2.FieldByName("ID_").AsInteger := 0;
State2.Post; //Out of memory вылетает тут
end;
Данные в письмах на обоих почтовиках одиноковые.
← →
Johnmen © (2005-12-07 09:00) [1]1. Что есть idMessage ?
2. Чтобы добавить запись в тбл, нет необходимости всю эту тбл тащить на клиента. Ку ?
← →
DelphiN! © (2005-12-07 09:12) [2]
> [1] Johnmen © (07.12.05 09:00)
> 1. Что есть idMessage ?
TIdMessage
2. Чтобы добавить запись в тбл, нет необходимости всю эту тбл тащить на клиента. Ку ?
Раньше я вставлял через запрос ibQuery, но в некоторых ситуациях запрос был очень длинный, и добавить запись не поличалось
← →
Johnmen © (2005-12-07 09:20) [3]>DelphiN! © (07.12.05 09:12) [2]
>> 1. Что есть idMessage ?
>TIdMessage
Хм... ОтсюдаidMessage[i] := TidMessage.Create(nil);
видно несколько иное...:)
2. Делай, как раньше. Это правильно. А как сейчас - это, мягко говоря, не того....
← →
DelphiN! © (2005-12-07 09:33) [4]
> Хм... Отсюда
> idMessage[i] := TidMessage.Create(nil);
> видно несколько иное...:)
ну, array[0..100] of TIDMessage;
Утечки из-за этого быть не может, так как далее массив освобождается
> 2. Делай, как раньше. Это правильно. А как сейчас - это,
> мягко говоря, не того....
Так говорю же запрос получается слишком длинным, так как в некоторых параметрах может быть целое предложение.
← →
Johnmen © (2005-12-07 09:50) [5]>ну, array[0..100] of TIDMessage;
>Утечки из-за этого быть не может, так как далее массив освобождается
Массив динамический. С его индексами ты работаешь неверно, ибо они всегда с 0. И где динамическое определение размерности ?
>Так говорю же запрос получается слишком длинным, так как в некоторых
>параметрах может быть целое предложение.
Ну ты сам выбирай, что тебе важнее, тормоза и ошибка или слишком длинный запрос :)))
← →
Johnmen © (2005-12-07 09:51) [6]Пардон. Не динамический :) Это я ещё не проснулся........
← →
sniknik © (2005-12-07 11:42) [7]> Раньше я вставлял через запрос ibQuery, но в некоторых ситуациях запрос был очень длинный, и добавить запись
> не поличалось
... как может быть длинным запрос в одной и ситуации и нормального размера в другой?
параметров не используеш? начни.
← →
DelphiN! © (2005-12-07 11:53) [8]
> [6] Johnmen © (07.12.05 09:51)
Если через запрос добавляю слишком длинную строку мне выдает сообщение об ошибке Numeric overflow or string transaction ...
> Массив динамический. С его индексами ты работаешь неверно,
> ибо они всегда с 0. И где динамическое определение размерности
> ?
Почему работаю неверно? А вообще я уже убрал массив(решил загружать по одному письму), теперь загружаю одно письмо, обрабатываю, а потом удаляю и загружаю в ту же переменную idMessage следующее
← →
Johnmen © (2005-12-07 11:56) [9]>DelphiN! © (07.12.05 11:53) [8]
>Если через запрос добавляю слишком длинную строку мне выдает
>сообщение об ошибке Numeric overflow or string transaction ...
Это значит ошибка при формировании запроса. Неверной длины строку хочешь запихнуть туда, куда она пролезть не может в принципе...:)
← →
DelphiN! © (2005-12-07 12:52) [10]
> [9] Johnmen © (07.12.05 11:56)
> >DelphiN! © (07.12.05 11:53) [8]
> Это значит ошибка при формировании запроса. Неверной длины
> строку хочешь запихнуть туда, куда она пролезть не может
> в принципе...:)
Точно! :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c