Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 15
RAD XE3+

Locate в ADOQuery

10.04.2018, 23:31. Показов 2470. Ответов 5
Метки бд (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. У меня бд, где нужно сделать запрет записи на экскурсию, если количество человек превышает 30. Надо проверить условие: если название экскурсии и дата совпадают с тем, куда хочет записаться пользователь, то в поле 'кол-во' должна считаться сумма уже записанных. Если больше 30, то записаться нельзя, иначе можно. Помогите найти ошибку или предложите вариант другой записи. В моем коде можно записаться в любом случае, где проблема не знаю...
Delphi
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
procedure TForm1.v_tabl2Click(Sender: TObject);
var
 recordExists, flag, keyexists:boolean;
 kol:integer;
begin
kol:=0;
keyexists:=true;
recordexists:=true;
flag:=false;
 if (familia.Text<>'') and (kol_vo.Text<>'') then
 begin
 
   while not form3.ADOQuery_zap.Eof do
    begin
   if not Form3.ADOQuery_zap.Locate('Экскурсия', VarArrayOf([usl_zap.Text]),[]) then
    recordExists:=false;
    if recordExists then
    if (usl_zap.Text=form3.ADOQuery_zap.Fields[1].Value)  then
     flag:=true;
 
  if keyexists and flag then
     begin
      kol:=kol+strtoint(form3.ADOQuery_zap.FieldByName('Кол-во').Value);
      showmessage(inttostr(kol));//проверка
 
      end
     else
       begin
      Form3.ADOQuery_zap.Insert;
       Form3.ADOQuery_zap.FieldByName('Фамилия').Value := familia.Text;
       Form3.ADOQuery_zap.FieldByName('Экскурсия').Value:=usl_zap.Text;
       Form3.ADOQuery_zap.FieldByName('Кол-во').Value := strtoint(kol_vo.Text);
       Form3.ADOQuery_zap.FieldByName('Стоимость').Value := usl_cost.Text;
       form3.ADOQuery_zap.FieldByName('Дата').Value:=DBdata.Text;
       Form3.ADOQuery_zap.FieldByName('Телефон').Value:=(Edit_tel.Text);
       Form3.ADOQuery_zap.Post;
       v_tabl2.Checked:=false;
       v_tabl2.Enabled := false;
    end;
    exit;
   end;
    showmessage('234  '+inttostr(kol));//проверка
  if kol<31 then
     begin
       Form3.ADOQuery_zap.Insert;
       Form3.ADOQuery_zap.FieldByName('Фамилия').Value := familia.Text;
       Form3.ADOQuery_zap.FieldByName('Экскурсия').Value:=usl_zap.Text;
       Form3.ADOQuery_zap.FieldByName('Кол-во').Value := strtoint(kol_vo.Text);
       Form3.ADOQuery_zap.FieldByName('Стоимость').Value := usl_cost.Text;
       form3.ADOQuery_zap.FieldByName('Дата').Value:=DBdata.Text;
       Form3.ADOQuery_zap.FieldByName('Телефон').Value:=(Edit_tel.Text);
       Form3.ADOQuery_zap.Post;
       v_tabl2.Checked:=false;
       v_tabl2.Enabled := false;
 
     end
    else
      begin
       showmessage('Нет мест на данную экскурсию');
      exit;
      end;
 
 end;
end;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.04.2018, 23:31
Ответы с готовыми решениями:

Locate в ADOQuery
Добрый день, форумчане. Вчера столкнулся с чем-то мне неизвестным пока что. Когда открываю запросом одну таблицу Locate ищет данные...

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

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

5
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
11.04.2018, 06:33
А почему сразу запросом не получать эти данные, зачем огород-то городить и работать с компонентом Query как с Table?
0
5968 / 4544 / 1094
Регистрация: 29.08.2013
Сообщений: 28,168
Записей в блоге: 3
11.04.2018, 07:15
Цитата Сообщение от lercha33444 Посмотреть сообщение
if (familia.Text<>'') and (kol_vo.Text<>'') then
*begin
тут лучше делать наоборот
Delphi
1
2
3
4
5
if (Trim(familia.Text)='') and (kol_vo.Text='') then
begin
  Showmessage(сообщение);
  exit
end;
сразу обработка ошибок и сообщение и избавляешься от лишнего if

Цитата Сообщение от lercha33444 Посмотреть сообщение
Надо проверить условие: если название экскурсии и дата совпадают с тем, куда хочет записаться пользователь, то в поле 'кол-во' должна считаться сумма уже записанных. Если больше 30, то записаться нельзя, иначе можно
Delphi
1
2
3
4
5
query.sql.text:='select Название, sum(Количество) from T where Название=:n and дата=:d group b Название';
query.parameters.ParamByName['n'].value:=
query.parameters.ParamByName['d'].value:=
query.open;
if query.Fields[1].asInteger>31 then ..
1
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 15
11.04.2018, 09:43  [ТС]
Delphi
1
2
3
4
Form3.ADOQuery_zap.SQL.Text:='select Экскурсия,Дата, sum(Кол-во) from zapis where Экскурсия:=n and Дата:=d group b Экскурсия';
   Form3.ADOQuery_zap.parameters.ParamByName('n').value:=usl_zap.Text;
   Form3.ADOQuery_zap.parameters.ParamByName('d').value:=DBdata.Text;
   Form3.ADOQuery_zap.open;
Не находит параметры 'n' и 'b'. C parameters работала мало, поэтому возникает вопрос: Как правильно записать этот запрос?
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,399
Записей в блоге: 3
11.04.2018, 10:04
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Я лично эти параметры тоже не люблю, поэтому всегда без них пишу...
Delphi
1
Form3.ADOQuery_zap.SQL.Text:= Format('select [Экскурсия], [Дата], sum([Кол-во]) from zapis where ([Экскурсия]=%s) and ([Дата]=%s group by [Экскурсия]', [QuotedStr(usl_zap.Text), QuotedStr(DBdata.Text)]);
Добавлено через 2 минуты
lercha33444, но, тем не менее, обратите внимание, как писал qwertehok,
Цитата Сообщение от qwertehok Посмотреть сообщение
дата=:d
и как пишите Вы
Цитата Сообщение от lercha33444 Посмотреть сообщение
Дата:=d
0
0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 15
11.04.2018, 11:29  [ТС]
спасибо, очень выручили
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.04.2018, 11:29
Помогаю со студенческими работами здесь

Locate
Что значит ??

LOCATE!!!
Всем привет. Привыполнении команды CurrentDb.Execute &quot;SELECT * FROM WHERE =0&quot; Пишет: не возможен запуск запроса на...

locate
доброе время суток,помогите,как программно определить что функция locate что-то нашла вот к примеру у меня такой код: TLocateOptions...

Метод .Locate
Есть таблица ClientDataSet1, в ней 2 столбца .F2.F3 F3 вычисляемый мне необходим, что бы первое значение и последнее значение из...

метод Locate
как с помощью метода Locate компонента ТTable найти не первую на соответствие запись, а все записи которые соответствуют запросу, например,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru