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

Форум: MS ACCESS

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

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

 
 

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

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

тема: recordset
 
 автор: Гоблин   (24.08.2011 в 20:28)   личное сообщение
 
 

Все привет. Вот проблемка-непонятка. Есть таблица. Запускаю recordset с запросом для заполнения дерева. Все работает, дерево заполняется. Ставлю в запрос одно условие. Тоже пашет. Ставлю второе условие в запрос, пишет что мало параметров и надо хотя бы 1, хотя данные в запросе есть. Пришлось делать запрос со всеми условиями на создание таблицы и уже по этой временной таблице пускать recordset. Все работает как надо.
А не подскажете как обойтись без временной таблицы?

Такой вариант с временной таблицей TW работает отлично
Set rst = CurrentDb.OpenRecordset("SELECT [Тип средств].КодТипаСр, [Тип средств].Тип, [Тип средств].ИндексTree FROM [Тип средств] INNER JOIN TW ON [Тип средств].КодТипаСр = TW.КодТипаСр WHERE ((([Тип средств].ИндексTree)='r'));")
With rst
If .RecordCount <> 0 Then
Do While Not .EOF
Call Me.TW1.Nodes.Add("r", 4, "a" & ![КодТипаСр], ![Тип])
.MoveNext
Loop
End If
End With

А если запустить recordset с запросом:
SELECT [Тип средств].КодТипаСр, [Тип средств].Тип, [Тип средств].ИндексTree FROM [Тип средств] WHERE ((([Тип средств].КодТипаСр)<>[Forms]![Средства по типам]![Поле3]) AND (([Тип средств].ИндексTree)='r'));

То орет что мало параметров.
Предварительно Поле3 в форме заполняется как надо, но в коде recordset с этим запросом выделяется желтым цветом. Пришлось этот запрос ставить на создание таблицы TW и потом уже по нему recordset. как указано выше. Что не так? Не хочу временных таблиц.

  Ответить  
 
 автор: Lukas   (24.08.2011 в 21:16)   личное сообщение
 
 


[Forms]![Средства по типам]![Поле3]

Вместо этого мусора нужно вcтавить ЗНАЧЕНИЕ, тогда перестанет ругаться. :)

  Ответить  
 
 автор: час   (24.08.2011 в 21:37)   личное сообщение
 
 

Или вот так вота попробовать

Public Function FUN_Поле3() As String
' вспомогательная функция для запроса 
FUN_Поле3 = Nz([Forms]![Средства по типам]![Поле3])
  If IsEmpty([Forms]![Средства по типам]![Поле3]) = True Then
     FUN_Поле3 = ""
  End If
End Function

  Ответить  
 
 автор: Гоблин   (24.08.2011 в 21:41)   личное сообщение
 
 

Спасибо. С функцией что-то не совсем понял что тут к чему, а на счет значений - объявляю переменную, присваиваю ей значение поля3 и вставляю в запрос

Set rst = CurrentDb.OpenRecordset("SELECT [Тип средств].КодТипаСр, [Тип средств].Тип, [Тип средств].ИндексTree " _
& " FROM [Тип средств]WHERE ((([Тип средств].КодТипаСр)<>" & a & " And (([Тип средств].ИндексTree)='r'));")

Как результат значение определяет правильно. На желтом фоне высвечивает и пишет, что ошибка синтаксиса имеется.

  Ответить  
 
 автор: час   (24.08.2011 в 21:53)   личное сообщение
 
 

Функцу в запрос подставляем

SELECT [Тип средств].КодТипаСр, [Тип средств].Тип, [Тип средств].ИндексTree FROM [Тип средств] WHERE 
((([Тип средств].КодТипаСр)<>'" & FUN_Поле3() & "') AND (([Тип средств].ИндексTree)='r'));

Она и передаст значение поля.

  Ответить  
 
 автор: Гоблин   (24.08.2011 в 22:21)   личное сообщение
 
 

Ну надо же! Функция часа заработала. От одного запроса на создание таблицы избавился.
По аналогии буду пытаться избавиться от второго. Час, спасибо.

PS. И все же какого лешего recordset не желает работать с "мусором" если запрос отдельно работает. Ему не все ли равно что в условии? Функцию пихать - не мой уровень. Переменная тоже передавала верное значение, а оно на синтаксис пеняет блин. В чем фишка?

  Ответить  
 
 автор: час   (24.08.2011 в 23:47)   личное сообщение
 
 

Это мне Lukas в своё время - глаза открыл и Анатолий(Киев) подсобил.

  Ответить  
 
 автор: час   (24.08.2011 в 23:49)   личное сообщение
 
 


В чем фишка?


Может в апострофах?
Ваще я в запросах - туп дубом!

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


Ваще я в запросах - туп дубом


правильно говорить - Час Часом (дуб дубом )

  Ответить  
 
 автор: Дядя Федор   (25.08.2011 в 09:43)   личное сообщение
 
 


Ему не все ли равно



Ему не все равно. Попробуйте запихнуть в sql-текст источника рекордсета число, например, 1,56. Или поле, в котором 1,56.
Не работает - "," - не должно быть.
Хотя в сохраненном запросе запросто прокатывает.
А с 1.56 работает.

  Ответить  
 
 автор: Гоблин   (25.08.2011 в 12:30)   личное сообщение
 
 

Понятно. Спишу все на баги и недоработки микрософта. Эти подлянки с их стороны мне 2 дней разборок стоили. .

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