Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912

Запросы в ADOQuery

23.04.2014, 10:10. Показов 1323. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток..
Делаю тут не большую программку для работы с БД ( MS SQL ).
Возникли следующие вопросы:
1. Это проблема с синтаксисом в запросах
Вот такой запрос
C++
1
  DataModuleABS->ADOQueryNews->SQL->Add("Select Сообщение From dbo.ВременТабл Where ОтменаПоказа <> 0 AND idUser="+IntToStr(Way));
ОтменаПоказа - логическое поле
Собственно сам вопрос: т.к у меня MS SQL то возвращается не true и false, а -1 и 0
По условию, мне нужно брать записи именно true( -1 )
Если я пишу Where ОтменаПоказа = -1 то ни какого результата я не получаю
Вышел из проблемы, таким образом: Where ОтменаПоказа <> 0 , НО правильно ли так писать???
Вот это вопрос и не дает мне ни как покоя, как правильно писать ОтменаПоказа = -1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.04.2014, 10:10
Ответы с готовыми решениями:

Запросы в ADOQuery
У меня есть вопрос как сделать чтобы два запроса выполнялись в ADOQuery:вот этот на дату: ADOQuery1.SQL.Add(SELECT * FROM &quot;Выдача...

Запросы на SQL в ADOQuery
Здравствуйте, в очередной раз прошу Вашей мудрой помощи. Пытаюсь написать запрос на Sql для компонента ADOQuery. Смысл такой,...

Запросы через ADOQuery
В общем есть БД в MS SQL SERVER и ADOQuery на форме в Delphi. В общем, хочется сделать возможность написания запросов к БД на отдельной...

3
569 / 169 / 22
Регистрация: 18.10.2012
Сообщений: 912
24.04.2014, 08:55  [ТС]
На вопрос выше, ответ нашел..

Второй вопрос:
Вот состряпал такой код, который узнает имя пользователя компа, потом берет его номер из таблицы БД и выдает ему Сообщения(если есть) с новостью

Код на Форме 1(MessageNews)
тут вроде все верно работает
Кликните здесь для просмотра всего текста
C++
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 в БД, чтобы эта запись больше не появлялась..
Кликните здесь для просмотра всего текста
C++
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, т.е теперь эта запись выводиться не будет, а вот когда показал вторую и подходит время выполнить этот код, то
Выдает ошибку( См.рис ) вот на эту строку
C++
1
 DataModuleABS->ADOQueryNewsUpDate->Close();
Подскажите что не так делаю, почему она возникает???
Миниатюры
Запросы в ADOQuery  
0
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,411
Записей в блоге: 3
24.04.2014, 23:01
Сдается мне, что эта строчка просто лишняя...
C++
1
DataModuleABS->ADOQueryNewsUpDate->Active = true;
1
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,411
Записей в блоге: 3
24.04.2014, 23:07
Смоделировал ситуацию - вот что у меня выдает, так понятнее будет, почему ее не надо
Миниатюры
Запросы в ADOQuery  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2014, 23:07
Помогаю со студенческими работами здесь

Запросы к БД через ADOQuery
Прошу помощи в нахождении и исправлении ошибки. Существует проект Delphi связанный с БД Access, в которой несколько таблиц. Связь через...

Запросы в ADOQuery и DBGrid
Привет, подскажите как сделать правильно, ибо уже перерылись все книги бестолку( У меня есть edit в который вводит пользователь номер...

Сложные SQL запросы в adoquery
Здравствуйте, подскажите пожалуйста как выполнять сложные запросы типа declare p_zaiav varchar(255); p_stors varchar(255); ...

Запрос ADOQuery внутри другого ADOQuery реален?
Помогите сформировать запрос для двух ADOQuery. Есть 2 таблицы БД mssql: sotrudniki , table_hlp(Вспомогательная таблица для делания...

Обращение в ADOquery к ADOquery
Доброго времени суток. Вопрос заключается в следующем: Имеется подключенная бд *.mdb к delphi В delphi есть запрос на основе одной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru