|
|
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
В результате поиска по таблице методом 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 как-то сослаться на результат поиска Выражаю признательность за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 01:03 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
авторПолучаются некоторые rs![Наименование] удовлетворяющие моим условиям отбора автортеперь мне нужно создать некий запрос, который будет выводить этот же результат поиска, только в запросе. Помогите сформулировать условие запроса А как все-таки выборка-то осуществляется ? Как говорилось и ранее - ТЕЛЕПАТЫ в отпуске, чтобы определить твои условия отбора... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 08:02 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Условия выборки такова: После получения 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]![Поиск]![условие] вставить в условие отбора запроса, так она посылает меня за тридевять земель (в Гондурас кажется) Надеюсь, что объяснил доступно Желаю отвечающим и мне самому удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 12:04 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Напиши и запусти... Это не то ? (значит не правильно понял постановку вопроса) (вместо inputbox можно подставить что-нибудь другое, к примеру - результат выполнения функции...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 12:58 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
В инпутбокс введи "v" или "b"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 13:00 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Черт, наверно замыкаю (ночью выпил мало кофе и сигареты не вовремя кончились) Упистил еще один момент (пример дал по предыдущему тестовому варианту) дело в том, что "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 (так как мне нужно), но не можу в клинить его в запрос из-за этих " ' (я так думаю-предполагаю) Помогите расставить знаки припенания (эта проблема у меня еще в школе была на уроках русского языка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 13:28 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Все очень просто. Поскольку в селекте для обрамления стринга использованы ' - то и проблема будет только с ними. А надо всего-навсего их удвоить. То есть если переменная X включается в динамически составляемый селект, то надо юрать от нее Replace(X, "'", "''"). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 13:43 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
авторПомогите расставить знаки припенания (эта проблема у меня еще в школе была на уроках русского языка) Заметно! Вообще-то знаки прЕпИнания ( только без обид. Ничего личного) Не морочь себе голову и просто напиши Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 13:56 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
2 VIG: Вот как раз твое_условие_поиска - это и есть та переменная, с которой надо проделать то, что я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:01 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Саныч, это если твое_условие_поиска содержит апостроф.Хотя , "маслом каши не испортишь" З.Ы. у Ukraina в посте 622401 к тому же неправильно расставлены скобки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:08 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
VIG, там ведь сказано, что это переменная, причем проблемы возникают тогда, когда она содержит кавычки. А неправильных скобок не вижу. Вижу лишние, но кашу маслом не испортишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:15 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
А неправильных скобок не вижу. Вижу лишние, но кашу маслом не испортишь. Если к-во открывающих скобок не равно к-ву закрывающих- то никакое масло не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:23 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
И где же оно не равно? Set qdfNew = .CreateQueryDef("Поиск", _ "SELECT [1].Код, [1].Наименование FROM 1 WHERE ((([1].Наименование) In'" & z & "'))") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:29 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Sorry, я смотрел только на селект , а оказывается последняя скобка относилась к CreateQueryDef ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 14:39 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Жутко извиняюсь за оффтопик, но не могу удержаться от вопроса. авторSet rs = db.OpenRecordset("1", dbOpenDynaset) If rs.RecordCount <> 0 Then rs.MoveFirst Do Until rs.EOF str3 = rs![Наименование] и т.д. Получаются некоторые rs![Наименование] удовлетворяющие моим условиям отбора. Результаты поиска вывел MsgBox. Вторая и третия строки здесь вроде как лишние-при открытии рекордсета курсор так и так устанавливается на место первой записи. А если записей нет то получим ошибку (в данном случае MsgBox в обработчике ошибок может вывести "Нет записей"). Или я неправ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 15:12 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
2 EDUDK01: Это верно. Но я, например, чисто психологически только недавно смог себя заставить отказаться от этих двух строчек. А долгие годы я писал так: If Not rs.BOF Then rs.MoveFirst Видимо, у меня в голове сидела какая-то фраза из старого хелпа о том, что без явного MoveFirst текущая запись может оказаться не определена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 15:20 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Люди!!! Некоторое время отсутствовал (чертов провайдер!!!) От отсутствия общения с миром как то сделал сам, чисто интуитивно пошел по пути (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 в обработчике ошибок может вывести "Нет записей"). Или я неправ?" Чете мне страшновато стало. а как быть? Хотя меня успокаевает тот факт. что если записей нет, то и искать, т.е. применять поиск нет смысла!? ВС !!! А то что Вы написали будет работать? И наверно последнее: Как можно проверить существует ли запрос или нет? А то столкнулся с этим при тестировании того, что мы так обсуждали. Если запрос уже существовал, мне говорят. что такое уже ест и не генерирует новый запрос, т.е приходится удалять. Сделал это удаление в коде, но возможна ситуация когда этого запроса нет. а оно пытается его ликвидировать, но не находит и опять говорит что-то нехорошее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 16:47 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
авторВС!!! А то что Вы написали будет работать? Нет, не будет. Я специально из вредности даю советы, которые не работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 16:55 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
ВС!!!!!!!!!!!!!! Звиняйте Вы менi!!! Это я толь от радости толь от не досыпания такие глупые вопросы задаю Кстати нашел я тута ссылочку If FindTable("ИмяТаблицы") = True Then ' найти таблицу CurrentDb.TableDefs.Delete "ИмяТаблицы" ' если найдена, то удалить End If А будет ли работать этот метод для запросов If FindQuery("Поиск") = True Then ' найти таблицу CurrentDb.QueryDefs.Delete "Поиск" ' если найдена, то удалить End If Что то у меня не сработало!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 17:04 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Но функцию FindTable или FindQuery надо написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 17:11 |
|
||
|
Создать запрос
|
|||
|---|---|---|---|
|
#18+
Всем огромаднейшее спасибо!!!!!!!!!!!!!! Все работает!!!!!!!!!!!!!!!! ВС!!!!!!!!!!! Функции написал! Оказывается не так страшен черт, как его малюют! Ремарка: И все-таки, почему это все работает, и даже так как нужно!? Цитата дня: "Какой Вы все-таки интересный человек, товарищ Корейко. С таким счастьем и на свободе!" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 17:30 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32476497&tid=1675423]: |
0ms |
get settings: |
5ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
198ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 507ms |

| 0 / 0 |
