Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создать запрос / 22 сообщений из 22, страница 1 из 1
10.04.2004, 01:03
    #32476308
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
В результате поиска по таблице методом
Set db = CurrentDb
Set rs = db.OpenRecordset("1", dbOpenDynaset)
If rs.RecordCount <> 0 Then
rs.MoveFirst
Do Until rs.EOF
str3 = rs![Наименование] и т.д.
Получаются некоторые rs![Наименование] удовлетворяющие моим условиям отбора. Результаты поиска вывел MsgBox. Это все работает.
Вопросище: теперь мне нужно создать некий запрос, который будет выводить этот же результат поиска, только в запросе. Помогите сформулировать условие запроса.
Т.е. в MsgBox мне выводит ответ поиск по таблице "1" (список имен): "Петя", "вася". Теперь мне нужно составить запрос типа
SELECT [1].Код, [1].Наименование
FROM 1
WHERE ((([1].Наименование) In ("Вася","Петя")));
или
SELECT [1].Код, [1].Наименование
FROM 1
WHERE ((([1].Наименование)="Вася")) OR ((([1].Наименование)="Петя"));
но в WHERE как-то сослаться на результат поиска

Выражаю признательность за ответы
...
Рейтинг: 0 / 0
10.04.2004, 08:02
    #32476331
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
авторПолучаются некоторые rs![Наименование] удовлетворяющие моим условиям отбора
автортеперь мне нужно создать некий запрос, который будет выводить этот же результат поиска, только в запросе. Помогите сформулировать условие запроса

А как все-таки выборка-то осуществляется ?

Как говорилось и ранее - ТЕЛЕПАТЫ в отпуске, чтобы определить твои условия отбора...
...
Рейтинг: 0 / 0
10.04.2004, 12:04
    #32476379
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Условия выборки такова:

После получения str3 = rs![Наименование], считываю пятый символ из Наименования (например считал "DKS V 789"). Если пятый символ="V", то очень хорошо. Условие "V" ввожу в неком поле [1]

В результате поиска получаю значения "DKS V 789", "DKS V 801", "DKS V 804". (имена типа "DKS В ***" игнорируются).

stU=[1]
if Mid(len(rs![Наименование]),4,1)=stU then
strmsg=strmsg&rs![Наименование]
end if

Далее strmsg вывожу в msgbox: это все работает. Но как теперь вывести запрос на основании полученных результатов не знаю. Задача для меня осложняется тем, что в поле [1] я могу ввести "V" "B" "C" и еще ряд других

Эх, у меня всегда были проблемы с письменными объяснениями проблемы, так и вспоминаю анекдот: "Ты не умничай - руками покажи"

Одним словом полученную строку значений надо приклеить как-то в условия отбора запроса, пробовал эту строку прописать в отдельное поле а потом [forms]![Поиск]![условие] вставить в условие отбора запроса, так она посылает меня за тридевять земель (в Гондурас кажется)
Надеюсь, что объяснил доступно
Желаю отвечающим и мне самому удачи
...
Рейтинг: 0 / 0
10.04.2004, 12:58
    #32476399
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Код: plaintext
1.
2.
select [ 1 ].код, [ 1 ].наименование
from [ 1 ]
where mid([ 1 ].наименование, 5 , 1 ) = inputbox


Напиши и запусти...
Это не то ? (значит не правильно понял постановку вопроса)

(вместо inputbox можно подставить что-нибудь другое, к примеру - результат выполнения функции...)
...
Рейтинг: 0 / 0
10.04.2004, 13:00
    #32476400
Deminik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
В инпутбокс введи "v" или "b"...
...
Рейтинг: 0 / 0
10.04.2004, 13:28
    #32476415
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Черт, наверно замыкаю (ночью выпил мало кофе и сигареты не вовремя кончились) Упистил еще один момент (пример дал по предыдущему тестовому варианту) дело в том, что "V" "B" или другие могут встречаться на любой позиции, т.е. не только 5. В критерии поиска ищу позиции символа "V" (он может быть и 7, и 6) нахожу и потом ищу. Ваш метод сработал, но действует на стационарный вариант. У меня постоянно меняются номера дел (DKS V 789, DKS_01 V 790, DKS_01.р V 789). Так что "V" не известно заранее где.

Вроде бы я нашел какой-то метод, сейчас тестирую на простых именах, но только запутался в этих ' " . Дает постоянно синтактическую обшибку

Dim db As Database
Dim qdfNew As QueryDef
Set db = CurrentDb
Set rs = db.OpenRecordset("1", dbOpenDynaset)
DoCmd.DeleteObject acQuery, "Поиск"
z = "('Константин','Ирина')"
With db
Set qdfNew = .CreateQueryDef("Поиск", _
"SELECT [1].Код, [1].Наименование FROM 1 WHERE ((([1].Наименование) In'" & z & "'))")
.Close
End With

Т.е. если пишу в наглую "SELECT [1].Код, [1].Наименование FROM 1 WHERE ((([1].Наименование) In ('Константин','Ирина')))", то все нормальььььно! и работает так как нужно (формирует запрос и самое. что поразительно правильно формирует)
Но к сожалению, то что в IN () у меня постоянно меняется, я могу спокойно в результате выполнения поиска менять значения Z (так как мне нужно), но не можу в клинить его в запрос из-за этих " ' (я так думаю-предполагаю)
Помогите расставить знаки припенания (эта проблема у меня еще в школе была на уроках русского языка)
...
Рейтинг: 0 / 0
10.04.2004, 13:43
    #32476423
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Все очень просто. Поскольку в селекте для обрамления стринга использованы ' - то и проблема будет только с ними. А надо всего-навсего их удвоить. То есть если переменная X включается в динамически составляемый селект, то надо юрать от нее Replace(X, "'", "''").
...
Рейтинг: 0 / 0
10.04.2004, 13:56
    #32476430
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
авторПомогите расставить знаки припенания (эта проблема у меня еще в школе была на уроках русского языка)
Заметно! Вообще-то знаки прЕпИнания ( только без обид. Ничего личного)
Не морочь себе голову и просто напиши
Код: plaintext
 "SELECT [1 ].Код, [ 1 ].Наименование FROM [ 1 ] WHERE [ 1 ].Наименование) like '*" &  твое_условие_поиска  & "*'"
...
Рейтинг: 0 / 0
10.04.2004, 14:01
    #32476431
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
2 VIG:

Вот как раз твое_условие_поиска - это и есть та переменная, с которой надо проделать то, что я написал.
...
Рейтинг: 0 / 0
10.04.2004, 14:08
    #32476435
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Саныч, это если твое_условие_поиска содержит апостроф.Хотя , "маслом каши не испортишь"
З.Ы. у Ukraina в посте 622401 к тому же неправильно расставлены скобки
...
Рейтинг: 0 / 0
10.04.2004, 14:15
    #32476440
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
VIG, там ведь сказано, что это переменная, причем проблемы возникают тогда, когда она содержит кавычки.

А неправильных скобок не вижу. Вижу лишние, но кашу маслом не испортишь.
...
Рейтинг: 0 / 0
10.04.2004, 14:23
    #32476447
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
А неправильных скобок не вижу. Вижу лишние, но кашу маслом не испортишь.

Если к-во открывающих скобок не равно к-ву закрывающих- то никакое масло не поможет.
...
Рейтинг: 0 / 0
10.04.2004, 14:29
    #32476450
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
И где же оно не равно?

Set qdfNew = .CreateQueryDef("Поиск", _
"SELECT [1].Код, [1].Наименование FROM 1 WHERE ((([1].Наименование) In'" & z & "'))")
...
Рейтинг: 0 / 0
10.04.2004, 14:39
    #32476454
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Sorry, я смотрел только на селект , а оказывается последняя скобка относилась к CreateQueryDef
...
Рейтинг: 0 / 0
10.04.2004, 15:12
    #32476464
EDUDK01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Жутко извиняюсь за оффтопик, но не могу удержаться от вопроса.

авторSet rs = db.OpenRecordset("1", dbOpenDynaset)
If rs.RecordCount <> 0 Then
rs.MoveFirst
Do Until rs.EOF
str3 = rs![Наименование] и т.д.
Получаются некоторые rs![Наименование] удовлетворяющие моим условиям отбора. Результаты поиска вывел MsgBox.

Вторая и третия строки здесь вроде как лишние-при открытии рекордсета курсор так и так устанавливается на место первой записи. А если записей нет то получим ошибку (в данном случае MsgBox в обработчике ошибок может вывести "Нет записей").
Или я неправ?
...
Рейтинг: 0 / 0
10.04.2004, 15:20
    #32476466
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
2 EDUDK01:

