powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
25 сообщений из 25, страница 1 из 1
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558789
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Прошу прощения, я не программист, но второй день мучаюсь с проблемой, решения которой, в инете, к сожалению, не нашел...
Есть простой запрос, к таблице, созданный в Access, одно из условий отбора выглядит в конструкторе так: like"*"&[]&"*", ну, что бы можно было отобразить все, при надобности...
Так же, имеется некоторый текст, который сбрасывает результаты выполнения запроса на лист екселя... ну, так надо... Так вот, если в конструкторе просто [], то все работает, а если с Like, то рекордсет возвращается пустой... перепробовал почти все, до чего дотянулся в инете... ничего не выходит... В чем засада? Или, хотя бы, где искать?
sub zapros()

Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim rng As Excel.Range
Dim B_date As Date, F_date As Date
Dim qSQL_READ As String

B_date = Cells(x, y).Value
F_date = Cells(x1, y1).Value
B = Range("Z").Value

qSQL_READ = Range("Path_in_DB_Read").Value
cnn.ConnectionString = qSQL_READ: cnn.Open
Set cmd.ActiveConnection = cnn: cmd.CommandText = "[ZAPROS]"

Set rst = cmd.Execute(, Array(Format(B_date, "yyyy.mm.dd"), Format(F_date, "yyyy.mm.dd"), B), adCmdStoredProc)

'MsgBox rst.GetString

Set rng = Worksheets("List").Cells(x, y)
rng.CopyFromRecordset rst

Set cmd = Nothing

rst.Close: Set rst = Nothing

cnn.Close: Set cnn = Nothing

End Sub


Может, кто сталкивался, или знает как горю помочь?
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558793
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте тэги, плиз, невозможно же читать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim rng As Excel.Range
Dim B_date As Date, F_date As Date
Dim qSQL_READ As String

B_date = Cells(x, y).Value
F_date = Cells(x1, y1).Value
B = Range("Z").Value

qSQL_READ = Range("Path_in_DB_Read").Value
cnn.ConnectionString = qSQL_READ: cnn.Open
Set cmd.ActiveConnection = cnn: cmd.CommandText = "[ZAPROS]"

Set rst = cmd.Execute(, Array(Format(B_date, "yyyy.mm.dd"), Format(F_date, "yyyy.mm.dd"), B), adCmdStoredProc)

'MsgBox rst.GetString

Set rng = Worksheets("List").Cells(x, y)
rng.CopyFromRecordset rst

Set cmd = Nothing

rst.Close: Set rst = Nothing

cnn.Close: Set cnn = Nothing

End Sub
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558797
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Finnaодно из условий отбора выглядит в конструкторе так: like"*"&[]&"*",
Так вот, если в конструкторе просто [], то все работает, а если с Like,

А можно SQL-текст запроса, а то как-то не очень понятно

(используйте тэги
Код: plaintext
[SRC sql][/SRC]
для оформления SQL)
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558801
йцукен12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hocker.Pro,

Напиши запрос полностью в VB
В VB другие символы подстановки:
% - любое к-во символов
_ - один символ
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558803
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йцукен12Напиши запрос полностью в VB
В VB другие символы подстановки:
% - любое к-во символов
_ - один символ

Там могут использоваться специфические (например пользовательские) функции

Ждем от автора текст запроса.
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558812
йцукен12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, кто мешает написать вместо строки:

Set cmd.ActiveConnection = cnn: cmd.CommandText = "[ZAPROS]"

следующую строку:

Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM [ZAPROS] WHERE Field1 Like %'" & NeedParam & "'%"

А Lik'и из запросов и из подзапросов удалить?
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36558817
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йцукен12Shocker.Pro, кто мешает написать вместо строки:

Set cmd.ActiveConnection = cnn: cmd.CommandText = "[ZAPROS]"

следующую строку:

Set cmd.ActiveConnection = cnn
cmd.CommandText = "SELECT * FROM [ZAPROS] WHERE Field1 Like %'" & NeedParam & "'%"

А Lik'и из запросов и из подзапросов удалить?

А если этот Like находится в невозвращаемых полях? Или в части формулы с невозвращаемыми полями? Или в JOIN-е. Чего гадать, подождем автора.
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559409
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
PARAMETERS Начало DateTime, Итог DateTime, Проект Text (  255  );
SELECT * FROM Проводка
WHERE (((Проводка.Поле1) Between [Начало] And [Итог]) AND ((Проводка.Поле22) Like"*"& [Проект]&"*" ))
ORDER BY Проводка.Поле1;
Обычный текст... правда, в оригинале, в тексте перечислены все поля, их там много, по этому я заменил их на *... Можно, конечно, все написать на VB, но проблема в том, что в базе присутствует несколько взаимоувязанных запросов... этот основной... база не реляционная... там двойная запись... и, по этому, хотелось бы, через VB, только параметры задавать, поскольку в аксессе все запросы отрабатываются замечательно, а процедуры незатейливы... А если на VB - получется до 6 последовательных, почти идентичных, рекордсетов писать... а в базе - готовые уже результаты в запросах... Выгрузка в ексель - по тому, что результаты, в дальнейшем, обрабатываются пользователями, в привычной, для них, среде, и самым непредсказуемым образом. В смысле - отчетов не напишешься...
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559424
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Finna,

У вас не определена переменная B ( Используйте Option Explicit )

Соответственно, происходят всякие неявные преобразования, поэтому вопрос, чему равно:
Range("Z").Value
и чему равно:
CStr(Range("Z").Value)

(ответ не придумывайте, а возьмите из Immedite Window)
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559537
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз вы отвечаете раз в сутки, тогда еще на всякий случай третий потенциальный вопрос:
Какой тип данных поля "Проводка.Поле22" и какие данные там есть, подходящие под ваш Like?
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559566
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через полгода, год, ТС вернется к полям таблицы и как же долго он будет гадать, что обозначает "Поле22" в таблице Проводка? А ведь если есть "Поле22", то наверное есть не менее вразумительные "Поле11" и "Поле33" или что-нибудь еще в этом духе.
Бессмертный лозунг на марше: создадим себе трудности и героически их преодолеем.
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mds_worldЧерез полгода, год, ТС вернется к полям таблицы и как же долго он будет гадать, что обозначает "Поле22" в таблице Проводка? А ведь если есть "Поле22", то наверное есть не менее вразумительные "Поле11" и "Поле33" или что-нибудь еще в этом духе.
Бессмертный лозунг на марше: создадим себе трудности и героически их преодолеем.

Все мы были молодыми и глупыми
Хоть до такого именования полей я не опускался, но умудрился сделать хранилище пользовательских настроек, где переменные не именовались, а нумеровались... это проходит с опытом
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36559704
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне, право же, крайне неловко за свои "корявости", но база появилась несколько раньше, чем я начал читать мануалы и хелпы... Сначала был ексель, который макросом построчно, выводил в отчет с соседнего листа данные по ВПР и СУММЕСЛИ, после третьей тысячи строк, стало небыстро... я потратил примерно седан, на изготовление спец.проги у серъезной фирмы, но в результате то, что мне было нужно, то, что я заказывал, то, что понял програмист, и то, что получилось, оказались вещами сильно далекими друг от друга... в филосовском смысле :)
И тогда я узнал слово рекордсет... Кнопочкой в аксессе ексельная табличка бала перетянута в базу, а названия полей там были такие, что аксесс переименовал все сам... и правильно, наверное... При обработке рекордсета, я использовал номера полей, названия меня не занимали...
И, с тех пор, время от времени, я стал узнавать новые слова...
По вопросам:
1. Тип данных в поле 22 и в ячейке переменной - текст. Кроме того, без Like то все работает... и если вместо "value" при определении переменной B, указать "text" картина, не меняется, если даже указать в тексте SUB непосредственно сам текст в которым надо сравнивать поле, то все тоже самое - рекордсет, если в запросе like, возвращается пустой, без like все как положено...
2. Действительно, поле 22 почти никогда не возвращается...
3.

Shocker.ProFinna,

У вас не определена переменная B ( Используйте Option Explicit )

Соответственно, происходят всякие неявные преобразования, поэтому вопрос, чему равно:
Range("Z").Value
и чему равно:
CStr(Range("Z").Value)

(ответ не придумывайте, а возьмите из Immedite Window)
А как определить B - в смысле какая переменная - Variant? Я попробовал - ничего не поменялось...
Я прошу прощения, а как ответ туда положить, в это самое Immedite Window?
Приношу еще раз свои извинения всем. Поверьте - я не тупой, просто не моя, немножко, область... :)
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560082
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Finna1. Тип данных в поле 22 и в ячейке переменной - текст. Кроме того, без Like то все работает... и если вместо "value" при определении переменной B, указать "text" картина, не меняется, если даже указать в тексте SUB непосредственно сам текст в которым надо сравнивать поле, то все тоже самое - рекордсет, если в запросе like, возвращается пустой, без like все как положено...

Очень хотелось бы понять, что в вашем понимании "без Like". Убираете, заменяете на "=" или что?

Что будет, если вы просто напишете
B="нужный текст" (не беря его из ячейки)?

FinnaА как определить B - в смысле какая переменная - Variant? Я попробовал - ничего не поменялось...

Нет. В базу вы же передаете текст, вот и объявляйте
Dim B As String

FinnaЯ прошу прощения, а как ответ туда положить, в это самое Immedite Window?
Приношу еще раз свои извинения всем. Поверьте - я не тупой, просто не моя, немножко, область... :)

Жмете Ctrl-G
Появляется Immediate Window. Это окно немедленного выполнения команд. набираете в нем
?Range("Z").Value
и жмете Энтер.
В окне печатается значение этого выражения
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560095
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЧто будет, если вы просто напишете
B="нужный текст" (не беря его из ячейки)?

Кстати, а попробуйте
B="*"
и тут вообще сразу будет понятно, проблема в исходных данных или в передаче параметров в аксесс
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560366
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Код: plaintext
1.
2.
3.
?Range("C4").Value
Creatent
?CStr(Range("C4").Value)
Creatent
Если это поможет...
Без like - это когда в конструкторе аксесса, вместо
Код: plaintext
Like "*"&[]&"*", 
в поле22, просто стоит запрос параметра:
Код: plaintext
[]
.
При явном объявлении переменной - картина не меняется -
Код: plaintext
[]
-все работает, а если
Код: plaintext
Like "*"&[]&"*"
- рекордсет пустой... Указывал по всякому: "", " ", Creatent, "Creatent", и в указании переменной, и, непосредственно во множестве параметров - результат один и тот же -
Код: plaintext
[]
-все работает, а если
Код: plaintext
Like "*"&[]&"*" 
- рекордсет пустой... картина не меняется если явно объявлять параметы в запросе в аксессе, или же не объявлять вовсе... Срого говоря, мне это нужно для того, что бы отработать запрос с указанием параметра - "по всем", то есть, как если бы такой параметр и не запрашивался совсем...
А если набираешь текст рУками в окошке запроса параметра, непосредственно, в аксессе при отработке запроса - все работает с Like "*"&[]&"*" , как положено, даже по неполностью набранному тексту...
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560368
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
про Creatent погорячился - "Creatent" конечно...
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560519
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Finna
Без like - это когда в конструкторе аксесса, вместо
Код: plaintext
Like "*"&[]&"*", 
в поле22, просто стоит запрос параметра:
Код: plaintext
[]
.

Что это значит? Во что превращается SQL-запрос? Поле22=[] или что-то еще?

B="*" пробовали?
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560579
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
Код: plaintext
[]
, то есть без like, тексте запроса выглядит так:

Код: plaintext
WHERE (((Проводка.Поле1) Between [Начало] And [Итог]) AND ((Проводка.Поле22)= [Проект]))

B="*" - пробовал - рекордсет пустой, причем и с like и без...
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560632
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, вообще, ситуация воспроизводится? А то, может, у меня чего то в консерватории надо поправить? :)
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560821
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FinnaА, вообще, ситуация воспроизводится? А то, может, у меня чего то в консерватории надо поправить? :)

воспроизводится...
ковыряю...
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560870
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем так.

Меняете в сохраненном в аксессе запросе * на %
Запрос прекращает работать в Аксессе, но начинает работать через ADO

Синтаксис чьего ядра выполняется в случае запроса через ADO - непонятно, но похоже, запросы из аксесса и из ADO выполняют разные ядра.

Можно попробовать подключение через ODBC или через DAO или RDO. Поможет ли это - неясно. Но, кажется, когда я работал с аксессовскими файлами через DAO, я использовал именно звездочки.
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36560885
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант - передавать звездочки "снаружи"

То есть в сохраненном запросе написать
Код: plaintext
like []
Из VB передавать "%"+B+"%"

В аксессовких вызовах добавить к параметру звездочки.
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36561142
Finna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Огромное спасибо!

Нарыл, что этот провайдер попросту не поддерживает like. Совсем... Ну, то есть, никак...
Зато!
Работают все предложенные Shocker.Pro конструкции!
Идеальный, в моем случае вариант:
Код: plaintext
"%"+B+"%"
При этом в запросе, вообще не требуется применения like, текст переменной прекрасно передается в таком виде из VB в обычный, даже и необъявленный параметр запроса, даже и неполностью набранный - то что нужно! И прекрасно отрабатывается! Пустой параметр "по всем", передается тривиально:
Код: plaintext
If B = "" Then B = "%"
так же, замечательно отрабатывается:
Код: plaintext
B = "%" + B + "%"
Ну, это что бы массив параметров выглядел попроще.

Более того, этому топику не суждено было бы родиться, поставь я при своих "ковыряниях" в ячейку переменной, B, для отработки запроса "по всем" не "*" , а - "%"...

Еще раз немерянная благодарность Shocker.Pro, за поддержку, и за готовность поделиться знанием и опытом!
Снимаю шляпу!
...
Рейтинг: 0 / 0
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
    #36561149
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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