|
|
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Создаю запрос с сортировкой по 2 заданным полям. Делаю второй запрос на основе этого, который считает строки через написанную функцию и получаю в результате пронумерованный список, а сортировкой по 2 ранее заданным полям и не пахло. Блин бился... В результате пришлось сохранять результаты первого запроса в таблице и на ее основе уже делать второй запрос. А можно все таки обойти эту лишнюю операцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 16:38 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
А во втором запросе есть сортировка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 16:47 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Нет. Предполагается, что во вторй запос идет уже правильная последовательность строк и результат работы функции зависит от этой последовательности. Ничего не меняя запрос должен просто в доп. поле проставить соответствующие значения. Но при выводе запроса, видно, что эта зараза считывает УЖЕ ОТСОРТИРОВАННЫЕ строки в непонятно каком ПРОИЗВОЛЬНОМ порядке. Из-за этого нарушается результат работы самой функции. Да, конечно, если отсортировать второй запрос, он выведется правильно отсортированным, но с полной ахинеей в вычисляемом поле. Вот и бьюсь... Сам запрос работает 4-6 мин., записей в источнике 136000... Ну оооочень хотелось бы ускорить процесс. Даа... Вот и бьюсь...и бьюсь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 17:24 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
А не можем ли мы посмотреть на оба запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2004, 17:27 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Первый запрос только сортирует по полю деталь и цена, то есть в группах деталей цены по возрастанию. Второй запрос функцией MultiNum проставляет номера (занимаемую позицию по цене) в группах и очень фажно, чтобы сортировка сохранялась. Функция predcena берет предыдущую цену, то есть цену на порядок выше стоящую и функция percent возвращает процентный вид позиции. При всем этом должна сохраняться четкая сортировка. А если делать сортировку в этом же запросе, он проставляет позиции или проценты не верно. Если делать вложенный запрос, он может и саму сортировку по полям деталь-цена потерять ии не правильно вывести позиции. Вот и приходится по 10 таблиц создавать. Этого можно как-то избежать? 3 функции, которые использует второй запрос: Public Function MultiNum(Lev As String, post As String) As Long Static Num As Long, VarOld As String, i As Long i = i + 1 If VarOld <> Lev Then Num = 0 'Stop: If post = "" Then MultiNum = Num + 1 Else Num = Num + 1: MultiNum = Num VarOld = Lev End Function Function predcena(prepar As String, post As String, cena As Double) As Double Static preparold As String, postold As String, cenaold As Double If preparold <> prepar And post = "" Then predcena = 0 Else If post = "" Then predcena = cenaold Else predcena = cena: cenaold = cena End If preparold = prepar End Function Function percent(prep As String, postt As String, kol As Integer) As String Static prepold As String, perold As Single, n As Integer, per As Single If prep <> prepold Then n = 0: perold = 0: If kol <> 1 Then per = 100 / (kol - 1) Else per = 0 If postt = "" Then percent = Round(perold, 2) Else perold = Round(n * per, 2) percent = perold n = n + 1 End If prepold = prep End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 16:11 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
А сами запросы где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 16:29 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Первый запрос, который просто сортирует по двум полям. INSERT INTO Таблица ( Предложение, [Фирма поставщик], [Код Детали], Ценаа, Вывод ) SELECT DISTINCT [Сводный прайс].Предложение, [Сводный прайс].[Фирма поставщик], [Сводный прайс].[Код Детали], IIf(IsNull([Фирма поставщик]),Round([Цена]*(1-[Скидка поставщика]/100),[Цена]) AS Ценаа, [Скидки поставщиков].Вывод FROM [Сводный прайс] LEFT JOIN [Скидки поставщиков] ON [Сводный прайс].Предложение = [Скидки поставщиков].Поставщик ORDER BY [Сводный прайс].[Код Детали], IIf(IsNull([Фирма поставщик]),Round([Цена]*(1-[Скидка поставщика]/100),2),[Цена]); А второй уже добавляет вычисляемые поля: INSERT INTO [Вывод в форму] ( Полупроцент, Предцена, позиция, [Count-Деталь] ) SELECT Таблица.*, IIf(IsNull([Фирма поставщик]),percent(Таблица![Код Детали],"",[Count-Деталь]),percent(Таблица![Код Детали],[Фирма поставщик],[Count-Деталь])) AS Полупроцент, IIf(IsNull([Фирма поставщик]),predcena(Таблица![Код Детали],"",[Ценаа]),predcena(Таблица![Код Детали],[Фирма поставщик],[Ценаа])) AS Предцена, IIf(IsNull([Фирма поставщик]),multinum(Таблица![Код Детали],""),multinum(Таблица![Код Детали],[Фирма поставщик])) AS позиция, КолПредл.[Count-Детали] FROM Таблица INNER JOIN КолПредл ON Таблица.[Код Детали] = КолПредл.[Код Детали]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 17:47 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Первый запрос не сортирует по полям, а добавляет данные в таблицу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 17:49 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
А второй берет данные из таблицы, а не из запроса. В отличие от того, что было сказано в исходном вопросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 17:55 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
И тоже добавляет в таблицу А как данные в таблице храняться одному Аксу известно И никто не гарантировал, что хранит он их в порядке добавления :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 17:58 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Дык, люди, это рабочий вариант, в котором все работает. Но вы видите какой изварат получается? Поставить сортировку в одном запросе, где считаются строки и все финиш. Поставить один запрос на другой (вроде логично), все равно фигня. Пока ему таблицу в четко определенной последовательности не дашь, по которой он уже номера проставляет, ничего не работает. Вопрос: как всетаки его заставить сначала сортировать, потом проставлять номера. Ведь хочется отойти от этого избыточного сохранения в таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 18:10 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
1. Мы когда-нибудь увидим вариант, который не работает? 2. А то, что этот пока работает, - это до поры до времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 18:11 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Вот этот запрос. 'позиция' и 'полупроцент' гуляют при перемещении по списку. SELECT [Сводный прайс].[Код Детали], [Сводный прайс].Предложение, [Сводный прайс].[Фирма поставщик], [Сводный прайс].[Вид оплаты], IIf(IsNull([Фирма поставщик]),Round([Цена]*(1.18),2),[Цена]) AS Ценаа, [Сводный прайс].Коробка, [Сводный прайс].Склад, [Сводный прайс].Производитель, [Сводный прайс].Страна, [Сводный прайс].Годность, IIf(IsNull([Фирма поставщик]),percent([Сводный прайс]![Код Детали],"",[Count-Детали]),percent([Сводный прайс]![Код Детали],[Фирма поставщик],[Count-Детали])) AS Полупроцент, IIf(IsNull([Фирма поставщик]),predcena([Сводный прайс]![Код Детали],"",[Ценаа]),predcena([Сводный прайс]![Код Детали],[Фирма поставщик],[Ценаа])) AS Предцена, IIf(IsNull([Фирма поставщик]),multinum([Сводный прайс]![Код Детали],""),multinum([Сводный прайс]![Код Детали],[Фирма поставщик])) AS позиция, КолПредл.[Count-Детали] FROM КолПредл INNER JOIN [Сводный прайс] ON КолПредл.[Код Детали] = [Сводный прайс].[Код Детали] ORDER BY [Сводный прайс].[Код Детали], IIf(IsNull([Фирма поставщик]),Round([Цена]*(1.18),2),[Цена]); :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 20:30 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Это первый или второй? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 20:39 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Это объединенный запрос, не разбитый на два, который и сортирует и ставит позиции. Из-за того, что поля "гуляют" и возникла необходимость сохранять в таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 20:44 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 20:52 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Так это опять запрос, который работает??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 20:56 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
2 Shuard: Ценаа - это вычисляемое поле Цена*там бла бла бла "Так это опять запрос, который работает???" 2 Владимир Саныч: Нет. Глюк этого запроса заключается в следующем - В пределах одного экрана выводится корректная инфа, но стоит покрутить колесиком мыши, как 2 поля, в которых указаны функции, заново пересчитываются. Причем в параметры функций входят, какие-то загадочные данные, т. к. абсолютно все в этих полях перемешивается. Ну в принципе в запросе - это не в форме... Но ведь и в форме аналогичная ерунда - стоит покрутить форму и все, на эти поля уже можно не смотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 21:16 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
О-о-о-о... Мои грабли, однако... Предлагаю тебе сразу сделать выгрузку этого запроса в Ёксель. Заработает с вероятностью в 99 процентов. Вот не люблю я в Аксессе это гадство. Если есть вычисляемые поля, то он (Аксесс) вычисляет их только для отображаемых на экране записе, а при скроллинге пересчитывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 21:23 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Либо временная таблица, если все-таки нужна инфа в форме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 21:24 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Временная таблица - понятно (так сейчас и работает), а что подразумевается под инфой в форме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 21:56 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
Плохо выразился :) Имел в виду, что если в рекордсурсе формы используется этот запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 22:16 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
2 Темный: Спасибо за мысль, но все та же фигня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 22:46 |
|
||
|
Проядок записей в запросе
|
|||
|---|---|---|---|
|
#18+
<kby/ ye dsuhepbk dj dhtvtyye. nf,kbwe? nfr b ltkfq yf tt jcyjdt pfghjc lkz ajhvs/ rjnjhsq ,eltn cjhnbhjdfnm nfr? rfr ndjtq leit eujlyj/ D xtv nhf,k& ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 23:03 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32509635&tid=1674484]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
205ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 569ms |

| 0 / 0 |
