Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB / 25 сообщений из 25, страница 1 из 1
02.04.2010, 21:09
    #36558789
Finna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Доброго времени суток!
Прошу прощения, я не программист, но второй день мучаюсь с проблемой, решения которой, в инете, к сожалению, не нашел...
Есть простой запрос, к таблице, созданный в 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
02.04.2010, 21:13
    #36558793
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
используйте тэги, плиз, невозможно же читать

Код: 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
02.04.2010, 21:19
    #36558797
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Finnaодно из условий отбора выглядит в конструкторе так: like"*"&[]&"*",
Так вот, если в конструкторе просто [], то все работает, а если с Like,

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

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

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

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

Ждем от автора текст запроса.
...
Рейтинг: 0 / 0
02.04.2010, 21:33
    #36558812
йцукен12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
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
02.04.2010, 21:36
    #36558817
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
йцукен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
03.04.2010, 21:19
    #36559409
Finna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Код: 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
03.04.2010, 21:34
    #36559424
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Finna,

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

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

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

Все мы были молодыми и глупыми
Хоть до такого именования полей я не опускался, но умудрился сделать хранилище пользовательских настроек, где переменные не именовались, а нумеровались... это проходит с опытом
...
Рейтинг: 0 / 0
04.04.2010, 12:21
    #36559704
Finna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Мне, право же, крайне неловко за свои "корявости", но база появилась несколько раньше, чем я начал читать мануалы и хелпы... Сначала был ексель, который макросом построчно, выводил в отчет с соседнего листа данные по ВПР и СУММЕСЛИ, после третьей тысячи строк, стало небыстро... я потратил примерно седан, на изготовление спец.проги у серъезной фирмы, но в результате то, что мне было нужно, то, что я заказывал, то, что понял програмист, и то, что получилось, оказались вещами сильно далекими друг от друга... в филосовском смысле :)
И тогда я узнал слово рекордсет... Кнопочкой в аксессе ексельная табличка бала перетянута в базу, а названия полей там были такие, что аксесс переименовал все сам... и правильно, наверное... При обработке рекордсета, я использовал номера полей, названия меня не занимали...
И, с тех пор, время от времени, я стал узнавать новые слова...
По вопросам:
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
04.04.2010, 20:03
    #36560082
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
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
04.04.2010, 20:16
    #36560095
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Shocker.ProЧто будет, если вы просто напишете
B="нужный текст" (не беря его из ячейки)?

Кстати, а попробуйте
B="*"
и тут вообще сразу будет понятно, проблема в исходных данных или в передаче параметров в аксесс
...
Рейтинг: 0 / 0
05.04.2010, 02:01
    #36560366
Finna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
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
05.04.2010, 02:15
    #36560368
Finna
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
про Creatent погорячился - "Creatent" конечно...
...
Рейтинг: 0 / 0
05.04.2010, 09:35
    #36560519
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выполнить запрос в Access c условием like"*"&[Par]&"*" из VB
Finna
Без like - это когда в конструкторе аксесса, вместо
Код: plaintext
Like "*"&[]&"*", 
в поле22, просто стоит запрос параметра:
Код: plaintext
[]
.

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

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

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

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

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

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

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

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

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

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

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

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

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


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