Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: составной запрос
 
 автор: kot_k_k   (10.10.2012 в 13:21)   личное сообщение
 
 

слепил запрос из 2-х запросов, в одном из них обращение к форме за датой для Where
проблем нет работает но когда я хочу эту-же SQL строку открыть в коде как рекордсет - грит про нехватку параметров.
как енто побороть?

  Ответить  
 
 автор: Силblч   (10.10.2012 в 13:42)   личное сообщение
 
 

как всегда :) - вставить параметр

  Ответить  
 
 автор: kot_k_k   (10.10.2012 в 14:17)   личное сообщение
 
 

в сам текст запроса воткнуть название поля формы - как в перекрестном?

  Ответить  
 
 автор: Силblч   (10.10.2012 в 14:35)   личное сообщение
 
 

тышь сам написал - в коде
я так понимать - в коде VBA?
ну стало быть и формируй SQL - строку как строку с конкатенцией
сразу значения подставляй форменный в формируемый скул

  Ответить  
 
 автор: kot_k_k   (10.10.2012 в 15:23)   личное сообщение
 
 

строка вот такого вида


str_ = "SELECT Запрос54.Nom, Sum(Запрос55.[Sum-Summa]) AS [Sum-Sum-Summa] " & _
            "FROM Запрос54 INNER JOIN Запрос55 ON Запрос54.Nomer = Запрос55.Nomer " & _
            "GROUP BY Запрос54.Nom " & _
            "HAVING Запрос54.Nom=" & 159


но в самом Запрос55 - там есть обращение в полю формы - вот тут оно и орет, я думаю.
хотя если перевести в конструктор запроса - отрабатывает на уря.

  Ответить  
 
 автор: snipe   (10.10.2012 в 15:34)   личное сообщение
 
 

так ты сюда подсунь запрос55
и отсюда делай напрямую без обращения к запросу

  Ответить  
 
 автор: kot_k_k   (10.10.2012 в 17:30)   личное сообщение
 
 

я так понял типо - вот такой конструкции


SELECT n1.group_id
FROM 
(SELECT grp.group_id, Count(grp.id_handle) AS Count_handle
FROM nic_handle INNER JOIN grp ON nic_handle.id_handle = grp.id_handle
WHERE nic_handle.nic_hande IN ('biz','host')
GROUP BY grp.group_id) AS n1
INNER JOIN 
(SELECT grp.group_id, Count(grp.group_id) AS Count_group
FROM (SELECT grp.group_id, Count(grp.id_handle) AS Count_handle
FROM nic_handle INNER JOIN grp ON nic_handle.id_handle = grp.id_handle
WHERE nic_handle.nic_hande IN ('biz','host')
GROUP BY grp.group_id) AS n1 INNER JOIN grp ON n1.group_id = grp.group_id
GROUP BY grp.group_id) AS n2
ON (n1.Count_handle = n2.Count_group) AND (n1.group_id = n2.group_id)
WHERE ((n1.Count_handle=2));


но как ее правильно сотворить - ХЗ

  Ответить  
 
 автор: snipe   (10.10.2012 в 18:29)   личное сообщение
 
 

примерно


а выложи тексты запроса54 и запроса55

у тебя будет примерно так

str_ = "SELECT a1.Nom, Sum(a2.[Sum-Summa]) AS [Sum-Sum-Summa] " & _
"FROM (Select....from типа текст запроса 54) as a1 INNER JOIN (Select ....from типа текст запроса 55) as a2 ON a1.Nomer = a2.Nomer " & _
"GROUP BY a1.Nom " & _
"HAVING a1.Nom=" & 159

ну а там по ходу вставишь в нужные места ссылки на поля формы

  Ответить  
 
 автор: kot_k_k   (06.11.2012 в 13:28)   личное сообщение
 
 

интересно - почему так???

сотворил запрос в конструкторе - работает
скопировал в код - акс в истерику.
начинаю строку разбирать - наткнулся на такой фрагмент сделанный конструктором запросов:


FROM gurn_lzk LEFT JOIN
[SELECT distinct Gurn_LZK.Kod_LZK_plan
FROM (Gurn_LZK INNER JOIN Spec_Otgr ON Gurn_LZK.Kod_LZK_plan = Spec_Otgr.Izd) INNER
JOIN Gurn_Spec_Otgr ON Gurn_LZK.Kod_LZK_plan = Gurn_Spec_Otgr.Izd
WHERE (((Gurn_LZK.Kod_LZK_plan)>=4800) AND ((nz([Spec_Otgr].[Chert],0))<>0))]. AS LZK_1



как видно конструктор поставил вложенный запрос в []. (скобки с точкой ) - и все ОК,
но таже строка в Openrecordset - вызывает вопли, заменил на () без точки - все ОК.

  Ответить  
 
 автор: snipe   (06.11.2012 в 15:57)   личное сообщение
 
 

http://hiprog.com/forum/read.php?id_forum=1&id_theme=10625&page=1

  Ответить  
 
 автор: Анатолий (Киев)   (06.11.2012 в 16:56)   личное сообщение
 
 

Вместо Set rst = CurrentDB.OpenRecordset("Select...") в вашем случае надо:
Set qdf = CurrentDB.CreateQueryDef("","SELECT...")
qdf.Parameters(0) = EVal(qdf.Parameters(0).Name)
Set rst = qdf.OpenRecordset()

Или в запрсе ссылку на форму обернуть в EVal, а затем в CDate - будет работать везде (если поле на форме не пустое).

  Ответить  
 
 автор: kot_k_k   (06.11.2012 в 18:14)   личное сообщение
 
 

век живи - век учись - списибо

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList