powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / создание вложенного запроса циклом
6 сообщений из 6, страница 1 из 1
создание вложенного запроса циклом
    #34670564
Фотография IguMEN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста, укажите, в чем моя ошибка!
Итак, беру строку пользователя (в данном случае - 'commander total', хотя в других случаях читуация аналогичная), разбиваю ее на отдельные слова и составляю вложенный запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TextArray = Split(t_text)
If UBound(TextArray) >  0  Then
        
sqlstring = "(select * from cat where dkeywords like '%" + TextArray(UBound(TextArray)) + "%') as temptbl" + Trim$(Str$(UBound(TextArray)))
For n =  1  To UBound(TextArray) -  1 
sqlstring = "(select * from " + sqlstring + " where dkeywords like '%" + TextArray(n) + "%') as temptbl" + Trim$(Str$(n))
Next
sqlstring = "select * from " + sqlstring + " where dkeywords like '%" + TextArray( 0 ) + "%' as temptbl0"
Else
sqlstring = "select * from cat where dkeywords like '%" + TextArray( 0 ) + "%'" '-на случай, если в строке было только одно слово
End If
Debug.Print sqlstring
Adodc1.RecordSource = sqlstring
Adodc1.Refresh

По достижении места "Adodc1.refresh" получаю такую вот шляпу : "Incorrect syntax near the keyword 'where'".

К этому времени Дебаггер вернул следующий сформированный запрос:
Код: plaintext
select * from (select * from cat where dkeywords like '%total%') where dkeywords like '%commander%'

ПАМАЖИТЕ, кто чем сможет!!!
...
Рейтинг: 0 / 0
создание вложенного запроса циклом
    #34670631
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select a.* from (select * from cat where dkeywords like '%total%') as a where dkeywords like '%commander%'
если это скуль
...
Рейтинг: 0 / 0
создание вложенного запроса циклом
    #34670760
Фотография IguMEN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим.
А если в результате получается запрос на большее количество уровней? Могу я в этом случае использовать 'TempDB'+str(n) вместо 'a'? Т.е. если на каждом уровне надо применять новое значение. Или можно использовать одно и тоже значение?
...
Рейтинг: 0 / 0
создание вложенного запроса циклом
    #34670874
Фотография IguMEN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все. Разобрался. Спасибо big-duke за содействие. )))

ЗЫ: все-таки не просто с нуля писать поисковик по sql server посредством VB, если делаешь это в 1 раз.))
...
Рейтинг: 0 / 0
создание вложенного запроса циклом
    #34672421
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, правильней будет следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Dim TextArray As Variant, SqlString As String, n As Integer, s As String

    TextArray = Split(Replace(t_text, "'", "''"))
    
    SqlString = "SELECT * FROM cat"
    For n =  0  To UBound(TextArray)
        s = Trim$(TextArray(n))
        If Len(s) Then SqlString = SqlString & IIf(n, vbCrLf & vbTab & vbTab & "AND ", vbCrLf & vbTab & "WHERE ") & "dkeywords LIKE '%" + s + "%'"
    Next n
    Debug.Print SqlString
...
Рейтинг: 0 / 0
создание вложенного запроса циклом
    #34672896
Фотография IguMEN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, AndrF . Очень разумный вариант. А у меня получилось что-то из разряда "мы не ищем легких путей" )))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / создание вложенного запроса циклом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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