Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Out of Memory error After Post in FB table [D6]


DelphiN! ©   (2005-12-07 08:18:00) 

Ситуация такая, есть программа каторая принимает данные с почты, отбрабатывает их, а далее заносит в таблицу БД. Когда программа заносит почту в базу с локального почтового сервера все проходит нормально, но если качает почту из Интернета, при попытке добавить данные в таблицу вылетает ошибка 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;


Данные в письмах на обоих почтовиках одиноковые.


DelphiN!   (2005-12-07 12:52:00) [1]


> [9] Johnmen ©   (07.12.05 11:56)
> >DelphiN! ©   (07.12.05 11:53) [8]

> Это значит ошибка при формировании запроса. Неверной длины
> строку хочешь запихнуть туда, куда она пролезть не может
> в принципе...:)


Точно! :)


Johnmen   (2005-12-07 11:56:00) [2]

>DelphiN! ©   (07.12.05 11:53) [8]
>Если через запрос добавляю слишком длинную строку мне выдает
>сообщение об ошибке Numeric overflow or string transaction ...

Это значит ошибка при формировании запроса. Неверной длины строку хочешь запихнуть туда, куда она пролезть не может в принципе...:)


DelphiN!   (2005-12-07 11:53:00) [3]


>  [6] Johnmen ©   (07.12.05 09:51)


Если через запрос добавляю слишком длинную строку мне выдает сообщение об ошибке Numeric overflow or string transaction ...


> Массив динамический. С его индексами ты работаешь неверно,
> ибо они всегда с 0. И где динамическое определение размерности
> ?


Почему работаю неверно? А вообще я уже убрал массив(решил загружать по одному письму), теперь загружаю одно письмо, обрабатываю, а потом удаляю и загружаю в ту же переменную idMessage следующее


sniknik   (2005-12-07 11:42:00) [4]

> Раньше я вставлял через запрос ibQuery, но в некоторых ситуациях запрос был очень длинный, и добавить запись
> не поличалось
... как может быть длинным запрос в одной и ситуации и нормального размера в другой?
параметров не используеш? начни.


Johnmen   (2005-12-07 09:51:00) [5]

Пардон. Не динамический :) Это я ещё не проснулся........


Johnmen   (2005-12-07 09:50:00) [6]

>ну, array[0..100] of TIDMessage;
>Утечки из-за этого быть не может, так как далее массив освобождается

Массив динамический. С его индексами ты работаешь неверно, ибо они всегда с 0. И где динамическое определение размерности ?

>Так говорю же запрос получается слишком длинным, так как в некоторых
>параметрах может быть целое предложение.

Ну ты сам выбирай, что тебе важнее, тормоза и ошибка или слишком длинный запрос :)))


DelphiN!   (2005-12-07 09:33:00) [7]


> Хм... Отсюда
> idMessage[i] := TidMessage.Create(nil);
> видно несколько иное...:)


ну, array[0..100] of TIDMessage;
Утечки из-за этого быть не может, так как далее массив освобождается


> 2. Делай, как раньше. Это правильно. А как сейчас - это,
> мягко говоря, не того....


Так говорю же запрос получается слишком длинным, так как в некоторых параметрах может быть целое предложение.


Johnmen   (2005-12-07 09:20:00) [8]

>DelphiN! ©   (07.12.05 09:12) [2]
>> 1. Что есть idMessage ?
>TIdMessage

Хм... Отсюда
idMessage[i] := TidMessage.Create(nil);
видно несколько иное...:)

2. Делай, как раньше. Это правильно. А как сейчас - это, мягко говоря, не того....


DelphiN!   (2005-12-07 09:12:00) [9]


>  [1] Johnmen ©   (07.12.05 09:00)
> 1. Что есть idMessage ?


TIdMessage

2. Чтобы добавить запись в тбл, нет необходимости всю эту тбл тащить на клиента. Ку ?


Раньше я вставлял через запрос ibQuery, но в некоторых ситуациях запрос был очень длинный, и добавить запись не поличалось


Johnmen   (2005-12-07 09:00:00) [10]

1. Что есть idMessage ?
2. Чтобы добавить запись в тбл, нет необходимости всю эту тбл тащить на клиента. Ку ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо