Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проядок записей в запросе / 25 сообщений из 30, страница 1 из 2
06.05.2004, 16:38
    #32509515
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Создаю запрос с сортировкой по 2 заданным полям. Делаю второй запрос на основе этого, который считает строки через написанную функцию и получаю в результате пронумерованный список, а сортировкой по 2 ранее заданным полям и не пахло. Блин бился... В результате пришлось сохранять результаты первого запроса в таблице и на ее основе уже делать второй запрос. А можно все таки обойти эту лишнюю операцию?
...
Рейтинг: 0 / 0
06.05.2004, 16:47
    #32509545
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
А во втором запросе есть сортировка?
...
Рейтинг: 0 / 0
06.05.2004, 17:24
    #32509635
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Нет. Предполагается, что во вторй запос идет уже правильная последовательность строк и результат работы функции зависит от этой последовательности. Ничего не меняя запрос должен просто в доп. поле проставить соответствующие значения. Но при выводе запроса, видно, что эта зараза считывает УЖЕ ОТСОРТИРОВАННЫЕ строки в непонятно каком ПРОИЗВОЛЬНОМ порядке. Из-за этого нарушается результат работы самой функции. Да, конечно, если отсортировать второй запрос, он выведется правильно отсортированным, но с полной ахинеей в вычисляемом поле. Вот и бьюсь... Сам запрос работает 4-6 мин., записей в источнике 136000... Ну оооочень хотелось бы ускорить процесс. Даа... Вот и бьюсь...и бьюсь...
...
Рейтинг: 0 / 0
06.05.2004, 17:27
    #32509640
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
А не можем ли мы посмотреть на оба запроса?
...
Рейтинг: 0 / 0
19.05.2004, 16:11
    #32524349
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Первый запрос только сортирует по полю деталь и цена, то есть в группах деталей цены по возрастанию.

Второй запрос функцией 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
...
Рейтинг: 0 / 0
19.05.2004, 16:29
    #32524387
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
А сами запросы где?
...
Рейтинг: 0 / 0
19.05.2004, 17:47
    #32524609
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Первый запрос, который просто сортирует по двум полям.

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 Таблица.[Код Детали] = КолПредл.[Код Детали];
...
Рейтинг: 0 / 0
19.05.2004, 17:49
    #32524615
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Первый запрос не сортирует по полям, а добавляет данные в таблицу
...
Рейтинг: 0 / 0
19.05.2004, 17:55
    #32524631
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
А второй берет данные из таблицы, а не из запроса. В отличие от того, что было сказано в исходном вопросе.
...
Рейтинг: 0 / 0
19.05.2004, 17:58
    #32524635
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
И тоже добавляет в таблицу

А как данные в таблице храняться одному Аксу известно

И никто не гарантировал, что хранит он их в порядке добавления :)
...
Рейтинг: 0 / 0
19.05.2004, 18:10
    #32524679
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Дык, люди, это рабочий вариант, в котором все работает. Но вы видите какой изварат получается? Поставить сортировку в одном запросе, где считаются строки и все финиш. Поставить один запрос на другой (вроде логично), все равно фигня. Пока ему таблицу в четко определенной последовательности не дашь, по которой он уже номера проставляет, ничего не работает.

Вопрос: как всетаки его заставить сначала сортировать, потом проставлять номера. Ведь хочется отойти от этого избыточного сохранения в таблицах.
...
Рейтинг: 0 / 0
19.05.2004, 18:11
    #32524680
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
1. Мы когда-нибудь увидим вариант, который не работает?

2. А то, что этот пока работает, - это до поры до времени.
...
Рейтинг: 0 / 0
19.05.2004, 20:30
    #32524873
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Вот этот запрос. 'позиция' и 'полупроцент' гуляют при перемещении по списку.

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),[Цена]);

:(
...
Рейтинг: 0 / 0
19.05.2004, 20:39
    #32524877
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Это первый или второй?
...
Рейтинг: 0 / 0
19.05.2004, 20:44
    #32524881
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Это объединенный запрос, не разбитый на два, который и сортирует и ставит позиции. Из-за того, что поля "гуляют" и возникла необходимость сохранять в таблицах.
...
Рейтинг: 0 / 0
19.05.2004, 20:52
    #32524885
Shuhard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Код: plaintext
1.
Ценаа 
- не ошибка часом ?
...
Рейтинг: 0 / 0
19.05.2004, 20:56
    #32524888
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Так это опять запрос, который работает???
...
Рейтинг: 0 / 0
19.05.2004, 21:16
    #32524898
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
2 Shuard: Ценаа - это вычисляемое поле Цена*там бла бла бла

"Так это опять запрос, который работает???"
2 Владимир Саныч: Нет. Глюк этого запроса заключается в следующем - В пределах одного экрана выводится корректная инфа, но стоит покрутить колесиком мыши, как 2 поля, в которых указаны функции, заново пересчитываются. Причем в параметры функций входят, какие-то загадочные данные, т. к. абсолютно все в этих полях перемешивается.

Ну в принципе в запросе - это не в форме... Но ведь и в форме аналогичная ерунда - стоит покрутить форму и все, на эти поля уже можно не смотреть.
...
Рейтинг: 0 / 0
19.05.2004, 21:23
    #32524902
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
О-о-о-о... Мои грабли, однако... Предлагаю тебе сразу сделать выгрузку этого запроса в Ёксель. Заработает с вероятностью в 99 процентов.
Вот не люблю я в Аксессе это гадство. Если есть вычисляемые поля, то он (Аксесс) вычисляет их только для отображаемых на экране записе, а при скроллинге пересчитывает.
...
Рейтинг: 0 / 0
19.05.2004, 21:24
    #32524904
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Либо временная таблица, если все-таки нужна инфа в форме
...
Рейтинг: 0 / 0
19.05.2004, 21:56
    #32524923
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Временная таблица - понятно (так сейчас и работает), а что подразумевается под инфой в форме?
...
Рейтинг: 0 / 0
19.05.2004, 22:16
    #32524933
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Плохо выразился :)
Имел в виду, что если в рекордсурсе формы используется этот запрос.
...
Рейтинг: 0 / 0
19.05.2004, 22:46
    #32524949
Invisible
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
2 Темный:
Спасибо за мысль, но все та же фигня.
...
Рейтинг: 0 / 0
19.05.2004, 23:03
    #32524952
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
<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&
...
Рейтинг: 0 / 0
19.05.2004, 23:04
    #32524953
Темный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проядок записей в запросе
Ой. Мама.

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


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