Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка в ADOQuery / 5 сообщений из 5, страница 1 из 1
24.04.2014, 14:23
    #38624632
duh_si
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в ADOQuery
Здравствуйте..
Вот состряпал такой код, который узнает имя пользователя компа, потом берет его номер из таблицы БД и выдает ему Сообщения(если есть) с новостью

Код на Форме 1(MessageNews)
тут вроде все верно работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
void __fastcall TMessageNews::Timer1Timer(TObject *Sender)
{
 TRegistry *reg = new TRegistry();
 reg->RootKey = HKEY_LOCAL_MACHINE;
 reg->OpenKeyReadOnly("SYSTEM\\CurrentControlSet\\services\\LanmanServer\\Parameters");
 AnsiString opis;
 opis = reg->ReadString("srvcomment");   //имя в описании компа
 //ShowMessage(opis);
 reg->CloseKey();
 delete reg;
 
 DataModuleABS->ADOQueryEmployee->Active = true;
 DataModuleABS->ADOQueryEmployee->Close();
 DataModuleABS->ADOQueryEmployee->SQL->Clear();
 DataModuleABS->ADOQueryEmployee->SQL->Add("Select Код From dbo.Employee Where Фамилия = '"+opis+"'");
 DataModuleABS->ADOQueryEmployee->Open();
 Way = DataModuleABS->ADOQueryEmployee->FieldByName("Код")->AsInteger;
 //Доработать: если Way = 0, выдать сообщение, чтобы пользователь ввел свое имя в описании
 
 DataModuleABS->ADOQueryZakaz->Active = true;
 DataModuleABS->ADOQueryZakaz->Close();
 DataModuleABS->ADOQueryZakaz->SQL->Clear();
 DataModuleABS->ADOQueryZakaz->SQL->Add("Select Заказ FROM dbo.ТипНовости INNER JOIN (dbo.EmployeeNews INNER JOIN dbo.ВременТабл ON dbo.EmployeeNews.ТипНовости = dbo.ВременТабл.ТипНовости) ON dbo.ТипНовости.Код = dbo.ВременТабл.ТипНовости WHERE dbo.ВременТабл.idUser="+IntToStr(Way)+" AND dbo.ВременТабл.ОтменаПоказа = 1 AND dbo.EmployeeNews.Сотрудник="+IntToStr(Way));
 DataModuleABS->ADOQueryZakaz->Open();
 nomerZak = DataModuleABS->ADOQueryZakaz->FieldByName("Заказ")->AsInteger ;
 
 if ( nomerZak == 0)
   {
 Timer1->Interval = 25000;
   }
 else
   {
  DataModuleABS->ADOQueryNews->Active = true;
  DataModuleABS->ADOQueryNews->Close();
  DataModuleABS->ADOQueryNews->SQL->Clear();
  DataModuleABS->ADOQueryNews->SQL->Add("Select Сообщение From dbo.ВременТабл Where ОтменаПоказа = 1 AND idUser="+IntToStr(Way));
  DataModuleABS->ADOQueryNews->Open();
  strNews = DataModuleABS->ADOQueryNews->FieldByName("Сообщение")->AsString;
 
 FormMessag->Timer1->Interval = 1000;
 FormMessag->Timer1->Enabled = true;
 Timer1->Interval = 15000;
 FormMessag->Show();
   }
}




На второй форме(FormMessag), вот такой код, который после просмотра сообщения с новостью, делает ОтменаПоказа = 0 в БД, чтобы эта запись больше не появлялась..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 void __fastcall TFormMessag::Timer3Timer(TObject *Sender) 
//Какой то код
 
 DataModuleABS->ADOQueryNewsUpDate->Active = true;
 DataModuleABS->ADOQueryNewsUpDate->Close();
 DataModuleABS->ADOQueryNewsUpDate->SQL->Clear();
 DataModuleABS->ADOQueryNewsUpDate->SQL->Add("Update dbo.ВременТабл Set ОтменаПоказа = 0 Where Заказ ="+IntToStr(nomerZak)); //ОтменаПоказа <> 0 AND idUser="+IntToStr(Way));
 DataModuleABS->ADOQueryNewsUpDate->ExecSQL();
  //Close();
}



Вот тут у меня собственно и возникает ошибка, допустим записей в таблице 2, первую показал запись ( все нормально ), и в БД ОтменаПоказа сделал 0, т.е теперь эта запись выводиться не будет, а вот когда показал вторую и подходит время выполнить этот код, то
Выдает ошибку( См.рис ) вот на эту строку
Код: plaintext
1.
 DataModuleABS->ADOQueryNewsUpDate->Close();



Project Project1.exe raised exception class EDatabaseError with message 'ADOQueryNews: CommandText does not return a result set'.

Подскажите что не так делаю, почему она возникает???
...
Рейтинг: 0 / 0
24.04.2014, 16:39
    #38624919
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в ADOQuery
duh_siВыдает ошибку( См.рис ) вот на эту строку
Код: plaintext
1.
 DataModuleABS->ADOQueryNewsUpDate->Close();

А в чем смысл этой команды?

duh_si Project Project1.exe raised exception class EDatabaseError with message 'ADOQueryNews: CommandText does not return a result set'.

Подскажите что не так делаю, почему она возникает???Тебе перевести текст ошибки или сам словарь найдешь?
...
Рейтинг: 0 / 0
24.04.2014, 18:46
    #38625053
duh_si
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в ADOQuery
авторWhite Owl Тебе перевести текст ошибки или сам словарь найдешь?
Если не затруднит, то перевести и если не затруднит с объяснением что делаю не так
...
Рейтинг: 0 / 0
24.04.2014, 19:11
    #38625074
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в ADOQuery
Перевожу

>>CommandText does not return a result set

CommandText не вернул набор данных.
...
Рейтинг: 0 / 0
24.04.2014, 20:00
    #38625103
duh_si
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка в ADOQuery
londinium Спасибо за перевод и подробное объяснение
Разобрался со своей проблемой..
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка в ADOQuery / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]