Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
Всем здрасте!

Мне необходимо использовать оператор LIKE в запросе к DBF файлу.
К данным подрубаюсь через ADODB.Connection. Поле NBSNEW - цифирное.

TextSQL = "select nbsnew from table where nbsnew like (" & CStr(702) & ") "

При таком раскладе выборка возвращается пустой, ибо lenght(nbsnew)=5.
Как тока начинаю подставлять символа ?%* прога валится "RunTime Error / Automation error"

Что делать?
21 июн 07, 12:30    [4298537]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2937
вы пытаетесь применить текстовый оператор LIKE к цифровому полю?
объясните что вы хотите получить в конечном итоге

I Have Nine Lives You Have One Only
THINK!
21 июн 07, 12:42    [4298625]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
gjghjc
Member

Откуда:
Сообщений: 467
Попробуй убрать скобки, и если у тебя поле цифирьное то может CStr тоже не нужно???

TextSQL = "select nbsnew from table where nbsnew like """ & 702 & """ "

Или наоборот преобразовать твое поле в строку
TextSQL = "select Cstr(nbsnew) from table where nbsnew like """ & CStr(702) & """ "


С уважением, Николай.
21 июн 07, 12:42    [4298627]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
HandKot
вы пытаетесь применить текстовый оператор LIKE к цифровому полю?
объясните что вы хотите получить в конечном итоге

I Have Nine Lives You Have One Only
THINK!


я хочу получить выборку по следующей маске - 702??
21 июн 07, 12:44    [4298647]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
gjghjc
Member

Откуда:
Сообщений: 467
Тогда так
TextSQL = "select Cstr(nbsnew) from table where nbsnew like ""*" & CStr(702) & "*"" "

С уважением, Николай.
21 июн 07, 12:48    [4298673]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
TIKO
Member

Откуда:
Сообщений: 952
"select nbsnew from table where nbsnew like '" & 702 & "%'"
21 июн 07, 12:49    [4298686]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
gjghjc

TextSQL = "select nbsnew from table where nbsnew like """ & 702 & """ "

не прокатило - таже ошибка. Если вместо """ & 702 & """ использовать " & 702 & ", то работает, но ничего не отбирает. Если указать явно " & 70201 & ", то отбирает

gjghjc

TextSQL = "select Cstr(nbsnew) from table where nbsnew like """ & CStr(702) & """ "

тожа мимо :(
21 июн 07, 12:51    [4298701]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
gjghjc
Тогда так
TextSQL = "select Cstr(nbsnew) from table where nbsnew like ""*" & CStr(702) & "*"" "

С уважением, Николай.


мимо! не работат. Таже ошибка
21 июн 07, 12:54    [4298720]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
TIKO
"select nbsnew from table where nbsnew like '" & 702 & "%'"


увы...

К сообщению приложен файл. Размер - 0Kb
21 июн 07, 12:56    [4298742]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
Вот строка подключения. Может это чтонить вам скажет.
ConnectionString = "Provider=MSDASQL.1;Persist Security Info=True;Data Source = ôàéëû dBASE;Initial Catalog=" & PathMod
ConnectionPRB.Open ConnectionString
21 июн 07, 12:58    [4298759]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
gjghjc
Member

Откуда:
Сообщений: 467
TextSQL = "select Cstr(nbsnew) from table where CStr(nbsnew) like ""*" & CStr(702) & "*"" "

С уважением, Николай.
21 июн 07, 12:58    [4298760]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
gjghjc
TextSQL = "select Cstr(nbsnew) from table where CStr(nbsnew) like ""*" & CStr(702) & "*"" "


к сожалению, тожа неработат
21 июн 07, 13:01    [4298789]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
TextSQL = "select nbsnew from table where nbsnew like (" & CStr(70201) & ") "

Вот этот вариант работает, но мне нужно отбирать не тока 70201, но и 70202, 70203 и пр.
21 июн 07, 13:03    [4298807]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2937
могу ошибаться с синтаксисом (работаю с SQL сервером)
но можно сделать так:
1) использовать деление
TextSQL = "select nbsnew from table where nbsnew/100 = " & CStr(702) & " "
2) преобразовать в текст
TextSQL = "select nbsnew from table where CStr(nbsnew) Like '" & CStr(702) & "*' "
обратить внимание на апострофы и ф-цию перевода числа в строку (возможно пишется не так)

I Have Nine Lives You Have One Only
THINK!
21 июн 07, 13:04    [4298823]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
HandKot
могу ошибаться с синтаксисом (работаю с SQL сервером)
но можно сделать так:
1) использовать деление
TextSQL = "select nbsnew from table where nbsnew/100 = " & CStr(702) & " "
2) преобразовать в текст
TextSQL = "select nbsnew from table where CStr(nbsnew) Like '" & CStr(702) & "*' "
обратить внимание на апострофы и ф-цию перевода числа в строку (возможно пишется не так)

I Have Nine Lives You Have One Only
THINK!


Ура!!!!!!!!!!!!!!

Вот пральный вариант

'" & CStr(702) & "%'

Спасибо за апострофы
21 июн 07, 13:11    [4298872]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
joe black
Member

Откуда:
Сообщений: 452
Благодарю всех за помощь...!!!

Bar closed
21 июн 07, 13:14    [4298888]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
использую даный запрос в Excel 2010. В аксесе 2010 данный код отрабатывается на ура. в экселе не хочет работать условие [OLD$].Название Like 'ККО*'

strSQL = "SELECT '' AS Статус, 'Банкомат' AS Устройство, [OLD$].Подразделение, [OLD$].Адрес, [OLD$].Номер, 
'' AS [Дата 1-й загрузки], '' AS [ЛимитА], [OLD$].Название  FROM [OLD$] INNER JOIN [NEW$] ON ([OLD$].[Серийный номер] = 
[NEW$].[Серийный номер]) AND ([OLD$].Адрес = [NEW$].Адрес) WHERE ((([OLD$].Выдача)='Да') AND [OLD$].Название Like 'ККО*')
 ORDER BY [OLD$].Подразделение, [OLD$].Адрес, [OLD$].Номер"


Запрос должен отбирать если в названии слово начинается с "ККО" . Но почему-то даже просто отбор не работает :(

(а по хорошему код был такой и нужно так, в условие засунуть
......агрузки], IIf([NEW$].[Название] Like 'ККО*',45,270) AS [ЛимитА] FROM ....
.
14 фев 12, 15:50    [12089859]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
вот при помощи чего я обрабатываю SQL запрос

Private Sub GenerateReportSQL(strSQL As String)
Dim ws As Worksheet
Dim qry As QueryTable
Dim strPath As String
Dim strName As String
Dim strCon As String
'Dim strSQL As String
Dim strPosition As String
Dim strRng As String
Dim tm As Double

    With ThisWorkbook
        On Error Resume Next
        Set ws = .Worksheets("Отчет")
        On Error GoTo 0
        If ws Is Nothing Then Set ws = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
        
        'tm = Timer
        
        strName = .FullName
        strPath = .Path
        strRng = "A2:U"
        strCon = "ODBC;DSN=Excel Files;" & _
                 "DBQ=" & strName & ";" & _
                 "DefaultDir=" & strPath & ";" & _
                 "DriverId=1046;" & _
                 "MaxBufferSize=2048;" & _
                 "Page Timeout=5;"
        
        With ws
            If Val(Application.Version) > 11 Then DeleteConnections_12
            .Cells.Clear
            .Name = "Отчет"
            Set qry = .QueryTables.Add(strCon, .Range("A1"), strSQL)
            With qry
                .BackgroundQuery = False
                .Refresh
                .Delete
            End With
        End With
    End With
    'MsgBox Format((Timer - tm) * 1000, "00.0000")
    'ws.Activate
End Sub
14 фев 12, 15:52    [12089892]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
решил данную проблему.

Вместо * поставил %

.....загрузки], IIf([NEW$].[Название] Like 'ККО%',45,270) AS [ЛимитА.....
14 фев 12, 16:38    [12090338]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6905
А зачем использовать именно Like? Можно ведь и:
.....загрузки], IIf(Left$([NEW$].[Название],3)='ККО',45,270) AS [ЛимитА.....
14 фев 12, 17:14    [12090703]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
AndreTM,

должны отбираться строки которые начинаются (содержатся) со слова ККО.
14 фев 12, 17:55    [12091088]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20636
Marchuk
которые начинаются (содержатся)
если "начинаются" - то AndreTM предложил именно это. А если "содержатся", то процент надо ставить с двух сторон
14 фев 12, 18:21    [12091262]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
Shocker.Pro
Marchuk
которые начинаются (содержатся)
если "начинаются" - то AndreTM предложил именно это. А если "содержатся", то процент надо ставить с двух сторон

Да точно :) не сразу заметил оператор Left :)
Как я понял Excel не понимает * в SQL запросах, вместо них надо писать %

Всем спасибо. Я свой вопрос решил :)
15 фев 12, 10:15    [12093450]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20636
Marchuk
Как я понял Excel не понимает * в SQL запросах, вместо них надо писать %
дело не в экселе, а в движке, который интерпретирует SQL-запрос. Экселю пофиг, для него это просто строка
15 фев 12, 10:18    [12093464]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 175
в продолжение вопроса прошу подсказать что не так делаю, вроде все просто должно быть, специально еще раз посмотрел примеры здесь на форуме и на MS Docs, но "то ли лыжи не едут, то ли я...."
Для примера есть таблица, надо отобрать все что заканчивается на "ква", соответственно like "%ква" или like '%ква'

ТАБЛИЦА ГОРОДА
Код ГородНазвание
1 москва
2 морква
3 морской
4 вашква
5 ришква

делаю запрос
SELECT *
FROM [города]
WHERE [ГородНазвание] Like '%ква';

благодарствую за подсказку

К сообщению приложен файл (пример.zip - 22Kb) cкачать
10 фев 19, 07:18    [21805536]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Ганов Александр
Member

Откуда: Петропавловск-Камчатский
Сообщений: 175
все понятно. вместо % нужна * и никаких проблем :-)
10 фев 19, 07:24    [21805537]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с LIKE в VBA (EXCEL)  [new]
Marchuk
Member

Откуда: Москва
Сообщений: 102
Ганов Александр,

Или используй функцию RIGHT
10 фев 19, 11:39    [21805586]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Visual Basic Ответить