Это верно. Но я, например, чисто психологически только недавно смог себя заставить отказаться от этих двух строчек. А долгие годы я писал так:

If Not rs.BOF Then
rs.MoveFirst

Видимо, у меня в голове сидела какая-то фраза из старого хелпа о том, что без явного MoveFirst текущая запись может оказаться не определена.
...
Рейтинг: 0 / 0
10.04.2004, 15:24
    #32476468
EDUDK01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Спасибо :)
...
Рейтинг: 0 / 0
10.04.2004, 16:47
    #32476497
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Люди!!!
Некоторое время отсутствовал (чертов провайдер!!!)
От отсутствия общения с миром как то сделал сам, чисто интуитивно пошел по пути (c)VIG а. Вроде работает, но немогу понять почему и Как стабилен мой вариант (немного отличается от (c)VIG). Вогнал в наглую условие отбора
k = [3] - берет из поля полученные результаты отбора
z = k
With db
Set qdfNew = .CreateQueryDef("Поиск", _
"SELECT [1].код, [1].Наименование FROM 1 WHERE ((([1].Наименование) In " & z & "))")
Почему-то когда вставляю К давало ошибку, ввел дополнительную переменную z все пошло? Ничега непонимайт, вроде раньше тоже самое писал. Кажется пора бросать курить и сдавать нормы ГТО!?

Кстати VIG!!! Я же там написал, что у меня проблемы были (да и щас есть) с русским языком, и не только со знаками этими самыми, но и в глобальном смысле этого слова, например почему молоко пишется так, а мне всегда было удобно писать малоко, или "что" ведь никто в мире не говорит "что" - все говорят што. Нет никаких обид- это, так, отступление перед следующим вопросом

2. меня смутило

"Вторая и третия строки здесь вроде как лишние-при открытии рекордсета курсор так и так устанавливается на место первой записи. А если записей нет то получим ошибку (в данном случае MsgBox в обработчике ошибок может вывести "Нет записей").
Или я неправ?"
Чете мне страшновато стало. а как быть? Хотя меня успокаевает тот факт. что если записей нет, то и искать, т.е. применять поиск нет смысла!?
ВС !!! А то что Вы написали будет работать?

И наверно последнее: Как можно проверить существует ли запрос или нет? А то столкнулся с этим при тестировании того, что мы так обсуждали. Если запрос уже существовал, мне говорят. что такое уже ест и не генерирует новый запрос, т.е приходится удалять. Сделал это удаление в коде, но возможна ситуация когда этого запроса нет. а оно пытается его ликвидировать, но не находит и опять говорит что-то нехорошее?
...
Рейтинг: 0 / 0
10.04.2004, 16:55
    #32476504
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
авторВС!!! А то что Вы написали будет работать?
Нет, не будет. Я специально из вредности даю советы, которые не работают.
...
Рейтинг: 0 / 0
10.04.2004, 17:04
    #32476510
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
ВС!!!!!!!!!!!!!!
Звиняйте Вы менi!!!
Это я толь от радости толь от не досыпания такие глупые вопросы задаю
Кстати нашел я тута ссылочку


If FindTable("ИмяТаблицы") = True Then ' найти таблицу
CurrentDb.TableDefs.Delete "ИмяТаблицы" ' если найдена, то удалить
End If

А будет ли работать этот метод для запросов

If FindQuery("Поиск") = True Then ' найти таблицу
CurrentDb.QueryDefs.Delete "Поиск" ' если найдена, то удалить
End If

Что то у меня не сработало!?
...
Рейтинг: 0 / 0
10.04.2004, 17:11
    #32476513
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Но функцию FindTable или FindQuery надо написать.
...
Рейтинг: 0 / 0
10.04.2004, 17:30
    #32476523
Ukraina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создать запрос
Всем огромаднейшее спасибо!!!!!!!!!!!!!! Все работает!!!!!!!!!!!!!!!!
ВС!!!!!!!!!!! Функции написал! Оказывается не так страшен черт, как его малюют!

Ремарка: И все-таки, почему это все работает, и даже так как нужно!?
Цитата дня: "Какой Вы все-таки интересный человек, товарищ Корейко. С таким счастьем и на свободе!"
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создать запрос / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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