powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / QUERY
13 сообщений из 13, страница 1 из 1
QUERY
    #32082857
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HELLO

Есть база в paradox требуется посчитать расход кВт/ч. по вводимым показаниям для этого нужно отыскать запись по следующим параметрам : Base_id - Ключик абонента с основной таблицы, Date_nper - дата конца периода платежа.

в Query пишу запрос:
Код: plaintext
1.
2.
3.
4.
SELECT max(Date_nper) , pkz_n
FROM Account
WHERE Date_nper<:Date_nper
and Base_id=:Base_id
GROUP BY pkz_n

он проходит - параметры (params)
Date_nper -Date
Base_id -Float
а если пишу в коде программы не проходит ругается
'List index out of bounds (1)'
Что посмотреть??
...
Рейтинг: 0 / 0
QUERY
    #32082860
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.

к коде пишу:
Код: plaintext
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.
procedure TFrmOsn.QAccBeforePost(DataSet: TDataSet);
var
  Date_nper_0, Date_nper, Days : TDate;
  Pkz_n_0, Pkz_n, Pkz, Base : Double;
begin
  Date_nper := QAcc.FieldValues['Date_nper'];
  Base := QAcc.FieldValues['Base_id'];
  Q5.SQL.Clear;
  Q5.SQL.Add('select max(Date_nper) from ''Account'' where Date_nper < :Date_nper and''Base_id=:Base');
  Q5.Params[ 0 ].AsDate := Date_nper;
  Q5.Params[ 1 ].AsFloat := Base;
  Q5.Open;
  Date_nper_0 := Query1.Fields[ 0 ].AsDateTime;

  if Date_nper_0 <>  0  then begin
    Pkz_n := QAcc.FieldValues['Pkz_n'];
    Base := QAcc.FieldValues['Base_id'];
    Q5.SQL.Clear;
    Q5.SQL.Add('select Pkz_n from ''Account'' where Date_nper = :Date_nper and''Base_id=:Base');
    Q5.Params[ 0 ].AsDate := Date_nper_0;
    Q5.Params[ 1 ].AsFloat := Base;
    Q5.Open;
    Pkz_n_0 := Query1.Fields[ 0 ].AsFloat;

//    Days := Date_nper - Date_nper_0;
    Pkz := Pkz_n - Pkz_n_0;
  end else
    Pkz :=  0 ;

  QAcc.FieldValues['Pkz'] := Pkz;

  {ShowMessage(Format('%.f êÂò çà %d äíåé', [Pkz, Trunc(Days)]));}
  Q5.Close;
end;
...
Рейтинг: 0 / 0
QUERY
    #32082882
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрой кавычки за наименованием второго поля
у тебя так
Q5.SQL.Add('select max(Date_nper) from ''Account'' where Date_nper < :Date_nper and''Base_id=:Base');
а нужно
Q5.SQL.Add('select max(Date_nper) from ''Account'' where Date_nper < :Date_nper and ''Base_id''=:Base');
...
Рейтинг: 0 / 0
QUERY
    #32082936
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexusR

Последовал твоему совету:
Код: plaintext
Q5.SQL.Add('select max(Date_nper) from ''Account'' where Date_nper < :Date_nper and ''Base_id''=:Base');


при попытке сохранить изменения в базе пишет:

'Invalid variant type conversion'
...
Рейтинг: 0 / 0
QUERY
    #32082953
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда убери их совсем из наименовании поля
...
Рейтинг: 0 / 0
QUERY
    #32082961
LexusR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Q5.SQL.Add('select max(Date_nper) from Account where Date_nper < :Date_nper and Base_id =:Base');
...
Рейтинг: 0 / 0
QUERY
    #32083040
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexusR

вариант
Код: plaintext
Q5.SQL.Add('select max(Date_nper) from Account where Date_nper < :Date_nper and Base_id =:Base');

возвращает аналогичный результат:
'Invalid variant type conversion'

Я думаю тут заморочка в типах т.к. в базе у меня Base_id + AutoIncrement
но когда в Query запрос пишу? - проходит!!
В чём дело не пойму??...
...
Рейтинг: 0 / 0
QUERY
    #32083049
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может параметрам типы присвоить?
...
Рейтинг: 0 / 0
QUERY
    #32083055
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra

Дык вроде как есть...

Код: plaintext
1.
2.
var
  Date_nper_0, Date_nper, Days : TDate;
  Pkz_n_0, Pkz_n, Pkz, Base : Double;



Код: plaintext
1.
  Q5.Params[ 0 ].AsDate := Date_nper;
  Q5.Params[ 1 ].AsFloat := Base;


Код: plaintext
1.
   Q5.Params[ 0 ].AsDate := Date_nper_0;
   Q5.Params[ 1 ].AsFloat := Base;


Или я опять туплю??... вразумите??....
...
Рейтинг: 0 / 0
QUERY
    #32083113
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавить

Q5.Params[0].DataType := ftDate; (ftDateTime)
Q5.Params.DataType := ftFloat;
...
Рейтинг: 0 / 0
QUERY
    #32083119
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имелось ввиду во 2й строке
Q5.Params[ 1 ].DataType := ftFloat;
...
Рейтинг: 0 / 0
QUERY
    #32083137
balbes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hDrummer

ОК thank you!!!!

ВСЕ покатило...
ВСЕМ СПАСИБО....
Чтоб я без ВАС делал?!?!?!.....
...
Рейтинг: 0 / 0
QUERY
    #32083143
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
жил бы весело и здорово
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / QUERY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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