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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
2-1137502635
pathfinder
2006-01-17 15:57
2006.02.05
Delphi&Excel


2-1137512430
Virtukon
2006-01-17 18:40
2006.02.05
Ускорение процесса добавления текста в TStrings


15-1137267202
Desdechado
2006-01-14 22:33
2006.02.05
Secure E-mail Service


2-1137508900
_white_
2006-01-17 17:41
2006.02.05
Как установить API?


2-1137836536
Clock
2006-01-21 12:42
2006.02.05
Часы