powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом в Delphi
25 сообщений из 35, страница 1 из 2
Помогите пожалуйста с запросом в Delphi
    #39967383
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Имеются таблицы:
DayBalance - Остатки на начало дня db_Kod db_Oboz db_Balance db_Date 840 USD 0 08.06.2020 11:12:43 643 RUB 10000 08.06.2020 11:12:43

CashDok - Ежедневные движения (Покупка/Продажа) cDate cName cCurs cSum cOper TotalSum 08.06.2020 11:13:08 USD 74 100 Покупка 7400 08.06.2020 11:15:38 USD 74 200 Покупка 14800 08.06.2020 11:18:39 USD 74.5 50 Продажа 3725 08.06.2020 11:24:26 USD 74.1 300 Продажа 22230

Не могу разобраться с запросом. Написал следующий запрос, но не получается.
Код: sql
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.
  qZapros.Close;
  qZapros.SQL.Clear;

//выводим наименование валюты, обозначение, остаток и дату из DayBalance
  qZapros.SQL.Add('Select db_Kod, db_Oboz, db_Name, db_Balance, db_Date, ');

//получаем приход
  qZapros.SQL.Add('(select sum(CashDok.cSum) from CashDok ');
  qZapros.SQL.Add('where DayBalance.db_Oboz=CashDok.cName and CashDok.cOper="Покупка" and CashDok.cDate BETWEEN :p1 and :p2 AS [Sum1], ');

//получаем расход
  qZapros.SQL.Add('(select sum(CashDok.cSum) from CashDok ');
  qZapros.SQL.Add('where DayBalance.db_Oboz=CashDok.cName and CashDok.cOper="Продажа" and CashDok.cDate BETWEEN :p3 and :p4 AS [Sum2], ');

//получаем сумму остатка на начало
  qZapros.SQL.Add('round([Sum1]-[Sum2],2) as [Sum3], ');

//получаем сумму остатка на конец
  qZapros.SQL.Add('[сум3] as [сум6] ');

  qZapros.SQL.Add('from DayBalance');
  qZapros.ParamByName('p1').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p2').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p3').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p4').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;

  qZapros.Open;


Помогите...
Пытаюсь получить следующую таблицу:
Валюта Остаток на начало дня Приход Средний курс Расход Средний курс Остаток на конец дня
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967387
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Delphi тут при чём ?
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967392
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr
А Delphi тут при чём ?
Программа на Delphi. При нажатии кнопик "Сформировать"
Код: sql
1.
procedure TfmReestr6.btOkClick(Sender: TObject);

Вещаю данный запрос.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967393
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoftВещаю данный запрос.

Ну так это вопрос к тому, кто спроектировал базу в которую ты вещаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967395
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @SDate datetime, @FDate datetime
select @SDate = :p1, @FDate = :p2

select B.*, A.Sum1, C.Sum2, Sum3 = db_Balance + isnull(Sum1,0) - isnull(Sum2,0)
from DayBalance B
left join (select Sum1=sum(cSum), cName from CashDok where cDate between @SDate and @FDate and cOper="Покупка" group by cName) A on B.db_Oboz = A.cName
left join (select Sum2=sum(cSum), cName from CashDok where cDate between @SDate and @FDate and cOper="Продажа" group by cName) C on B.db_Oboz = C.cName
where B.db_Date between @SDate and @FDate
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967677
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Слишком мало параметров...
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967682
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,
Даже этот не срабатывает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  qZapros.Close;
  qZapros.SQL.Clear;

//получаем приход
  qZapros.SQL.Add('Select cOper, cName, SUM(cSum) as SumV, SUM(TotalSum) as SumN from CashDok ');
  qZapros.SQL.Add('where cDate BETWEEN :p1 and :p2 ');
  qZapros.SQL.Add('and cOper=:p3 ');
  qZapros.SQL.Add('group by cName');

  qZapros.ParamByName('p1').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p2').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p3').Value :='Покупка';
  qZapros.Prepare;
  qZapros.Open;
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967684
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  qZapros.Close;
  qZapros.SQL.Clear;

//получаем приход
  qZapros.SQL.Add('Select cOper, cName, SUM(cSum) as SumV, SUM(TotalSum) as SumN from CashDok ');
  qZapros.SQL.Add('where cDate BETWEEN :p1 and :p2 ');
  qZapros.SQL.Add('and cOper=:p3 ');
  qZapros.SQL.Add('group by cName');

  qZapros.ParamByName('p1').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p2').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p3').Value :='Покупка';
  qZapros.Prepare;
  qZapros.Open;
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967687
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967717
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Это Вы где делаете, в Дельфи или MS SQL?
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967719
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ularsoft
DimaBr,

Это Вы где делаете, в Дельфи или MS SQL?
База данных у меня в MS Access
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967721
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
DimaBr
А Delphi тут при чём ?
Программа на Delphi. При нажатии кнопик "Сформировать"
Код: sql
1.
procedure TfmReestr6.btOkClick(Sender: TObject);


Вещаю данный запрос.

Для начала избавьтесь от идиотской привычки без необходимости формировать запросы в ран-тайме. Тем более - избавьтесь от дважды идиотской привычки делать это в обработчике onclick. Именно благодаря такому коду за дельфистами закрепилась слава безнадёжных ламеров.

Сделайте так:

