![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возможно ли (D7, DBase) [D7, dBase, FoxPro]
paul_k © (2003-08-25 09:41:00)
Не подскажут ли уважаемые, понимает ли DBase функцию round, и если понимает то как её правильно присенить.
есть код вида
q_tmp:=tQuery.Create(nil)
q_tmp.Database:="MyDb";
q_tmp.Sql.add("select sum(field1*field2) as sum_total from table");
q_tmp.open;
sum_total:=MyRound(q_tmp.FieldByName("sum_total").asfloat,2)
q_tmp.close
Есть ли способ (кроме перебора каждой записи по циклу) написать так
q_tmp:=tQuery.Create(nil)
q_tmp.Database:="MyDb";
q_tmp.Sql.add("select round(sum(round(field1,2)*round(field2,2)),2) as sum_total from table");
q_tmp.open;
sum_total:=MyRound(q_tmp.FieldByName("sum_total").asfloat,2)
q_tmp.close
Пробовал - передергиваю запрос - не работает. Ругается на ошибку в SQL
Как правильно написать это округление, или где об этом можно почитать?
paul_k (2003-08-27 19:49:00) [1]
Проще новый софт написать ...
и сразу или на MsSql опереть, ну или на Acсess
С вопросом выкрутился, просто убедил что жили 2 года без отчета и еще проживут, пока новый софт написать не укажут....
а за подсказку c ADO - большое спасибо. буду пробовать
sniknik (2003-08-26 20:28:00) [2]
> а вот никаких селектов? непонятно... или имелось в виду никаких case
именно, зарапортовался.
> Понял что придедся каждую запись обрабатывать. бедные юзверя.
ну зачем же так, не все так плохо кое какие возможности всетаки есть.
> Рад бы в рай, да заказчики не пускают
ну структуру и формат базы никто не заставляет менять а как у тебя там внутри не все ли равно?
к примеру перейдя на ADO - Jet - dBase уже больше возможностей. к примеру case (как в MSSQL) = iif(условие, если правда, если ложь) или наоборот (для более полного возможны вложения).
paul_k (2003-08-26 19:26:00) [3]
Спасибо за полноценный и исчерпывающий ответ.
Понял что придедся каждую запись обрабатывать. бедные юзверя.
paul_k (2003-08-25 11:59:00) [4]
>2 переходи на другой движок, начни с хелпа по нему.
Рад бы в рай, да заказчики не пускают
> никакиж декларирований никаких селектов
По поводу деклараций понятно что нет. Хотя не понятно почему этот запрос к Sybase нормально работает через BDE или там не Local SQL уже работает...
а вот никаких селектов? непонятно... или имелось в виду никаких case?
sniknik (2003-08-25 11:44:00) [5]
> если обращатся с запросом, аналогичным тому, я выше написал, к SYBASE? ил и MsSql - все работает как надо.
синтаксис и возможности любого SQL сервера различаются. а уж сравнивать по возможностям с Local SQL ...
> а вот как к DBase select писать - не понимаю
1 используй то что есть, почитай хелп по Local SQL.
2 переходи на другой движок, начни с хелпа по нему.
> да и ещё в ту-же тему.
> можно ли к DBAse (если можно то как) написать подобное
в DBAseможет быть и можно, в Local SQL нет. никакиж декларирований никаких селектов...
(ты же не используеш DBase ты используеш BDE и Local SQL с таблицами в формате DBase)
paul_k (2003-08-25 11:39:00) [6]
да и ещё в ту-же тему.
можно ли к DBAse (если можно то как) написать подобное
declare @id numeric
select @id=3
select
case @id
when 4 then @id*4
when 3 then @id*5
end
то есть какcaseв селекте сделать
paul_k (2003-08-25 11:19:00) [7]
Задача простая:
получить для дальнейших расчетов сумму округленных значений.
если обращатся с запросом, аналогичным тому, я выше написал, к SYBASE? ил и MsSql - все работает как надо. а вот как к DBase select писать - не понимаю
sniknik (2003-08-25 11:05:00) [8]
DBase наверняка понимает, если ты о самом DBase а не о Local SQL в BDE.
> Есть ли способ (кроме перебора каждой записи по циклу) написать так
можно для округления CAST к целочисленному типу использовать (наверное), или сделать вычисляемое поле уже в дельфях независимо от запроса. а можно так (с дробями) оставить а по GetText выводить как нужно. можно в отчете округлять. все в зависимости от задачи.
> Как правильно написать это округление, или где об этом можно почитать?
книги, Local SQL Help (в дельфях).