powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рекордсет на основе запроса
102 сообщений из 102, показаны все 5 страниц
Рекордсет на основе запроса
    #32572342
AnTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Литературу читал, но мало.
Всё изучал на практике и на хелпах.

Не могу понять, помогите:

делаю обычный Рекордсет типа
set rst = currentdb.openrecordset("................ и т.д.

источником является сложный запрос

выдаёт ошибку типа "Мало параметров, нужно 2"

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

Мало параметров, нужно 2

:)))

Запрос покажи :)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572353
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTTЛитературу читал, но мало.
Всё изучал на практике и на хелпах.Так лучше всего.

AnTTделаю обычный Рекордсет типа
set rst = currentdb.openrecordset("................ и т.д.

источником является сложный запрос
выдаёт ошибку типа "Мало параметров, нужно 2"
в чем проблема?Жопа в тексте запроса. Пожалста в студию. Аксесс его парсит и решает, что вот эти вот два слова, которые он не смог понять, являются параметрами.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572364
AnTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос составлен на основе нескольких таблиц со всякими разными условиями, являющиеся функциями.

просто так запрос выполняется.

подставляю вместо запроса любую таблицу - всё ок.

неужели нельзя делать рекордсеты на основе запросов?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572369
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTTзапрос составлен на основе нескольких таблиц со всякими разными условиями, являющиеся функциями.

просто так запрос выполняется.

подставляю вместо запроса любую таблицу - всё ок.

неужели нельзя делать рекордсеты на основе запросов?Ты хочешь в пространство поспрашать или проблему свою решить? Если первое, то ты ошибся местом. А если второе, то пиши текст запроса.
Всё можно сделать, надо только постараться.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572371
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно делать :)

Запрос покажешь?
Или так и будем гадать где у тебя трабл?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572387
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTTзапрос составлен на основе нескольких таблиц со всякими разными условиями, являющиеся функциями.

просто так запрос выполняется.

подставляю вместо запроса любую таблицу - всё ок.

неужели нельзя делать рекордсеты на основе запросов?
хором заявляем - можно
НО аккуратно "собирая" SQL строчку обычные проблемы
- Null
- Like
- Дата/время не в том формате
- забытые кавычки вокруг литералов
- кривые ссылки на формы
- where без полей

мораль перед Openrecordset делаешь debug.print своей строке и ищешь ляпу!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572413
AnTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shuhard[quot AnTT]
мораль перед Openrecordset делаешь debug.print своей строке и ищешь ляпу!

только не смейтесь!

я много слышал про дебаг, но никогда не использовал.

можно поподробнее, как это сделать?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32572474
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTT Shuhard[quot AnTT]
мораль перед Openrecordset делаешь debug.print своей строке и ищешь ляпу!

только не смейтесь!

я много слышал про дебаг, но никогда не использовал.

можно поподробнее, как это сделать?

внутри существующего кода вставляешь debug.print чего-то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim mydb As DAO.Database
Dim MyRst As DAO.Recordset
Dim MySql As String
If Not IsNull(Me![Sp_Num].Column( 0 )) Then
  If Not IsNull(Me![Ps_Tip].Column( 0 )) Then
Set mydb = CurrentDb
MySql = "select * from TPersNum where Pers_Ct=" & Me![Sp_Num].Column( 0 )
    Debug.Print MySql  '!!!!
 
Set MyRst = mydb.OpenRecordset(MySql)
With MyRst
.Edit
![Pers_Cod] = MyClrTxt(Me![P_Cod])
![Pers_Num] = MyClrTxt(Me![P_Num])
![Pers_Tip] = Me![Ps_Tip]
.Update
End With
MyRst.Close
Set mydb = Nothing
End If
End If
Me![Sp_Num].Requery
Call Sp_Num_AfterUpdate
выполняешь свои операции
жмешь CTRL+G

видишь результат
Код: plaintext
1.
select * from TPersNum where Pers_Ct= 178 

далее включашь думатель и ...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573073
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди! Та же самая проблема. Где ошибка знаю, но не знаю как исправить.
не хочет воспринимать Format([Дата],"dd/mm/yy")
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573086
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь можно посмотреть про даты в запросе:
http://www.sql.ru/faq/faq_topic.aspx?fid=157

, а здесь, например, в Q1, одна из возможных причин возникновения ошибки, если даты в запросе написаны правильно:
http://www.sql.ru/faq/faq_topic.aspx?fid=213
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573145
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPЛюди! Та же самая проблема. Где ошибка знаю, но не знаю как исправить.
не хочет воспринимать Format([Дата],"dd/mm/yy")

может mm dd yyyy и где ёлки
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573184
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
менял dd и mm местами таже фигня и просит не 2 параметра как у AnTT а 5
Вот запрос

Код: 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.
SELECT IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),
IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-
CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),
IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),
IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),
IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy")))))) AS Выражение2,
Sum([001_Регион].[Sum-Продано_кг]) AS Тоннаж
FROM 00_Дата LEFT JOIN 001_Регион ON [00_Дата].Дата = [001_Регион].Дата_
GROUP BY IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),
IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-
CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),
IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),
IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),
IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy")))))), 
IIf([Forms]![000_Объемы]![Дата]= 1 ,Year([Дата])* 365 +
Month([Дата])* 31 +Day([Дата]),IIf([Forms]![000_Объемы]![Дата]= 2 ,
CByte(([Дата]-# 12 / 31 / 2000 #)/ 7 + 0 . 6 ),IIf([Forms]![000_Объемы]![Дата]= 3 ,
Year([Дата])* 12 +Month([Дата]),
IIf([Forms]![000_Объемы]![Дата]= 4 ,Year([Дата])* 4 +CByte(Month([Дата])/ 3 + 0 . 2 ),
IIf([Forms]![000_Объемы]![Дата]= 5 ,Year([Дата]), 0 )))))
ORDER BY 
IIf([Forms]![000_Объемы]![Дата]= 1 ,Year([Дата])* 365 +
Month([Дата])* 31 +Day([Дата]),IIf([Forms]![000_Объемы]![Дата]= 2 ,
CByte(([Дата]-# 12 / 31 / 2000 #)/ 7 + 0 . 6 ),
IIf([Forms]![000_Объемы]![Дата]= 3 ,Year([Дата])* 12 +Month([Дата]),
IIf([Forms]![000_Объемы]![Дата]= 4 ,Year([Дата])* 4 +CByte(Month([Дата])/ 3 + 0 . 2 ),
IIf([Forms]![000_Объемы]![Дата]= 5 ,Year([Дата]), 0 )))));
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573212
Фотография Shark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для преобразования даты в эскуэль джет строку я написал функцию:
Public Function fnDateToJetString(pDate As Variant) As String
If IsNull(pDate) Then
fnDateToJetString = ""
Else
fnDateToJetString = "#" & Format(Month(pDate)) & "/" & Format(Day(pDate)) & "/" & Format(Year(pDate)) & "#"
End If
End Function
И не парюсь.
Тк многочасовые упражнения с форматом ни к чему хорошему не привели
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573217
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он вот этого не может найти

[Forms]![000_Объемы]![Дата]

как раз 5 штук :)

форма открыта?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573234
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форма открыта. Я и сам текст SQLзапрос прописываю в модуле ссылкой на форму, т.к. запрос храниться в таблице и на основании этой таблицы построена форма
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573249
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К стати когда прописываю графику находящемуся на этой же форме RowSourse=та же ссылка
все работает без проблем
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573276
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сталкивался с таким эффектом, когда запрос отрабатывается нормально, а рекордсет на основе того же запроса требует параметры. По-видимому, в данном случае, надо данные с формы подать в запрос в явном виде. Я бы построил функцию, которая в стринге выдавала бы фосматированные поля даты с формы. Склеил бы запрос в чистом виде и так бы открывал его. И не так громоздко будет выглядеть.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573295
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryПо-видимому, в данном случае, надо данные с формы подать в запрос в явном виде. Я бы построил функцию, которая в стринге выдавала бы фосматированные поля даты с формы. Склеил бы запрос в чистом виде и так бы открывал его. И не так громоздко будет выглядеть.

А расшифровку для чайников можно?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573347
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вместо вложенных IIf лучше пользоваться функциями Choose или Switch. Не забывайте, что IIf проверяет и truepart и falsepart и если одна из частей ошибочна, получите фигу. И это еще один довод в пользу создания функции типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function MyDateFormat(dum As Integer) As String

    Select Case dum
    Case  1 
        MyDateFormat = Format([Date], "dd/mm/yy")
    Case  2 
        MyDateFormat = CByte((([Date] - # 12 / 31 / 2000 #) - CByte(([Date] - # 12 / 31 / 2000 #) /  364  -  0 . 4999 ) *  364 ) /  7  +  0 . 6 )
    Case  3 
        MyDateFormat = Format([Date], "mmmm  yy")
    Case  4 
        MyDateFormat = Format([Date], "q  yy")
    Case  5 
        MyDateFormat = Format([Date], "yyyy")
    End Select

End Function

и
Код: plaintext
1.
2.
3.
se = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " As Ext1, Sum(...) As Ext2 " & _
"FROM Tbl1 ... " & _
"GROUP BY " & _
"ORDER BY Ext1"
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573398
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А со скоростью обработки у функции все нормально будет?
А то я сначала за место вычислений в запросе функцию писал, так она в час по чайной ложке работала, хотя формула была один в один. У меня массивы по 50 000 строк и более, а обрабатываться должно с полпинка
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573427
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ меня массивы по 50 000 строк и более, а обрабатываться должно с полпинка

1. iif - тоже функция
2. 50 000 записей с сортировкой и группировкой по вычисляемым полям (iif)? С пол пинка? Хорошие у вас машинки :)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573433
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй. По идее, то что я предлагаю, ничего не изменяет, просто легче создать стринг с запросм и загнать в него параметры запроса и поля явным образом. Для увеличения скорости есть другие инструменты, например, индексы
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573491
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paparome2. 50 000 записей с сортировкой и группировкой по вычисляемым полям (iif)? С пол пинка? Хорошие у вас машинки :)

Ну на счет с пол пинка может немного и приукрасил, но за 2-3 секунды обработка должна происходить. У меня по этому запросу данные на графике изменяются в зависимости от значения в поле со списком или по группе переключателей [Дата]. Если медленно будет работать мне не простят
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573503
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikP paparome2. 50 000 записей с сортировкой и группировкой по вычисляемым полям (iif)? С пол пинка? Хорошие у вас машинки :)

Ну на счет с пол пинка может немного и приукрасил, но за 2-3 секунды обработка должна происходить. У меня по этому запросу данные на графике изменяются в зависимости от значения в поле со списком или по группе переключателей [Дата]. Если медленно будет работать мне не простят

А ты открой этот запрос (после сохранения в запроса) и перейди на последнюю запись (кнопку нажми) и время засеки

Потом нам скажешь сколько он у тебя открывался :(
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573507
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не болтай! Построй, запусти, проверь время. Если будет медленно, выстави на форум структуру таблиц и результирующий запрос, посмотрим, подумаем... :)))
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573593
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry
Код: plaintext
1.
2.
3.
se = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " As Ext1, Sum(...) As Ext2 " & _
"FROM Tbl1 ... " & _
"GROUP BY " & _
"ORDER BY Ext1"


Послушай чей-то я видать не догоняю. Мне это в модуль писать или SQL запрос такой в таблицу загнать
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573659
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikP Rivkin Dmitry
Код: plaintext
1.
2.
3.
se = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " As Ext1, Sum(...) As Ext2 " & _
"FROM Tbl1 ... " & _
"GROUP BY " & _
"ORDER BY Ext1"


Послушай чей-то я видать не догоняю. Мне это в модуль писать или SQL запрос такой в таблицу загнать

Твой запрос, видимо, хранимый?

Прежде чем ты его откроешь, делаешь так:

Dim db as DataBase: Set db= CurrentDb
Dim Qd as QueryDef: Set qd = db.QueryDefs("MyQry")

qd.SQL = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " ...

Все, пользуся запросом, как хочешь, текст его уже сохранен.
Удобно еще и тем, что когда ты его откроешь в построителе, увидешь все наглядно. И прогнать можешь на время
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573714
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему мы друг друга немного не понимаем.

Объясняю картину:
1.Есть таблица в ней поле MEMO в котором хранится запрос
2.Запрос основан на другом запросе с определенными параметрами и таблице
3.На основе таблицы в которой храниться запрос построена форма в ней есть поле в котором указан текст запроса(поле MEMO)
4.В форме также есть график, у которого RowSourse присваивается ссылка на поле с текстом запроса
5.В форме также есть группа переключателей "Дата" и список на основании которых меняются данные запроса
6.Надо сделать экспорт данных получаемых в результате запроса в Excel через кнопку
7.Но OpenRecordset ругается и не хочет пускать текст запроса (надо 5 параметров)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573743
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, не понимаю, зачем текст запроса хранить в таблице, для этого и существуют хранимые запросы. Но это не меняет дела. То что касалось

qd.SQL = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " ...

переделай как
UPDATE MEMO_Tbl SET MEMO = "SELECT " & MyDateFormat([Forms]![000_Volume]![Date]) & " ...

и все осталось, как у тебя
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32573823
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за поддержку. Я пропаду на немного попробую все переварить, может на самом деле наворотил лишку. Приду в себя объявлю результаты
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574087
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function MyDateFormat(dum As Integer) As String

    Select Case dum
    Case  1 
        MyDateFormat = Format([Date], "dd/mm/yy")
    Case  2 
        MyDateFormat = CByte((([Date] - # 12 / 31 / 2000 #) - CByte(([Date] - # 12 / 31 / 2000 #) /  364  -  0 . 4999 ) *  364 ) /  7  +  0 . 6 )
    Case  3 
        MyDateFormat = Format([Date], "mmmm  yy")
    Case  4 
        MyDateFormat = Format([Date], "q  yy")
    Case  5 
        MyDateFormat = Format([Date], "yyyy")
    End Select

End Function


Послушай а откуда функция берет [Date] ? На сколько я понимаю там должна быть конкретная дата, которую функция преобразует в нужный формат.
В результате должна быть ссылка на запрос или таблицу
Я правильно понял?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574396
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, что Rivkin Dmitry на форуме нет. Может кто другой подскажет?
Вопрос в принципе простой
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574402
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Дата] тоже надо в функцию передавать в виде аргумента
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574412
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и я так же подумал. По другому ведь ее не видно
Спасибо за помощь! Буду разбирать дальше
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574445
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пришел. При написании функции я пользовался текстом запроса автора и в третий раз за сегодня был не внимателен. [Дата] является полем таблиц [00_Дата].Дата и [001_Регион].Дата. Поэтому, передавать параметр в функцию не надо, но функцию надо слегка изменить:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Function MyDateFormat(dum As Integer) As String

    Select Case dum
    Case  1 
        MyDateFormat = "Format([Date], ""dd/mm/yy"")"
    Case  2 
        MyDateFormat = "CByte((([Date] - #12/31/2000#) - CByte(([Date] - #12/31/2000#) / 364 - 0.4999) * 364) / 7 + 0.6)"
    Case  3 
        MyDateFormat = "Format([Date], ""mmmm  yy"")"
    Case  4 
        MyDateFormat = "Format([Date], ""q  yy"")"
    Case  5 
        MyDateFormat = "Format([Date], ""yyyy"")"
    End Select

End Function

Я очень извиняюсь, наверное, поспешил
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574517
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К стати проверил скорость функции со вставкой даты как второго параметра
Работает в 5 раз медленее

И еще. А каким образом [Date] будет браться из таблиц, если ни таблицы, ни запрос к таблицам не открыты?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574522
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPК стати проверил скорость функции со вставкой даты как второго параметра
Работает в 5 раз медленее

И еще. А каким образом [Date] будет браться из таблиц, если ни таблицы, ни запрос к таблицам не открыты?

В 5 раз медленнее чего? Если функция не работает, что мы проверяли?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574532
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос через IIf
Код: plaintext
1.
2.
3.
SELECT IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy")))))) AS Выражение2
FROM 000_V
GROUP BY IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy"))))));
Работает быстрее в 5 раз чем через функцию
Код: plaintext
1.
2.
3.
SELECT MyDateFormat([Forms]![000_Объемы]![Дата],[Дата]) AS Выражение1
FROM 000_V
GROUP BY MyDateFormat([Forms]![000_Объемы]![Дата],[Дата]);
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574550
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погодь немного, я постараюсь расписать все. Со скоростью - мне не понятно.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574578
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прежде всего, в этом выражении - ошибка и твой запрос не должен работать вообще:

Код: plaintext
1.
2.
3.
4.
5.
IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),
IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-
CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),
IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),
IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),
IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy")))))) 
отсутствует один оператор
Д.быть
IIf([Forms]![000_Объемы]![Дата]=1,Format([Дата],"dd/mm/yy"),
IIf([Forms]![000_Объемы]![Дата]=2,CByte((([Дата]-#12/31/2000#)-
CByte(([Дата]-#12/31/2000#)/364-0.4999)*364)/7+0.6),
IIf([Forms]![000_Объемы]![Дата]=3,Format([Дата],"mmmm yy"),
IIf([Forms]![000_Объемы]![Дата]=4,Format([Дата],"q yy"),
IIf([Forms]![000_Объемы]![Дата]=5,Format([Дата],"yyyy") , < expression > )))))
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574592
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю как, но он работает и работает прилично.
Если хочешь проверь сам. Только таблицу свою подставь и все. Желательно, чтобы в таблице было строк где-нибудь 50 000. Сразу увидишь разницу
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574594
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О птичках. У меня база mdb на Access 2000
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574630
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А дату выдает правильно? И насколько я помню, запрос не открывается в рекордсете?

Функцию я сварганил такую:
Код: 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.
34.
Function MySql(dum As Integer) As String
    Dim slct As String, Grp As String, Ord As String
    
    Select Case dum
    Case  1 
        slct = "Format([Date], ""dd/mm/yy"")"
        Grp = "Format([Date],""dd/mm/yy""), Year([Date])*365+Month([Date])*31+Day([Date]) "
        Ord = "Format([Date],""dd/mm/yy"") "
    Case  2 
        slct = "CByte((([Date] - #12/31/2000#) - CByte(([Date] - #12/31/2000#) / 364 - 0.4999) * 364) / 7 + 0.6)"
        Grp = "CByte((([Date]-#12/31/2000#)-CByte(([Date]-#12/31/2000#)/364-0.4999)*364)/7+0.6), CByte(([Date]-#12/31/2000#)/7+0.6) "
        Ord = "CByte((([Date]-#12/31/2000#)-CByte(([Date]-#12/31/2000#)/364-0.4999)*364)/7+0.6) "
    Case  3 
        slct = "Format([Date], ""mmmm  yy"")"
        Grp = "Format([Date],""mmmm  yy""), Year([Date])*12+Month([Date]) "
        Ord = "Format([Date],""mmmm  yy"") "
    Case  4 
        slct = "Format([Date], ""q  yy"")"
        Grp = "Format([Date],""q  yy""), Year([Date])*4+CByte(Month([Date])/3+0.2) "
        Ord = "Format([Date],""q  yy"") "
    Case  5 
        slct = "Format([Date], ""yyyy"")"
        Grp = "Format([Date],""yyyy""), Year([Date]),0) "
        Ord = "Format([Date],""yyyy"") "
    End Select
    
    MySql = "SELECT " & slct & _
        ", Sum([001_Region].[Sum-Sold_Kg]) As Tonnage " & vbCrLf & _
        "FROM 00_Date " & vbCrLf & _
        "LEFT JOIN 001_Region " & vbCrLf & _
        "ON [00_Date].[Date] = [001_Region].[Date] " & vbCrLf & _
        "GROUP BY " & Grp & vbCrLf & _
        "ORDER BY " & Ord

End Function

Вызов ее вернет тебе текст запроса

Код: plaintext
MySql([Forms]![000_Объемы]![Дата])
Например, если [Forms]![000_Объемы]![Дата] = 1, получишь

Код: plaintext
1.
2.
3.
4.
5.
SELECT Format([Date], "dd/mm/yy"), Sum([001_Region].[Sum-Sold_Kg]) As Tonnage 
FROM 00_Date 
LEFT JOIN 001_Region 
ON [00_Date].[Date] = [001_Region].[Date] 
GROUP BY Format([Date],"dd/mm/yy"), Year([Date])* 365 +Month([Date])* 31 +Day([Date]) 
ORDER BY Format([Date],"dd/mm/yy") 

Если 2:
Код: plaintext
1.
2.
3.
4.
5.
SELECT CByte((([Date] - # 12 / 31 / 2000 #) - CByte(([Date] - # 12 / 31 / 2000 #) /  364  -  0 . 4999 ) *  364 ) /  7  +  0 . 6 ), Sum([001_Region].[Sum-Sold_Kg]) As Tonnage 
FROM 00_Date 
LEFT JOIN 001_Region 
ON [00_Date].[Date] = [001_Region].[Date] 
GROUP BY CByte((([Date]-# 12 / 31 / 2000 #)-CByte(([Date]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ), CByte(([Date]-# 12 / 31 / 2000 #)/ 7 + 0 . 6 ) 
ORDER BY CByte((([Date]-# 12 / 31 / 2000 #)-CByte(([Date]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ) 

Запрос я не запускал, таблицы лень делать. Вместо русских слов, подставил английские, иначе не вижу текст. Тебе надо вернуть все назад.
Возможно, что я что-то напутал или ошибся. Проверь. Если что не так - стучи!
Я пока на форуме. Пробуй. Удачи!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574635
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, что так развернул!
Сегодня полностью опробовать не получится. Скоро с работы уйду. Результат скажу завтра.
Еще раз спасибо. Намучался наверно писавши. Объемчик не малый
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574646
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать (ударение) не трудно - копируй себе, сложно проверять, что правильно сложил все. А еще волнение - правильно ли я твою задачу понимаю, а то может быть зря воздух сотрясаю...
Хотя и корысть есть - вдруг правильно понял и правильео тиснул - мой код опубликован будет!!! 8-)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574660
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты еще не ушел, а что ты вычисляешь в выражении
Код: plaintext
CByte(((Date - # 12 / 31 / 2000 #) - CByte((Date - # 12 / 31 / 2000 #) /  364  -  0 . 4999 ) *  364 ) /  7  +  0 . 6 )
?
Я что-то не въехал. Если номер текущей недели в году то есть готовая функция format(date,"ww"), которая и возвращает значение. Тогда стоит подправить нашу функцию в соответствующих местах.
А что здесь Year([Date])*12+Month([Date]) и здесь Year([Date])*4+CByte(Month([Date])/3+0.2) ???
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574895
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryЕсли ты еще не ушел, а что ты вычисляешь в выражении
Код: plaintext
CByte(((Date - # 12 / 31 / 2000 #) - CByte((Date - # 12 / 31 / 2000 #) /  364  -  0 . 4999 ) *  364 ) /  7  +  0 . 6 )
?
Я что-то не въехал. Если номер текущей недели в году то есть готовая функция format(date,"ww"), которая и возвращает значение. Тогда стоит подправить нашу функцию в соответствующих местах.
А что здесь Year([Date])*12+Month([Date]) и здесь Year([Date])*4+CByte(Month([Date])/3+0.2) ???

1. Ты правильно понял вычисляется номер недели. Только в формате ww есть один минус. Он считает, что в году 53 недели, а на самом деле их 52 просто 53-я переходит в 1. При сравнении разных годов по неделям это не прокатывает.

2. Year([Date])*12+Month([Date]) считает номер недели, но прибавляет к ней год

3. Year([Date])*4+CByte(Month([Date])/3+0.2) то же, что и 2 только не месяц, а квартал

Для чего все это нужно:

Если брать несколько годов и сортировать их, то текстовый формат даты будет сортироваться не корректно. Вот для этого и нужен еще один столбец в запросе по которому будет производиться сортировка.
А 2-й вариант предлагает сам мастер в Access, когда делаешь диаграмму, ну а остальное сам наваял по аналогии
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574905
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро!
Понятно с датами - твои прблемы.
Я думаю, что функцию, что я крапал, нужно уточнить. Во всех местах, где написано

"Format([Date] ....

надо написать "Format([00_Date].[Date]

иначе в запросе будет неопределенность с полями выборки
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574922
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати! Когда я предлагал два запроса (один с функцией, а другой с IIf) и IIf работал в 5 раз быстрее, то там скорее всего дело вот в чем:

IIf обращается в форму смотрит на значение переключателя и сразу форматирует весь массив

Функция обращается в форму к переключателю на каждой записи, а это не к чему. из-за этого и тормозит

Но я смотрю последний вариант вроде бы это исключил. Я случаем не ошибаюсь, а то может надо сначала скорректировать???
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574931
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец-то, как мне кааатся, ты уловил идею: на каждый новый запрос просто строим новый стринг, который мало чем отличается от твоего, просто упрощается. Но для меня остается загадкой как у тебя работал запрос с неправильным использованием IIf(IIf(IIf(?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574940
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryНо для меня остается загадкой как у тебя работал запрос с неправильным использованием IIf(IIf(IIf(?

Понятия не имею выкладываю еще раз (скопировал из работающего запроса)
Код: plaintext
1.
2.
SELECT IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy")))))) AS Выражение2
FROM 000_V
GROUP BY IIf([Forms]![000_Объемы]![Дата]= 1 ,Format([Дата],"dd/mm/yy"),IIf([Forms]![000_Объемы]![Дата]= 2 ,CByte((([Дата]-# 12 / 31 / 2000 #)-CByte(([Дата]-# 12 / 31 / 2000 #)/ 364 - 0 . 4999 )* 364 )/ 7 + 0 . 6 ),IIf([Forms]![000_Объемы]![Дата]= 3 ,Format([Дата],"mmmm  yy"),IIf([Forms]![000_Объемы]![Дата]= 4 ,Format([Дата],"q  yy"),IIf([Forms]![000_Объемы]![Дата]= 5 ,Format([Дата],"yyyy"))))));

Может кто-нибудь другой объяснит
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574966
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в запросе в функции IIF можно опустить второй аргумент. А в редакторе VBA будет ругаться на компиляции.
Попробуйте
SELECT IIf(2=2,"Да ну!") AS ОПА FROM Tbl1;
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32574982
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander GА в запросе в функции IIF можно опустить второй аргумент. А в редакторе VBA будет ругаться на компиляции.
Попробуйте
SELECT IIf(2=2,"Да ну!") AS ОПА FROM Tbl1;

Действительно! И открытии рекордсета возможно! Спасибо, Alexander!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575091
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander GА в запросе в функции IIF можно опустить второй аргумент. А в редакторе VBA будет ругаться на компиляции.


Я тут смотрю ларчик похоже просто открывался?(Ошибка при открытии Recordset)

А функцию я протестировал ВСЕ РАБОТАЕТ!!! И СКОРОСТЬ НОРМАЛЬНАЯ!!!
Немного подредактировал правда. Но идея мне понравилась (хитро)
перехожу на открытие Recordset
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575323
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил в Open.Recordset теперь пишет 4 параметра
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Function yuq()

Dim qweSQL As String
Dim rst As ADODB.Recordset

Set objE = New Excel.Application
objE.Workbooks.Add
objE.Visible = True

qweSQL = MySql

Set rst = CurrentDb.OpenRecordset(qweSQL)

End Function

Вот запрос который получается по функции MySql
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT Format([Дата], "mmmm  yy"), Sum([001_Регион].[Sum-Продано_кг]) As Тоннаж 
FROM 00_Дата 
LEFT JOIN 001_Регион 
ON [00_Дата].[Дата] = [001_Регион].[Дата_] 
GROUP BY Format([Дата],"mmmm  yy") ,Year([Дата])* 12 +Month([Дата]) 
ORDER BY Year([Дата])* 12 +Month([Дата]) 

В чем проблема люди?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575437
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С 4 параметрами вроде разобрался Ему похоже " " не нравятся
буду править
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575507
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPС 4 параметрами вроде разобрался Ему похоже " " не нравятся
буду править

Попробуй еще здесь поменять:

ON [00_Дата].[Дата] = [001_Регион].[Дата_]
GROUP BY Format([00_Дата].[Дата],"mmmm yy") ,Year([00_Дата].[Дата])*12+Month([00_Дата].[Дата])
ORDER BY Year([00_Дата].[Дата])*12+Month([00_Дата].[Дата])
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575544
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry NikPС 4 параметрами вроде разобрался Ему похоже " " не нравятся
буду править

Попробуй еще здесь поменять:

ON [00_Дата].[Дата] = [001_Регион].[Дата_]
GROUP BY Format([00_Дата].[Дата],"mmmm yy") ,Year([00_Дата].[Дата])*12+Month([00_Дата].[Дата])
ORDER BY Year([00_Дата].[Дата])*12+Month([00_Дата].[Дата])
Да не с [Дата] все нормально (ON [00_Дата].[Дата] = [001_Регион].[Дата_]) Вторая дата идет как [Дата_]

Я тут немного подправил сейчас Type mismatch пишет
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function yup()

Dim rst As ADODB.Recordset

qweSQL = "SELECT #" & Format([Дата], "dd/mm/yy") & _
         "#, Sum([001_Регион].[Sum-Продано_кг]) As Тоннаж " & _
         "FROM 00_Дата LEFT JOIN 001_Регион ON [00_Дата].[Дата] = [001_Регион].[Дата_]" & _
         "GROUP BY#" & Format([Дата], "dd/mm/yy") & _
         "# ,Year([Дата])*365+Month([Дата])*31+Day([Дата])" & _
         "ORDER BY Year([Дата])*365+Month([Дата])*31+Day([Дата])"

Set rst = CurrentDb.OpenRecordset(qweSQL)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575573
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно сильно извеняюсь, не мне в разговор "монстров" встревать, но у меня работает так
qweSQL = "SELECT #" & Format([Дата], ""dd/mm/yy"") & _
"#, Sum([001_Регион].[Sum-Продано_кг]) As Тоннаж " & _
"FROM 00_Дата LEFT JOIN 001_Регион ON [00_Дата].[Дата] = [001_Регион].[Дата_]" & _
"GROUP BY#" & Format([Дата], ""dd/mm/yy"") & _
"# ,Year([Дата])*365+Month([Дата])*31+Day([Дата])" & _
"ORDER BY Year([Дата])*365+Month([Дата])*31+Day([Дата])"
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575606
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирча на твой вриант ругается List separator or) и указывает на dd

Я так понял ты предложила dd/mm/yy заключить в двойные " других различий я вроде не заметил. Может у тебя там что-нибудь еще есть?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575661
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ау! Люди! такое впечатление, что все вымерли.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575677
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Встряну не в тему - если это копировали из кода программы, то!

Код: plaintext
1.
2.
3.
4.
5.
qweSQL = "SELECT #" & Format([Дата], "dd/mm/yy") & _
         "#, Sum([001_Регион].[Sum-Продано_кг]) As Тоннаж " & _
         "FROM 00_Дата LEFT JOIN 001_Регион ON [00_Дата].[Дата] = [001_Регион].[Дата_]_" & _
         "GROUP BY_#" & Format([Дата], "dd/mm/yy") & _
         "# ,Year([Дата])*365+Month([Дата])*31+Day([Дата])_" & _
         "ORDER BY Year([Дата])*365+Month([Дата])*31+Day([Дата])"

Там где подчеркнул - должны быть пробелы
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575694
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К paparome
пробелы поставил все равно Type mismatch

кстати! спасибо, что встрял, а то сижу как в пустыне
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575696
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я извиняюсь, но теперь я не догоняю.
В каком Аксе ты работаешь?
Я привык к А97 и возможно, поэтому не понимаю, разве это работает?

Dim rst As ADODB .Recordset
...
Set rst = CurrentDb .OpenRecordset(qweSQL) ?
Это ведь смесь АДО и ДАО и как Format может работать в АДО?
Поясните

Теперь,
Код: plaintext
qweSQL = "SELECT #" & Format([Дата], "dd/mm/yy") & _
это совсем не то, что задумывалось в функции - [Дата] - это поле из таблицы, поэтому, оно должно быть внутри стринга.
Короче, или я запутался, или ты...

Ирча, здравствуй! Не самоуничижайся! Важно, что в тебе есть интерес к происходящему, а опыт - вещь наживная... Что нибудь с моей просьбой продвинулось?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575716
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К Dmitry

Могу сказать одно все равно нифига не хочет работать
ADO и DAO я понимаю что вещи разные
по-поводу Format [Дата] понимаю, что дата берется из таблицы

Но что-то делать надо! ответов нет, вот и извращаюсь как могу. Может хоть что-нибудь поможет
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575719
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryЧто нибудь с моей просьбой продвинулось?
Пока не очень, то ли они очень скрытные, то ли у них компы отсутствуют
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575739
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирча Rivkin DmitryЧто нибудь с моей просьбой продвинулось?
Пока не очень, то ли они очень скрытные, то ли у них компы отсутствуют
Может у тебя в Надыме в Газпроме есть знакомые, через них можно? В любом случае - спасибо!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575741
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPК Dmitry

Могу сказать одно все равно нифига не хочет работать
ADO и DAO я понимаю что вещи разные
по-поводу Format [Дата] понимаю, что дата берется из таблицы

Но что-то делать надо! ответов нет, вот и извращаюсь как могу. Может хоть что-нибудь поможет

Давай тогда сначала, опиши последние проблемы
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575754
Фотография Ирча
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь скинуть примерчик мне на мыло.
Я завтра последний день работаю, делать нечего, покопаюсь, может чем помогу
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575757
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Раньше писал, что надо 5 параметров после наших изменений стал просить 4
2.После того, как начал ставить #" & Ругается Type mismatch

Не пропадай пожалуйста туго без советов или если планируешь пропасть говори, я у народа помощи попрошу
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575765
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго все это проистекает...
Там сколько - 2 таблицы?
Сделай базку с ними (на несколько записей), модуль с процедуркой, заархивируй, запости сюда, завтра утром (а у меня уже первый час ночи) посмотрю, если кто-нибудь не захочет разобраться раньше.
А то уже третья страница пошла, и все никак...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575774
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я сам уже замаялся никогда на форуме так долго проблемы не решал, а тут уже второй день сижу. Сейчас подготовлю и все скину
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575782
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dmitry
Format-y без разницы ,что ADO ,что DAO. Это функция VBA .А вот
Код: plaintext
1.
2.
Dim rst As ADODB.Recordset
...
Set rst = CurrentDb.OpenRecordset(qweSQL) 
Действительно никуда не годиться .
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575806
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(c)VIG2 Dmitry
Format-y без разницы ,что ADO ,что DAO. Это функция VBA .А вот
Код: plaintext
1.
2.
Dim rst As ADODB.Recordset
...
Set rst = CurrentDb.OpenRecordset(qweSQL) 
Действительно никуда не годиться .

Я просто привык если ADODB, так SQL Server, а там Format не пашет...

2 AnTT
Пока не убегаю, но работа у меня тоже...
Совет - если закапался и не видишь выхода, отойди от компа минут на 10, попей чайку, подумай о девушке (если ты парень или о парне, если ты девушка) и потом возвращайся. Иди к тому месту, где еще как-то работало и от него продвигайся по-новой...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575959
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкладываю кусок базы
Посмотрите что не так?

Задача состоит в том, чтобы по кнопке43 на форме выложить в Excel данные и построить такой же график как на форме. Застрял на OpenRecordset (Ну очень сильно ругается)

Заранее благодарен
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575990
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю!
Собирать весь (!) запрос в стринг. А не использовать уже существующие.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32575997
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можешь запаковать в zip? rar - не могу открыть. Вообще, ожет быть проблема уменя, у тебя поля и таблицы названы русскими словами, боюсь, у меня комп не возьмет...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576044
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйПредлагаю!
Собирать весь (!) запрос в стринг. А не использовать уже существующие.
Это лаконичное выражение той мысли, которую я провожу в этом топике, какжктся, пока безуспешно :(
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576050
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другое дело, что собирать затрахаешься. Это уже такой изгол с SQL что мама не горюй.
Держи zip.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576055
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкладываю в ZIP формате
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576061
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опоздал, опоздал!
И еще у тебя на 3 килобайта больше
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576085
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТемныйДругое дело, что собирать затрахаешься. Это уже такой изгол с SQL что мама не горюй.
Держи zip.

То что затрахаешься это точно. У меня запрос 001_Регионы в реальности из 5-7 столбцов состоит и в каждом условия

По поводу того, что объем больше: Может объем и больше а вот таблицу основную пришлось в половину урезать не хочет RAR в формате ZIP хорошо сжимать
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576098
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня-то сжал
Best compression ставить надо!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576178
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛЮДИ!!!
НЕ ОСТАВЛЯЙТЕ БЕЗ ВНИМАНИЯ!!!
ПОМОГИТЕ!!!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576319
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АУ-У-У-У-У-У-У-У-У-У-У ! ! !
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576368
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPАУ-У-У-У-У-У-У-У-У-У-У ! ! !

Меня не было. Сейчас попробую качнуть твой файл. Ты сколько еще будешь?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576391
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До 8,30 буду
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Function yup()

Dim rst As DAO.Recordset


Set rst = CurrentDb.OpenRecordset("SELECT Format([Дата],""dd/mm/yy"") AS Выражение1, Sum([001_Регион].[Sum-Продано_кг]) AS Тоннаж" & vbCrLf & _
"FROM 00_Дата LEFT JOIN 001_Регион ON [00_Дата].Дата = [001_Регион].Дата_" & vbCrLf & _
"GROUP BY Format([Дата],""dd/mm/yy""), Year([Дата])*365+Month([Дата])*31+Day([Дата])" & vbCrLf & _
"ORDER BY Year([Дата])*365+Month([Дата])*31+Day([Дата]);")

End Function
Теперь говорит только об 1 параметре
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576424
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем она тебе нужна эта ф-ия?
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576425
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry NikPАУ-У-У-У-У-У-У-У-У-У-У ! ! !

Меня не было. Сейчас попробую качнуть твой файл. Ты сколько еще будешь?

Я еще пока здесь!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576429
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryА зачем она тебе нужна эта ф-ия?

да я данные в Excel хочу экспортировать, и в нем график построить такой же как на форме
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576439
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже собираюсь! В дверь охранники стучат и говорят: "А не заработался ли ты парень?"
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576454
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikPЯ уже собираюсь! В дверь охранники стучат и говорят: "А не заработался ли ты парень?"

Мне - тоже стучат! Но и наворочано у тебя! Главное, что у меня плохо работает с русским, приходится все транслировать на английский. Завтра - не работаем. Сколько смогу, сделаю. Остальное в воскресенье...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576476
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взгляни, что я наисал, если что не поймешь, спрашивай на форуме или в воскресенье...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576523
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел. Дело в том, что он не может получить в используемом запросе 001_Регион ссылку на поле Список8 формы. А отдельно все нормально, в запросах все работает, подставляем qweSQL - в запрос все работает, а в OpenRecordset - нет.
Мое предложение - динамически менять свойство SQL запроса 001_Регион, если не хочется строить нагромождение в одном запросе.
Т.е. :
Код: 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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Function MySql() As String
    Dim slct As String, Grp As String, Ord As String
    Dim dum As Integer
    'начало вставки
 
    Dim qry As DAO.QueryDef
    Dim reg As Long
    reg = Forms![000_Объемы]![Список8]
    Set qry = CurrentDb.QueryDefs("001_Регион")
    qry.SQL = "SELECT [000_V].Область, [000_V].Дата AS Дата_, Sum([000_V].Продано_кг) AS " & _
              "[Sum-Продано_кг] FROM 000_V GROUP BY [000_V].Область, [000_V].Дата " & _
              "HAVING ((([000_V].Область)=" & reg & "));"    
    'конец вставки
 
dum = Forms![000_Объемы]![Дата]
    
    Select Case dum
    Case  1 
        slct = "Format([Дата], ""dd/mm/yy"")"
        Grp = "Year([Дата])*365+Month([Дата])*31+Day([Дата]) "
        Ord = "Format([Дата],""dd/mm/yy"") "
    Case  2 
        slct = "CByte((([Дата] - #12/31/2000#) - CByte(([Дата] - #12/31/2000#) / 364 - 0.4999) * 364) / 7 + 0.6)"
        Grp = "CByte(([Дата]-#12/31/2000#)/7+0.6) "
        Ord = "CByte((([Дата]-#12/31/2000#)-CByte(([Дата]-#12/31/2000#)/364-0.4999)*364)/7+0.6) "
    Case  3 
        slct = "Format([Дата], ""mmmm  yy"")"
        Grp = "Year([Дата])*12+Month([Дата]) "
        Ord = "Format([Дата],""mmmm  yy"") "
    Case  4 
        slct = "Format([Дата], ""q  yy"")"
        Grp = "Year([Дата])*4+CByte(Month([Дата])/3+0.2) "
        Ord = "Format([Дата],""q  yy"") "
    Case  5 
        slct = "Format([Дата], ""yyyy"")"
        Grp = "Year([Дата]) "
        Ord = "Format([Дата],""yyyy"") "
    End Select
    
    MySql = "SELECT " & slct & _
        ", Sum([001_Регион].[Sum-Продано_кг]) As Тоннаж " & vbCrLf & _
        "FROM 00_Дата " & vbCrLf & _
        "LEFT JOIN 001_Регион " & vbCrLf & _
        "ON [00_Дата].[Дата] = [001_Регион].[Дата_] " & vbCrLf & _
        "GROUP BY " & Ord & "," & Grp & vbCrLf & _
        "ORDER BY " & Grp

End Function
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576525
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Rivkin Dmitry - это я NikP ответил, а то получилось, что отвечаю предыдущий пост.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576690
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander GПосмотрел. Дело в том, что он не может получить в используемом запросе 001_Регион ссылку на поле Список8 формы.

Ругается действительно туда! У меня в реальности в таблице 001_Регион 6 столбцов, а не 3 как в примере. В результате в примере ругается на 1 параметр, а в базе на 4.

ВРОДЕ ПОДОШЛИ БЛИЗКО К ЗАВЕРШЕНИЮ !!!
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576802
AnTT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот никак не думал, что моя тема вызовет столь бурную дискуссию...
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32576813
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnTTВот никак не думал, что моя тема вызовет столь бурную дискуссию...

Круто, да?

Только ИМХО - тут уже 3 страницы другой селект править пытаются :)
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32577170
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NikP:
/topic/101851&pg=4#764513
Все. Это уже полноценное решение. Главная проблема - избавиться от запроса с параметром решена. Теперь только добавить еще 3 твоих столбца.
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32577254
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Темный2 NikP:
/topic/101851&pg=4#764513
Все. Это уже полноценное решение. Главная проблема - избавиться от запроса с параметром решена. Теперь только добавить еще 3 твоих столбца.

дык я это уже понял. просто голова немного болела и с самого утра не стал садиться за конкретное внедрение. Сейчас все Ok. Сажусь и начинаю внедрять
...
Рейтинг: 0 / 0
Рекордсет на основе запроса
    #32579072
NikP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin DmitryВзгляни, что я наисал, если что не поймешь, спрашивай на форуме или в воскресенье...

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


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