1. Напишите запрос в любом gui-инструменте работы с используемой БД и добейтесь, чтобы он выдавал нужные результаты.
2. Бросьте на форму компонент запроса, положите в него сформированный текст
3. Привяжите запрос к гриду, в котором Вы ожидаете увидеть эту таблицу
4. В дизайн-тайме установите свойство Active компонента запроса и убедитесь, что он выдаёт в грид нужные данные так, как Вы ожидаете
5. Радуйтесь
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967727
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
База данных у меня в MS Access

Раз у вас база в Access, тогда вот сюда
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967735
sg729
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Для начала избавьтесь от идиотской привычки без необходимости формировать запросы в ран-тайме.

Так ведь вроде наоборот - дельфистов ругают за "формошлепство" и привычку бездумного кидания компонент на форму, и напротив - перенос всего чего можно в код считают признаком большого ума и правильного стиля -)
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967760
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Сделал следующим образом:
Код: sql
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.
  qZapros.Close;
  qZapros.SQL.Clear;

  qZapros.SQL.Add('select B.*, A.SumA, C.SumC ');
  qZapros.SQL.Add('from DayBalance B ');

//1
  qZapros.SQL.Add('left join (select sum(cSum) as SumA, cName from CashDok ');

  qZapros.SQL.Add('where cDate BETWEEN :p1 and :p2 and cOper=:p3 ');
  qZapros.SQL.Add('group by cName) A on B.db_Oboz = A.cName ');

//2
  qZapros.SQL.Add('left join (select sum(cSum) as SumC, cName from CashDok ');

  qZapros.SQL.Add('where cDate BETWEEN :p4 and :p5 and cOper=:p6 ');
  qZapros.SQL.Add('group by cName) C on B.db_Oboz = C.cName ');

  qZapros.SQL.Add('where B.db_Date between :p7 and :p8');

  qZapros.ParamByName('p1').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p2').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p3').Value :='Ïîêóïêà';
  qZapros.ParamByName('p4').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p5').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p6').Value :='Ïðîäàæà';
  qZapros.ParamByName('p7').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p8').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;

  qZapros.Prepare;
  qZapros.Open;

Подскажите пожалуйста, где моя ошибка. С первым LEFT работает, а когда добавляю второй LEFT не работает. Ошибка: Ошибка синтаксиса (пропущен оператор) в выражении запроса... Что делать?
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967761
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
qZapros.ParamByName('p3').Value :='Покупка';
qZapros.ParamByName('p6').Value :='Продажа';
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967763
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sg729
и напротив - перенос всего чего можно в код считают признаком большого ума и правильного стиля -)

Я же не говорю о том, за что ругают такие же безнадёжные ламеры.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967771
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

Прошу сильно не ругаться :) Действительно я только изучаю Дельфи...
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967786
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
Действительно я только изучаю Дельфи...

У вас вопрос не по Delphi, а по SQL. это разные звери.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967789
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
Прошу сильно не ругаться :) Действительно я только изучаю Дельфи...

Я не ругаюсь. Вернее, я не ругаюсь на Вас - я ругаюсь на вредные привычки, которые Вы подсмотрели в плохих примерах. И советую сменить их на хорошие.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967790
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ularsoft,

ты свой sql - запрос сперва обкатай в каком-нибудь инструменте для работы с твоей БД, а только потом отлаженный запрос в программу тащи.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967795
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ularsoft
DimaBr,

Сделал следующим образом:
Код: sql
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.
  qZapros.Close;
  qZapros.SQL.Clear;

  qZapros.SQL.Add('select B.*, A.SumA, C.SumC ');
  qZapros.SQL.Add('from DayBalance B ');

//1
  qZapros.SQL.Add('left join (select sum(cSum) as SumA, cName from CashDok ');

  qZapros.SQL.Add('where cDate BETWEEN :p1 and :p2 and cOper=:p3 ');
  qZapros.SQL.Add('group by cName) A on B.db_Oboz = A.cName ');

//2
  qZapros.SQL.Add('left join (select sum(cSum) as SumC, cName from CashDok ');

  qZapros.SQL.Add('where cDate BETWEEN :p4 and :p5 and cOper=:p6 ');
  qZapros.SQL.Add('group by cName) C on B.db_Oboz = C.cName ');

  qZapros.SQL.Add('where B.db_Date between :p7 and :p8');

  qZapros.ParamByName('p1').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p2').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p3').Value :='Ïîêóïêà';
  qZapros.ParamByName('p4').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p5').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;
  qZapros.ParamByName('p6').Value :='Ïðîäàæà';
  qZapros.ParamByName('p7').AsDateTime :=StrToDate(DBDateTimeEditEh1.Text);
  qZapros.ParamByName('p8').AsDateTime :=StrToDate(DBDateTimeEditEh2.Text)+1;

  qZapros.Prepare;
  qZapros.Open;

Подскажите пожалуйста, где моя ошибка. С первым LEFT работает, а когда добавляю второй LEFT не работает. Ошибка: Ошибка синтаксиса (пропущен оператор) в выражении запроса... Что делать?

Второй left после group by. Так нельзя. Group by должен быть после джойнов и после where. И, да, зачем здесь отлаживать запрос? Надо в каком-нибудь спецсредстве.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967812
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изучайте синтаксис Accessa. По синтаксису нужно в Microsoft Access
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967859
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Отлично!!! Благодарю Вас за помощь.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом в Delphi
    #39967862
ularsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,

Всем спасибо! Как теперь добавить "Остаток на конец" ?
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом в Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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