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

Запросы в ADOQuery

23.04.2014, 10:10. Показов 1308. Ответов 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
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
24.04.2014, 23:01
Сдается мне, что эта строчка просто лишняя...
C++
1
DataModuleABS->ADOQueryNewsUpDate->Active = true;
1
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru