Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2012, 13:50   #1
d_adilet
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 49
По умолчанию Ошибка List index out of bounds или OutOfMemory

Добрый день уважаемый гуру,
Второй день бьюсь с ошибками по следующему коду:
Код:
 while not DMFm.OraQuery2.Eof do

            begin

              DMFm.IBTable1.Append;
              for i:=0 to 100 do DMFm.IBTable1.fields[i].Value:=DMFm.OraQuery2.fields[i].Value;
              DMFm.OraQuery2.Next;

              end;
              DMFm.IBTable1.Post;
Если делаю "for i:=0 to 100" то, тогда выходит ошибка "List index out of bounds"
а если "for i:=0 to DMFm.OraQuery2.FieldCount -1" то, тогда выходит ошибка "Out of memory"

Записей оч много..

В какую сторону копать?

P/S/ прошу сильно не пинать...я не программист просто любитель

Последний раз редактировалось d_adilet; 08.08.2012 в 14:14.
d_adilet вне форума Ответить с цитированием
Старый 08.08.2012, 14:14   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Соблюдается ли при "for i:=0 to DMFm.OraQuery2.FieldCount -1" условие
DMFm.IBTable1.FieldCount >= DMFm.OraQuery2.FieldCount
?
astecenko вне форума Ответить с цитированием
Старый 08.08.2012, 14:18   #3
d_adilet
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 49
По умолчанию

ну у меня в начале стоит (забыл указать)
Код:
if DMFm.OraQuery2.RecordCount > 0 then
а так на Ваше условие не проверяю....а надо?

Последний раз редактировалось d_adilet; 08.08.2012 в 14:20.
d_adilet вне форума Ответить с цитированием
Старый 08.08.2012, 14:40   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а если так:
Код:
if DMFm.OraQuery2.FieldsCount<> DMFm.IBTable1.FieldsCount
  then ShowMessage('Кол-во полей в источнике отличается от получателя')
  else 
  begin
  while not DMFm.OraQuery2.Eof do
  ...
  end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 08.08.2012, 15:05   #5
d_adilet
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
а если так:
Код:
if DMFm.OraQuery2.FieldsCount<> DMFm.IBTable1.FieldsCount
  then ShowMessage('Кол-во полей в источнике отличается от получателя')
  else 
  begin
  while not DMFm.OraQuery2.Eof do
  ...
  end;
я прошу прощения, я видать не правильно выразился...
я пытаюсь с помощью этого кода скопировать данные с серверной таблицы в локальную...структура таблиц идентична...
насколько я понял, получается что предложенный вами код
Код:
if DMFm.OraQuery2.FieldsCount<> DMFm.IBTable1.FieldsCount
будет всегда давать мне ShowMessage,
так как одна таблица пустая другая с данными...

или я чего то недопонимаю?

Заранее спасибо за помощь
d_adilet вне форума Ответить с цитированием
Старый 08.08.2012, 15:11   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
DMFm.OraQuery2.First;
while not DMFm.OraQuery2.Eof do begin
  DMFm.IBTable1.Append;
  for i:=0 to DMFm.OraQuery2.FieldCount-1 do
    DMFm.IBTable1.fields[i].Value:=DMFm.OraQuery2.fields[i].Value;
  DMFm.IBTable1.Post;
  DMFm.OraQuery2.Next;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.08.2012, 15:30   #7
d_adilet
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
DMFm.OraQuery2.First;
while not DMFm.OraQuery2.Eof do begin
  DMFm.IBTable1.Append;
  for i:=0 to DMFm.OraQuery2.FieldCount-1 do
    DMFm.IBTable1.fields[i].Value:=DMFm.OraQuery2.fields[i].Value;
  DMFm.IBTable1.Post;
  DMFm.OraQuery2.Next;
end;
Out of memory
Даже если вначале поставил
{$M 16777000}
d_adilet вне форума Ответить с цитированием
Старый 08.08.2012, 15:44   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Насколько много записей? Вполне возможно, что очень много для вашего компьютера
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.08.2012, 15:58   #9
d_adilet
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Насколько много записей? Вполне возможно, что очень много для вашего компьютера
порядка 500 000 строк
возможно да, слишком много...

можно как нибудь кусками копировать...?
d_adilet вне форума Ответить с цитированием
Старый 08.08.2012, 16:01   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
а если "for i:=0 to DMFm.OraQuery2.FieldCount -1" то, тогда выходит ошибка "Out of memory"

Записей оч много..

В какую сторону копать?
в сторону перехода отказа от IBTable и перехода на SQL. IBQuery.

примерная схема
Код:
IBqueryDest.SQL:='insert (....) values (...)'; // пишем параметризированный запрос на добавление (можно сделать еще на этапе конструктора( дизайнера) форм  )

while not IBQuerySource.EOF do begin  // здесь был IBQuery1 !!
// заполняем параметры (копируем поля из исходного запроса)
  IBQueryDest.parameters.... :=IBQuerysource.fileds.....; 
  ...........................................................
  IBQueryDest.ExecSQL; // выполняем  

  IBQuerySource.Next; 
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.08.2012 в 16:07.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка List index out of bounds (0) Natalie023 Помощь студентам 9 17.12.2011 19:27
Почему ошибка 'List index out of bounds (0)'? WandererX Общие вопросы Delphi 7 20.06.2010 11:17
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38