PDA

Показать полную графическую версию : [решено] IIF в Access. Не выполняется условие.


NecroTYN
08-01-2012, 18:31
Работа с Б/Д происходит через программу (http://simple-soft.ru/ProductsCount.htm) использующую язык Transact-SQL

Здравствуйте господа форумчане !!!
Очень нужна ваша помощь
есть следующая Б/Д (Это только малая ее часть)

Нужно чтобы запрос qdfServices выполнялся следующим образом:

Если [ServicesType] = 'Монтаж' то [Price] = [OrderAmountCalc] / 100 *[Pct]
Если [ServicesType] = 'Доставка' то [Pct] = Null а поле [Price] заполнять с клавиатуры
Если [ServicesType] = 'Подъем на этаж' то [Price] = [FloorCalc] - 1 *50 + 150

Составили вот такую формулу, Access пишет что не проходит

IIf([ServicesType]="Монтаж";[Price]=[OrderAmountCalc]/100*[Pct];IIf([ServicesType]="Доставка";[Pct]="" And [price]="";IIf([ServicesType]="'Подъем на этаж";[Price]=[FloorCalc]-1*50+150)))

Delirium
09-01-2012, 15:57
IIf([ServicesType]="'Подъем на этаж";[Price]=[FloorCalc]-1*50+150) »
А где условие, если ServiceType не равно "подъем на этаж" ?

NecroTYN
09-01-2012, 20:20
IIf([ServicesType]="'Подъем на этаж";[Price]=[FloorCalc]-1*50+150) »
А где условие, если ServiceType не равно "подъем на этаж" ?

я не знаю, не разбираюсь...

Delirium
10-01-2012, 06:22
попробуй так

IIf([ServicesType]="Монтаж"; [Price]=[OrderAmountCalc]/100*[Pct];IIf([ServicesType]="Доставка"; [Pct]="" And [price]="";IIf([ServicesType]="'Подъем на этаж"; [Price]=[FloorCalc]-1*50+150; [Price]="") ) )

NecroTYN
11-01-2012, 18:48
IIf([ServicesType]="Монтаж"; [Price]=[OrderAmountCalc]/100*[Pct];IIf([ServicesType]="Доставка"; [Pct]="" And [price]="";IIf([ServicesType]="'Подъем на этаж"; [Price]=[FloorCalc]-1*50+150; [Price]="") ) ) »
не сработало

NecroTYN
15-01-2012, 08:57
отредактировли составленное ранее выражение

IIf([ServicesType]="Подъем на этаж",([FloorCalc]-1) * 50 + 150,IIf([ServicesType]="Монтаж",[OrderAmountCalc] / 100 * Val(IIf(pct Is Null,1,pct))))

т.е. я попросту вырезал часть кода:

iif([ServicesType]="Доставка", [Введите значение поля Price])

но в таком случае при значении "Доставка" в [ServicesType], поле [Price] когда в него вводишь значение остается всегда пустым...

что делать ???

NecroTYN
15-01-2012, 10:07
Наверное сразу стоит сказать что работа с Б/Д происходит через программу (http://simple-soft.ru/ProductsCount.htm) использующей язык Transact-SQL

Delirium
16-01-2012, 01:06
NecroTYN, открою тебе секрет - неважно, какая используется программа, Transact-SQL все равно используется при составлении запросов в SQL.
В твоем же случае это не T-SQL запрос, а обыкновенное условие в ACCESS.
Данную формулу куда подставляешь, в форму или в запрос Access? Может быть, стоит поискать другой способ проверки введенных данных?

NecroTYN
16-01-2012, 12:16
Данную формулу куда подставляешь, в форму или в запрос Access? Может быть, стоит поискать другой способ проверки введенных данных? »

Вставляю в запрос - Поле [Price] строка "Поле"

Transact-SQL все равно используется при составлении запросов в SQL.

SELECT tblServices.ID, tblServices.QuantityServices, tblServices.AmountServices, tblServices.Pct, tblServices.OrderID, tblOrdersProducts.Amount AS OrderAmountCalc, tblSales.Floor AS FloorCalc, tblServices.ServicesType, IIf(ServicesType="Подъем на этаж",(FloorCalc-1) * 50 + 150,IIf(ServicesType="Монтаж",OrderAmountCalc / 100 * Val(IIf(pct Is Null,1,pct)))) AS PriceServices FROM (tblServices LEFT JOIN tblOrdersProducts ON tblServices.OrderID = tblOrdersProducts.OrderID) LEFT JOIN tblSales ON tblServices.OrderID = tblSales.OrderID

Может быть, стоит поискать другой способ проверки введенных данных? »
SWITCH или CASE ???




© OSzone.net 2001-2012