Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом в Delphi / 25 сообщений из 35, страница 1 из 2
09.06.2020, 13:12
    #39967383
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
Добрый день!
Имеются таблицы:
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
09.06.2020, 13:19
    #39967387
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
А Delphi тут при чём ?
...
Рейтинг: 0 / 0
09.06.2020, 13:25
    #39967392
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
DimaBr
А Delphi тут при чём ?
Программа на Delphi. При нажатии кнопик "Сформировать"
Код: sql
1.
procedure TfmReestr6.btOkClick(Sender: TObject);

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

Ну так это вопрос к тому, кто спроектировал базу в которую ты вещаешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.06.2020, 13:33
    #39967395
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
Код: 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
10.06.2020, 07:19
    #39967677
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
DimaBr,

Слишком мало параметров...
...
Рейтинг: 0 / 0
10.06.2020, 07:48
    #39967682
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
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
10.06.2020, 07:57
    #39967684
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
Код: 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
10.06.2020, 08:09
    #39967687
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
...
Рейтинг: 0 / 0
10.06.2020, 10:04
    #39967717
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
DimaBr,

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

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


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

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

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

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

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

Так ведь вроде наоборот - дельфистов ругают за "формошлепство" и привычку бездумного кидания компонент на форму, и напротив - перенос всего чего можно в код считают признаком большого ума и правильного стиля -)
...
Рейтинг: 0 / 0
10.06.2020, 11:20
    #39967760
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
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
10.06.2020, 11:23
    #39967761
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
Код: sql
1.
2.
qZapros.ParamByName('p3').Value :='Покупка';
qZapros.ParamByName('p6').Value :='Продажа';
...
Рейтинг: 0 / 0
10.06.2020, 11:25
    #39967763
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
sg729
и напротив - перенос всего чего можно в код считают признаком большого ума и правильного стиля -)

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

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

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

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

ты свой sql - запрос сперва обкатай в каком-нибудь инструменте для работы с твоей БД, а только потом отлаженный запрос в программу тащи.
...
Рейтинг: 0 / 0
10.06.2020, 12:03
    #39967795
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
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
10.06.2020, 12:27
    #39967812
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
Изучайте синтаксис Accessa. По синтаксису нужно в Microsoft Access
...
Рейтинг: 0 / 0
10.06.2020, 13:38
    #39967859
ularsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста с запросом в Delphi
DimaBr,

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

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


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