![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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. Чтобы добавить запись в тбл, нет необходимости всю эту тбл тащить на клиента. Ку ?