Последняя версия DataExpress 3 beta от 21 мая 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Вопрос по коду

Все о том как сделать что-то с помощью скриптов.
KoalaBear
Интересующийся
Сообщения: 171
Зарегистрирован: Сб сен 02, 2017 5:05 pm

Вопрос по коду

Сообщение KoalaBear » Пн дек 04, 2017 5:46 pm

Чертовщина какая-то. Собрал из примеров с форума и доработал под себя код на кнопку для одной из форм базы, который нормально и стабильно работает на моей домашней машине (Intel Celeron, 8GB оперативы, системы все на SSD, но база и файлы программы на обычном HDD 5400 rpm) - в Linux под Wine, на виртуальной WinXP SP3, на реальной Win10. Базу открываю локально. Версия свежая, portable. Беру на флешке всё это добро и несу на производство, копирую на винт, запускаю - НЕ работает, виснет наглухо код, до принудительного завершения процесса. Виснет на двух живых XP sp3 (на пне с 2GB RAM), виснет на свежеустановленной Win7 pro, тоже на пеньке i3 c 8 GB памяти.
Навтыкал сообщений вывода в код, чтобы увидеть, где происходит затык - увидел, но не понял, почему это происходит. Вот мой, с позволения сказать, код:

Код: Выделить всё

procedure Fill(sender:TObject);
var Fm:TdxForm;
begin
      debug('1');
 Fm:=CreateForm('Temp');
      debug('2');
 Fm.OpenRecord(1);
      debug('3');
 Fm.Edit;
      debug('4');
 //dxQueryGrid2.Refresh;
      debug('5');
 while not Fm.forms['Temp_свои пункты'].Eof do
  begin
   Fm.forms['Temp_свои пункты'].Delete;
  end;
      debug('6');
 self.Queries['Пункты счета'].MoveFirst;
 while not self.Queries['Пункты счета'].Eof do
  begin
      debug('7');
   with Fm.forms['Temp_свои пункты'] do
    begin
     Append;
      debug('8');
     Fields['Название для счета'] := self.Queries['Пункты счета']['Название для счета'];
     Fields['Наименование'] := self.Queries['Пункты счета']['Наименование'];
     Fields['Количество'] := self.Queries['Пункты счета']['Количество'];
     Fields['Цена'] :=self.Queries['Пункты счета']['Цена'];
     Fields['Дата'] :=self.Queries['Пункты счета']['Дата'];
     Fields['Тип работ'] :=self.Queries['Пункты счета']['Тип работ'];
      debug('9');
     Post;
      debug('10');
    end;
      debug('перед MoveNext');// последнее, что выводит дебагер
   self.Queries['Пункты счета'].MoveNext;// загвоздка, как я понимаю, тут.
      debug('перешли к следующей');// 'это уже дебагер не выводит(((
   end;
      debug('Заполнили форму');
 Fm.Post;
      debug('Fm.Post');
 Fm.Close;
      debug('Fm.Close;');
 DestroyForm(Fm);
      debug('DestroyForm(Fm);');
 self.Queries['Запрос433'].Refresh;//Обновляем второй запрос (По заполненной таблице)
      debug('self.Queries["Запрос433"].Refresh;');
 while not Self.forms['свои пункты'].Eof do
  begin
   Self.forms['свои пункты'].Delete;
  end;
      debug('Self.forms["свои пункты"].Delete;');
 while not dxQueryGrid1.Eof do
  begin
   with Self.forms['свои пункты'] do
    begin
    Append;
      debug('Append;');
     Fields['Название для счета'] := dxQueryGrid1['Название для счета'];
     Fields['Наименование'] := dxQueryGrid1['Наименование'];
     Fields['Количество'] := dxQueryGrid1['Количество'];
     Fields['Цена'] :=dxQueryGrid1['Цена'];
      debug('заполнили');
     Post;
     debug('сохранили');
    end;
   dxQueryGrid1.MoveNext;
  end;
      debug('Self.forms["свои пункты"] do');
 Self.forms['свои пункты'].MoveFirst;
end;
end;


Уважаемые Гуру! Не видно ли так, навскидку, очевидной, лежащей на поверхности ошибки? И почему она проявляется так избирательно?

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

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3375
Зарегистрирован: Чт апр 13, 2017 8:57 am
Контактная информация:

Re: Вопрос по коду

Сообщение YurAnt » Пн дек 04, 2017 6:33 pm

Я в этом кодэ добрался аж до отсутствующего запроса 433 (несмотря на то, что код выше этого участка по идее вообще не должен был отработать). Похоже в студию надо с мясом и кишками Ваш проблемный участок...

KoalaBear
Интересующийся
Сообщения: 171
Зарегистрирован: Сб сен 02, 2017 5:05 pm

Re: Вопрос по коду

Сообщение KoalaBear » Пн дек 04, 2017 6:42 pm

Запрос433 это dxQueryGrid1, просто в процессе поиска причины зависания от безысходности пробовал уже по-разному обращаться к запросам. Как ни странно, на моей машине код отрабатывает...

Аватара пользователя
admin
Разработчик
Сообщения: 3474
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Вопрос по коду

Сообщение admin » Пн дек 04, 2017 7:39 pm

Код должен работать. Без базы трудно понять почему происходит зависание.


Вернуться в «Общие вопросы.»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость