Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122

Функция для запросов

06.04.2016, 07:54. Показов 1144. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, в программе реализовано много запросов
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PlatUslugi.ADOQuery1.Active:= False ;
Uslugi.ADOQuery1.SQL.Clear;
Uslugi.ADOQuery1.SQL.ADD('SELECT * FROM Fournisseurs WHERE Usluga1="осмотр авто" and Date_dogovora>=:d and Date_dogovora<=:d1 ');
Uslugi.ADOQuery1.Parameters.ParamByName('d').Value:=DateToStr(DateTimePicker1.Date);
Uslugi.ADOQuery1.Parameters.ParamByName('d1').Value:=DateToStr(DateTimePicker2.Date);
Uslugi.ADOQuery1.Open;
Uslugi.ADOQuery1.Active:=True;
sum_otchet.u1_1.text:=IntToStr(PlatUslugi.ADOQuery1.RecordCount);
 
Uslugi.ADOQuery1.Active:=False;
Uslugi.ADOQuery1.SQL.Clear;
Uslugi.ADOQuery1.SQL.ADD('SELECT * FROM Fournisseurs WHERE Usluga1="мойка авто" and Date_dogovora>=:d and Date_dogovora<=:d1 ');
Uslugi.ADOQuery1.Parameters.ParamByName('d').Value:=DateToStr(DateTimePicker1.Date);
Uslugi.ADOQuery1.Parameters.ParamByName('d1').Value:=DateToStr(DateTimePicker2.Date);
Uslugi.ADOQuery1.Open;
Uslugi.ADOQuery1.Active:=True;
sum_otchet.u1_2.text:=IntToStr(PlatUslugi.ADOQuery1.RecordCount);
в результате чего программа стала выдавать ошибку
Delphi
1
[Error] Unit12.pas(4879): Too many local constants.  Use shorter procedures
можно ли данные запросы реализовать через функции? если да пните в правильном направлении
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.04.2016, 07:54
Ответы с готовыми решениями:

Универсальная функция запросов в базу
Здравствуйте. Есть несколько мест в коде где идет 6-8 запросов в базу, запросы различные (select,insert,update,вызов процедур) запихать...

Функция: отправление 30 запросов программой ping на заданный ip
Написать функцию отправляющую 30 запросов программой ping на переданный в ней IP адрес и выполняющую расчет среднего времени прихода...

Функция отправки GET запросов и парсинг JSON-строки в таблицу
Добрый день Есть функция, которая отправляет http-запросы и возвращает результат в виде строки using System; using System.Data; ...

13
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
06.04.2016, 08:03
Цитата Сообщение от Glin Посмотреть сообщение
Usluga1="осмотр авто"
Одинарные ковычки нужны.
Цитата Сообщение от Glin Посмотреть сообщение
можно ли данные запросы реализовать через функции?
Можно. Но я порекомендую вьюшки: https://msdn.microsoft.com/ru-... .120).aspx
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
06.04.2016, 09:24  [ТС]
Можно уточнить, может я не правильно написал, мне нужно избавиться от ошибки а для этого нужно разгрузить код. Читая много статей там рекомендуют через function реализовать данные запросы, но как в моём случае мне не хватает пока знаний сделать данную функцию. Так через CREATE VIEW я создаю виртуальную таблицу каждым запросом, или мне нужно сформулировать одним запросом? подскажите пожалуйста
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
06.04.2016, 09:27
Лучший ответ Сообщение было отмечено Glin как решение

Решение

Цитата Сообщение от Glin Посмотреть сообщение
Здравствуйте, в программе реализовано много запросов
а зачем так делать?

создайте функцию которую передаете название услуги, а в функции уже запрос

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function my_recordcount(s:string):integer;
begin
result:=0;
 
Uslugi.ADOQuery1.Active:=False;
Uslugi.ADOQuery1.SQL.Clear;
Uslugi.ADOQuery1.SQL.ADD('SELECT * FROM Fournisseurs WHERE Usluga1=:s and Date_dogovora>=:d and Date_dogovora<=:d1 ');
Uslugi.ADOQuery1.Parameters.ParamByName('d').Value:=DateToStr(DateTimePicker1.Date);
Uslugi.ADOQuery1.Parameters.ParamByName('d1').Value:=DateToStr(DateTimePicker2.Date);
Uslugi.ADOQuery1.Parameters.ParamByName('s').Value:=s;
Uslugi.ADOQuery1.Open;
Uslugi.ADOQuery1.Active:=True;
result:=IntToStr(PlatUslugi.ADOQuery1.RecordCount);
end;
 
procedure button1Click();
var colichestvo:integer;
begin
  colichestvo:=my_recordcount('мойка авто');
end;
вместо 100500 строк у вас будет 1 функция
1
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
06.04.2016, 10:00
и лучше не замешивать глобальные функции с методами классов в одну кучу
сделайте ф-ю методом класса
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
06.04.2016, 10:04
а еще, ТС, вариант выше это тоже неправильный

вам нужно к вашему запросу подключить таблицу со списком услуг, и сгруппировать
тогда вы получите симпатичную таблицу
услуга\количество

одним запросом
ОДНИМ, Карл

Добавлено через 2 минуты
SQL
1
2
3
4
SELECT f.usluga, COUNT(*) FROM Fournisseurs  F
LEFT JOIN tablica_s_uslugami T ON f.usluga=t.usluga
WHERE Date_dogovora>=:d AND Date_dogovora<=:d1
GROUP BY f.usluga
сейчас я соединяю по наименованию услуги, что, конечно, неправильно
у вас, я надеюсь, есть ID услуги и справочник услуг с наименованиями
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
06.04.2016, 11:47  [ТС]
попробую

Добавлено через 1 час 8 минут
можно уточнить, F и T , что это?
Цитата Сообщение от qwertehok Посмотреть сообщение
есть ID услуги и справочник услуг с наименованиями
есть бд Uslugi со столбцами ID_uslugi, Name_uslugi, Prise_uslugi

Добавлено через 6 минут
И почему то ругается на DateTimePicker1
Delphi
1
[Error] Unit12.pas(51): Undeclared identifier: 'DateTimePicker1'
прописываю в var
Delphi
1
DateTimePicker1:TDateTimePicker
пишет
Delphi
1
[Warning] Unit12.pas(54): Variable 'DateTimePicker1' might not have been initialized
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
06.04.2016, 12:17
Цитата Сообщение от Glin Посмотреть сообщение
можно уточнить, F и T , что это?
псевдонимы

Цитата Сообщение от Glin Посмотреть сообщение
есть бд Uslugi со столбцами ID_uslugi, Name_uslugi, Prise_uslugi
бд? наверное таблица?
у тебя в таблице Fournisseurs хранится наименование услуги или ее код?

Цитата Сообщение от Glin Посмотреть сообщение
И почему то ругается на DateTimePicker1
в функции?

или пиши Form1.DateTimePicker1 (или как у тебя форма называется)
или пропиши функцию как т-щ krapotkin писал
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
06.04.2016, 12:29  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
бд? наверное таблица?
у тебя в таблице Fournisseurs хранится наименование услуги или ее код?
простите, да таблица, а в Fournisseurs хранятся наименования
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
06.04.2016, 14:50
а зачем вам хранить наименования, когда в таблице Uslugi они уже есть???

может будете хранить в Fournisseurs ID услуги, а сами услуги в Uslugi

))))
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
07.04.2016, 11:30  [ТС]
Цитата Сообщение от qwertehok Посмотреть сообщение
может будете хранить в Fournisseurs ID услуги
в таблицу Fournisseurs сливаю данные из разных таблиц, и для удобства пользователя в таблице отображаются наименования услуг.
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
07.04.2016, 11:32
в таблице для скорости нужно использовать ID

а
Цитата Сообщение от Glin Посмотреть сообщение
для удобства пользователя
ты пишешь запросы и выводишь так как нужно
0
16 / 16 / 5
Регистрация: 26.05.2014
Сообщений: 122
07.04.2016, 11:43  [ТС]
Спасибо учту.
Можно ещё 1 вопрос.В первом варианте предложенной вами функции, можно ли Usluga1 указать 2-м параметров?
Delphi
1
2
sum_otchet.u1_1.text:=IntToStr(my_recordcount('Usluga1','мойка авто'));
sum_otchet.u2_1.text:=IntToStr(my_recordcount('Usluga2','осмотр авто'));
просто не знаю как прописать правильно.
0
5975 / 4550 / 1095
Регистрация: 29.08.2013
Сообщений: 28,172
Записей в блоге: 3
07.04.2016, 14:30
Delphi
1
2
3
4
5
6
function my_recordcount(s:string;s1:string=''):integer;
begin
if s1='' then tablename:=s else table_name:=s1;
 
query.sql.text:='select * from '+table_name+'  where la la la';
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.04.2016, 14:30
Помогаю со студенческими работами здесь

Подсчет итогов в отчете из запросов с условиями. Функция Dcount(), DSum()
В итоговом отчете не могу вывести суммарные данные по классам из разных школ по определенному критерию (текстовому или числовому) вводимому...

Создание запросов и дополнительных запросов MS Access. Как првильно делать.
Здрасте всем. Может кто-то может мне тупому объяснить что-нибудь по запросам и дополнительным запросам в MS Access, мат. часть читал, не...

Хранение текста запросов в таблице. Как реализовать выполнение запросов с параметрами и Select?
День добрый! По тексту кода часто встречаются одни и те же фиксированные запросы, бывает длинные. Организовал их хранение в таблице, и по...

Запуск нескольких запросов на обновление кодом VBA (часть запросов пустые т.е. без отобранных записей)
Форумчане, доброго времени суток! Прошу Вашей помощи! есть таблица со списком Заказчиков. Этот список пополняют несколько человек,...

newcachedthreadpool для запросов
Здравствуйте! собираюсь использовать кэширующий пул потоков для запросов с целью увеличения скорости работы с базой, поможет? используется...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru