powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рекордсет на основе запроса
25 сообщений из 102, страница 1 из 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
25 сообщений из 102, страница 1 из 5
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рекордсет на основе запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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