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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2018, 15:46   #1
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию Error 1400 "Недопустимый дескриптор окна"

Вчера написал код в потоке, все работало. Оставил на свой страх и риск на ночь - все отлично! Сегодня дописывал код но в других процедурах, и только касательно записи и чтения ини файлов. Откомпилировал и "Error 1400 "Недопустимый дескриптор окна"?!?! Не могу понять что произошло?!
Код:
procedure TMyThread.Execute;
var
  d, t: TDateTime;
  q, z: Integer;
  s, log: String;
  r: Real;
begin
  t:=Time;
  CoInitialize(Nil);
  log:='';
  DecimalSeparator := '.';

  ///////////
  //Беневка//
  ///////////
  if Form1.CheckBox7.Checked = True then
  begin
    //Создаем подключение
    MySQLClient := TMySQLClient.Create;
    //Подключаемся к БД МЕЙС
    MySQLClient.Connect('192.168.31.2', 'kopy', '',
      'eis_rad_type02_chrmews_s008', 3306, '', false, 0);

    //Запрос на последнюю запись в БД МЕЙС
    MySQLResult := MySQLClient.Query('SELECT EIS_D_T FROM e166 ORDER BY EIS_D_T DESC LIMIT 1', True, OK);
    //Формируем запрос в БД ДатаЕксперт
    Form1.Memo1.Clear;
    s:=MySQLResult.FieldValueByName('EIS_D_T');
    s:=s[5]+s[6]+'.'+s[7]+s[8]+'.'+s[1]+s[2]+s[3]+s[4]+' '+
      s[9]+s[10]+':'+s[11]+s[12]+':'+s[13]+s[14];
    Form1.Memo1.Lines.Add('SELECT MS.MIid, MS.MTime, dbo.V_GT_MV.DRA');
    Form1.Memo1.Lines.Add('FROM dbo.MS,dbo.V_GT_MV');
    Form1.Memo1.Lines.Add('WHERE MS.Msid = dbo.V_GT_MV.Msid ');
    Form1.Memo1.Lines.Add('AND MS.MIid='+Form1.Edit7.Text);
    Form1.Memo1.Lines.Add('AND MS.MTime>'''+s+'''');
    Form1.Memo1.Lines.Add('ORDER BY (MS.MTime)');

    //Выполняем запрос в БД ДатаЕксперт
    Form1.ADODataSet1.Active:=False;
    Form1.ADODataSet1.CommandText:=Form1.Memo1.Text;
    Form1.ADODataSet1.Active:=True;
    q:=Form1.DBGrid1.DataSource.DataSet.RecordCount;

    //Формируем запросы на запись в БД МЕЙС
    if Form1.DBGrid1.DataSource.DataSet.RecordCount > 0 then
    begin
      Form1.ADODataSet1.RecNo:=1;
      for z:=1 to q do
      begin
        Form1.Memo1.Clear;
        Form1.Memo1.Lines.Add('INSERT INTO e166 (DOSERATE, EIS_D_T) VALUES (');
        r:=StrToFloat(Form1.ADODataSet1.Fields[2].Value)/1000000000;
        d:=StrToDateTime(Form1.ADODataSet1.Fields[1].Value);
        s:=FormatDateTime('yyyymmddhhmmss', d);
        Form1.Memo1.Lines.Add(''''+FloatToStr(r)+''', '''+s+''')');
        Form1.ADODataSet1.RecNo:= Form1.ADODataSet1.RecNo+1;

        //Записываем в БД МЕЙС
        MySQLResult := MySQLClient.Query(Form1.Memo1.Text, True, OK);
      end;
    end;

    //Убиваем подключение к БД МЕЙС
    MySQLClient.Free;
    if MySQLResult <> nil then
    MySQLResult.Free;

    log:= log+' Беневка('+IntToStr(q)+')';
  end;

  //Выводим лог
  t:=Time-t;
  Form1.Memo2.Lines.Add(TimeToStr(Time)+' Скопировано('+FormatDateTime('ss.zzz', t)+'сек):'+log);
end;
Первый поток отрабатывает замечательно!
Повторный выдает ошибку с отсылкой на ЛЮБУЮ строку следующую за "Form1.ADODataSet1.Active:=True ;"
Этот-же код идеально работает на кнопке или таймере...
В чем может быть затык? Встречал на форумах подобные обсуждения, но там во всех случаях люди динамически создавали компоненты, потому и ошибки вылетали. У меня то что не так?
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 09.07.2018, 17:13   #2
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Я просто в недоумении?!
Вспоминал чего я сегодня такого понаписывал...
Решил (на авось) вернуть компоненту Memo1 свойство Визибл в True....
Ошибка исчезла!
КАК? Я чего то не понимаю? Каким боком тут свойство визибл?
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 09.07.2018, 17:21   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Недопустимый хендл какого-то окна, возможно и скорее всего наведенная ошибка из-за игнорирования синхронизации c объектами vcl
Цитата:
Ошибка исчезла!
временно )) Будешь игнорировать синхронизацию обязательно еще что-нибудь вылезет. Не сегодня, так завтра ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 09.07.2018 в 17:25.
Аватар вне форума Ответить с цитированием
Старый 09.07.2018, 18:05   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

почитать
http://www.programmersforum.ru/showthread.php?t=207640

http://www.realcoding.net/articles/p...-v-delphi.html
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
unit1.pas(44,1) Fatal Syntax Error "." expected but "BEGIN" found Maksym Yevtusenko Помощь студентам 1 25.04.2018 18:59
lazarus, выдёт ошибку, Fatal: Syntax error, "BEGIN" expected but "end of file" found. Артём14 Lazarus, Free Pascal, CodeTyphon 3 12.11.2016 18:35
System Error. Code 1400. Недопустимый дескриптор окна aesoem Работа с сетью в Delphi 1 21.08.2015 15:21
Недопустимый дескриптор окна Pearl777 Общие вопросы Delphi 3 03.03.2013 19:57
EOSError 1400 "Недопустимый дескриптор окна" Crystallon Общие вопросы Delphi 5 21.06.2011 11:41