Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1137665912
Ell
2006-01-19 13:18
2006.02.05
Можно ли сделать, чтобы программа удаляла сама себя?


2-1137664260
aleks_tav
2006-01-19 12:51
2006.02.05
Delphi7 и win2000


15-1137183247
tesseract
2006-01-13 23:14
2006.02.05
Выгорит ли reactos?


2-1137666070
olevacho_
2006-01-19 13:21
2006.02.05
Автоматическое переключение языка


2-1137479131
VitalikS
2006-01-17 09:25
2006.02.05
Rave





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский