Access БД .Проблема из функции в условие запроса

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
ABPOPA
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.05.2007 (Ср) 16:53

Access БД .Проблема из функции в условие запроса

Сообщение ABPOPA » 11.05.2007 (Пт) 13:25

проблема такая.
есть код

Код: Выделить всё
Public Function SpisokOsnov() As String
Dim varItem As Variant
Dim strRez As String
For Each varItem In spisok.ItemsSelected
strRez = strRez & spisok.ItemData(varItem) & ","
Next varItem
If Len(strRez) = 0 Then SpisokOsnov = "": Exit Function
strRez = Left$(strRez, Len(strRez) - 1)
strRez = "In(" & strRez & ")"
SpisokOsnov = strRez
End Function

Код: Выделить всё
Public Function GetValue()
GetValue = Form_Форма1.SpisokOsnov
End Function

Код: Выделить всё
SELECT таблица.id
FROM таблица
WHERE (((таблица.id)=GetValue()));


Первый блок:
Беру все выделенные в ЛистБокс значения и записываю в строку ввиде "In(73,74,75)"
Второй блок:
Получаю отдельным модулем строку из первого блока.
Тетий блок:
В запросе как условие беру значение из функции модуля.


собственно вопрос:
Запрос не отбирает данные(просто пустой получается),почему?
как еше попробывать?

пробывал строку "73 Or 74 Or 75" и "In(73,74,75)"
работает только если передается например "73"


помогите советом.
или подскажите другой более грамотный способ.
нужен запрос на удаление и отчет в соответсвии с мульти выбором в ЛистБоксе.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.05.2007 (Пт) 13:40

Код, не содержащий отступов, является издевательством над читающими его.

Что касается вопроса, то нельзя не сказать, что функция, вызываемая из запроса, не может возвращать текст на языке SQL, коим является "In(73,74,75)". "73,74,75" тоже им является. Функция может возвращать только одно значение.

Поэтому весь запрос целиком надо формировать в коде.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ABPOPA
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.05.2007 (Ср) 16:53

Сообщение ABPOPA » 11.05.2007 (Пт) 13:57

GSerg писал(а):Код, не содержащий отступов, является издевательством над читающими его.

Что касается вопроса, то нельзя не сказать, что функция, вызываемая из запроса, не может возвращать текст на языке SQL, коим является "In(73,74,75)". "73,74,75" тоже им является. Функция может возвращать только одно значение.

Поэтому весь запрос целиком надо формировать в коде.


Извеняюсь за форматирование.

а пример можно как формировать в коде. Просто не очень с этим дело имел.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.05.2007 (Пт) 14:13

Пишешь базу данных, а s="hello " & "world" не делал никогда?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ABPOPA
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 09.05.2007 (Ср) 16:53

Сообщение ABPOPA » 11.05.2007 (Пт) 14:33

в таком виде не писал.

интерисовался именно как запрос создать в коде.

могу предположить что надо сделать строку.в нее записать sql запрос, а потом передать эту строку. скорей всего в один из параметров .
Код: Выделить всё
   
    stDocName = "qwer"
    DoCmd.OpenReport stDocName, acPreview


но вот с этим я не работал.

просто спрашивал может пример кто привести сможет как это сделать

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

Сообщение gjghjc » 11.05.2007 (Пт) 15:01

ну например так
Код: Выделить всё

Set ADDD = DAO.OpenDatabase(MainPath, False, False, "dBASE IV;LANGID=0x0419;CP=866;COUNTRY=0")

SQLExecString = "INSERT INTO " & Full_Name & " (Field1, Field2, Field3, Field4, Field5) values ( "
                SQLExecString = SQLExecString & """" & Text1.text & ""","
                SQLExecString = SQLExecString & """" & Text2.text & ""","
                SQLExecString = SQLExecString & """" & CCur(Text3.text) & ""","
                SQLExecString = SQLExecString & """" & Text4.text & ""","
                SQLExecString = SQLExecString & """" & UCase(Text5.text)     ' & ""","
                SQLExecString = SQLExecString & """" & " " & ")"
               

ADDD.Execute (SQLExecString)
Может не самый совершенный вариант.... но я думаю будет понятно что строка как бы сшивается из твоих данных и конструкций языка SQL.
А жирным выделено КУДА потом подставить полученную строчку
:)
Утро добрым не бывает!


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

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

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

    TopList  
cron