Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / создание вложенного запроса циклом / 6 сообщений из 6, страница 1 из 1
19.07.2007, 15:02
    #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
19.07.2007, 15:14
    #34670631
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание вложенного запроса циклом
Код: plaintext
select a.* from (select * from cat where dkeywords like '%total%') as a where dkeywords like '%commander%'
если это скуль
...
Рейтинг: 0 / 0
19.07.2007, 15:46
    #34670760
IguMEN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание вложенного запроса циклом
Допустим.
А если в результате получается запрос на большее количество уровней? Могу я в этом случае использовать 'TempDB'+str(n) вместо 'a'? Т.е. если на каждом уровне надо применять новое значение. Или можно использовать одно и тоже значение?
...
Рейтинг: 0 / 0
19.07.2007, 16:12
    #34670874
IguMEN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание вложенного запроса циклом
Все. Разобрался. Спасибо big-duke за содействие. )))

ЗЫ: все-таки не просто с нуля писать поисковик по sql server посредством VB, если делаешь это в 1 раз.))
...
Рейтинг: 0 / 0
20.07.2007, 10:50
    #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
20.07.2007, 12:47
    #34672896
IguMEN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
создание вложенного запроса циклом
Спасибо, AndrF . Очень разумный вариант. А у меня получилось что-то из разряда "мы не ищем легких путей" )))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / создание вложенного запроса циклом / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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