Помогите разобраться с запросом

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Помогите разобраться с запросом

Сообщение yura613 » 27.06.2007 (Ср) 22:42

Привет всем, помогите пож. разобраться.
Я формирую sql запрос, и потом пытаюсь открыть его. Но почему то выскакиевает ошибка "Слишком мало паремтров. Требуется 1".
Неработающий код
Код: Выделить всё
Dim basa As DAO.Database
Dim RecNum As DAO.Recordset
Dim SN As String, SQLStr As String
Dim i As Integer, max As Integer

Set basa = CurrentDb

SQLStr = "SELECT Партии.[Код SAP], Партии.[Экспертное заключение], Партии.Статус FROM Партии " & _
"WHERE (((Партии.[Код SAP])=[forms]![Загрузка отчетов]![Поле23]) AND ((Партии.Статус)=False))"

Set RecNum = basa.OpenRecordset(SQLStr) 'тут ругается


В другом месте похожий код работает, с единственным отличаем что в запросе есть Inner join

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Re: Помогите разобраться с запросом

Сообщение HandKot » 28.06.2007 (Чт) 7:48

yura613 писал(а):Привет всем, помогите пож. разобраться.
Я формирую sql запрос, и потом пытаюсь открыть его. Но почему то выскакиевает ошибка "Слишком мало паремтров. Требуется 1".
Неработающий код
Код: Выделить всё
Dim basa As DAO.Database
Dim RecNum As DAO.Recordset
Dim SN As String, SQLStr As String
Dim i As Integer, max As Integer

Set basa = CurrentDb

SQLStr = "SELECT Партии.[Код SAP], Партии.[Экспертное заключение], Партии.Статус FROM Партии " & _
"WHERE (((Партии.[Код SAP])=[forms]![Загрузка отчетов]![Поле23]) AND ((Партии.Статус)=False))"

Set RecNum = basa.OpenRecordset(SQLStr) 'тут ругается


В другом месте похожий код работает, с единственным отличаем что в запросе есть Inner join


Код: Выделить всё
SQLStr = "SELECT Партии.[Код SAP], Партии.[Экспертное заключение], Партии.Статус FROM Партии " & _
"WHERE (((Партии.[Код SAP])= " & [forms]![Загрузка отчетов]![Поле23]) & "  AND ((Партии.Статус)=False))"
I Have Nine Lives You Have One Only
THINK!

yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Сообщение yura613 » 28.06.2007 (Чт) 19:53

Спасибо
А тут еще с одним запросом проблемка.
Суть: есть список моделей, пользователь выбирает несколько едениц;эти еденицы закидываются в листбокс после чего пользователь нажимает кнопку которая создает запрос. Проблема в том что если пользователь выбирает всего одну модель то запрос работает как надо, а вот уже больше двух паказывает не то(а именно просто выдает все данные,которые есть в таблице по указанным моделям.) Помогите и с ним разобраться пож.

Код: Выделить всё
Set frmCust = Forms!МегаЗапрос
    With frmCust

CmbQr = "SELECT Партии.[Код SAP], Партии.[Экспертное заключение], Партии.[Дата окончания ЭЗ], Партии.Статус, Модели.[Название модели] " & _
      "FROM Модели INNER JOIN Партии ON Модели.[Код SAP] = Партии.[Код SAP] " & _
      "GROUP BY Партии.[Код SAP], Партии.[Экспертное заключение], Партии.[Дата окончания ЭЗ], Партии.Статус, Модели.[Название модели]  " & _
      "HAVING Партии.Статус=False AND Партии.[Дата окончания ЭЗ]>Now() AND Модели.[Название модели] ='"
       
     For intI = 0 To !Список8.ListCount - 1

       If intI = !Список8.ListCount - 1 Then
       
         CmbQr = CmbQr & frmCust!Список8.Column(0, intI) & "'"

       Else
       
         CmbQr = CmbQr & frmCust!Список8.Column(0, intI) & "'" & " OR " & "Модели.[Название модели] ='"

       End If

     Next intI
       
   End With

Set frmCust = Nothing

Set base = CurrentDb
Set qr = base.OpenRecordset(CmbQr)

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 29.06.2007 (Пт) 8:03

все перечисления моделей через OR надо внести в скобки
Having ... And (Model = '' or Model = '' or ...)



CmbQr = "SELECT Партии.[Код SAP], Партии.[Экспертное заключение], Партии.[Дата окончания ЭЗ], Партии.Статус, Модели.[Название модели] " & _
"FROM Модели INNER JOIN Партии ON Модели.[Код SAP] = Партии.[Код SAP] " & _
"GROUP BY Партии.[Код SAP], Партии.[Экспертное заключение], Партии.[Дата окончания ЭЗ], Партии.Статус, Модели.[Название модели] " & _
"HAVING Партии.Статус=False AND Партии.[Дата окончания ЭЗ]>Now() AND (Модели.[Название модели] ='"

For intI = 0 To !Список8.ListCount - 1

If intI = !Список8.ListCount - 1 Then

CmbQr = CmbQr & frmCust!Список8.Column(0, intI) & "')"

Else

CmbQr = CmbQr & frmCust!Список8.Column(0, intI) & "'" & " OR " & "Модели.[Название модели] ='"

End If

Next intI

End With
I Have Nine Lives You Have One Only
THINK!

yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Сообщение yura613 » 01.07.2007 (Вс) 1:49

HandKot спасибо, так и сделал.

yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Сообщение yura613 » 08.07.2007 (Вс) 21:02

А еще вопрос по запросам.
Если уже создан запрос в БД. (При помощи конструктора) Можно ли программно изменять его параметры. (Например добавлять поле или наоборот условие.)

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 10.07.2007 (Вт) 12:04

через QueryDefs можно , подставляя ему новый SQL

yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Сообщение yura613 » 10.07.2007 (Вт) 22:08

Konst_One так мне придется для каждого случая формирвоать новый SQL запрос. А запрос может быть как по одной таблице так и по нескольким или каждый раз может отображаться разное количество полей.
А вот если просто взять создать запрос по всем таблицам и полям, созадать пользовательскую форму и через нее просто выбирать какое поле отображать в запросе а какое нет, так можно сделать ?
Или если я заблуждаюсь в чем то можно примерчик? как через querydef можно подставлять sql ?

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 11.07.2007 (Ср) 9:54

Лучше сделать свой конструктор строки запроса

" SELECT " & Функция выбора полей & " FROM " & Функция выбора таблиц & " WHERE " & Функция выбора условий отбора данных.

Вот что-то типа такого.
Утро добрым не бывает!

yura613
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 12.06.2006 (Пн) 15:49
Откуда: Минск

Сообщение yura613 » 11.07.2007 (Ср) 20:44

gjghjc по ходу так и придется делать.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 264

    TopList