Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Рекордсет на основе запроса / 25 сообщений из 102, страница 1 из 5
22.06.2004, 17:37:27
    #32572342
AnTT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
Литературу читал, но мало.
Всё изучал на практике и на хелпах.

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

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

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

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

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

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

:)))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

можно поподробнее, как это сделать?
...
Рейтинг: 0 / 0
22.06.2004, 18:08:38
    #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
23.06.2004, 10:08:07
    #32573073
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
Люди! Та же самая проблема. Где ошибка знаю, но не знаю как исправить.
не хочет воспринимать Format([Дата],"dd/mm/yy")
...
Рейтинг: 0 / 0
23.06.2004, 10:12:54
    #32573086
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
Здесь можно посмотреть про даты в запросе:
http://www.sql.ru/faq/faq_topic.aspx?fid=157

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

может mm dd yyyy и где ёлки
...
Рейтинг: 0 / 0
23.06.2004, 10:56:30
    #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
23.06.2004, 11:05:05
    #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
23.06.2004, 11:06:46
    #32573217
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
он вот этого не может найти

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

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

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

А расшифровку для чайников можно?
...
Рейтинг: 0 / 0
23.06.2004, 11:46:23
    #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
23.06.2004, 12:08:47
    #32573398
NikP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
А со скоростью обработки у функции все нормально будет?
А то я сначала за место вычислений в запросе функцию писал, так она в час по чайной ложке работала, хотя формула была один в один. У меня массивы по 50 000 строк и более, а обрабатываться должно с полпинка
...
Рейтинг: 0 / 0
23.06.2004, 12:18:03
    #32573427
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рекордсет на основе запроса
авторУ меня массивы по 50 000 строк и более, а обрабатываться должно с полпинка

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

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

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

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

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


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