powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с условием в запросе.
21 сообщений из 21, страница 1 из 1
Проблема с условием в запросе.
    #32694897
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть форма, в ней список из трех колонок, в третьей колонке содержится УИД водителя,он же выбран в списке в качестве возвращаемого значения.В запросе хочется получить все УИДы из списка32, но запрос ничего не возвращает, несмотря на то, что список не пустой. Подскажите что делать???

SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694913
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хи-хи...

SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));

Так низзя: (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])))

SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE InStr([Forms]![Новый путевой лист]![Список32], LTRIM(Str(P.Уид)))>0;

Ну и чтобы не лопухнуться:
1) Должен иметь формат: Уид1, Уид2, -- короче иметь разделитель.
тогда безопаснее
SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE InStr(", "+[Forms]![Новый путевой лист]![Список32]+", ", " ,"+LTRIM(Str(P.Уид))+" ,")>0;

но скорость будет еще та... Таблицу вспомогательную надо пользовать.
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694919
Фотография kedzo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE P.Уид = [Forms]![Новый путевой лист]![Список32];

так не пробовал?
откуда запускается запрос? из базы? из кода?
docmd.openquery "name"
docmd.openquery "SELECT tram-tram..."

как запускается?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694921
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PЕсть форма, в ней список из трех колонок, в третьей колонке содержится УИД водителя,он же выбран в списке в качестве возвращаемого значения.В запросе хочется получить все УИДы из списка32, но запрос ничего не возвращает, несмотря на то, что список не пустой. Подскажите что делать???

SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));
([Forms]![Новый путевой лист]![Список32]) - Возвратит один Уид из выбранной строки или NULL, если строки не выбраны.
А источник данных этого списка? Запрос? Почему бы его не использовать для получения списка?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694925
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot aleks2]Хи-хи...

SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));

Так низзя: (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])))


Да почему нельзя? Если какую-нибудь строку в списке выбрать, то по запросу и уид этой строки нормально выберется, только мне-то надо чтобы все уиды которые есть в списке32 в колонке номер 3 выбрались по запросу.
А если в списке ничего мышкой не заселектить, то и запрос пустой. Что делать?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694933
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));[/quot]
([Forms]![Новый путевой лист]![Список32]) - Возвратит один Уид из выбранной строки или NULL, если строки не выбраны.
А источник данных этого списка? Запрос? Почему бы его не использовать для получения списка?[/quot]

Ну да, так и получается
Источник данных использовать нельзя, тк изначально в нем тьма записей, пользователь мультиселектить устанет. Поэтому вызывается дополнительная форма и из нее в список попадает УИД.
А можно как-нибудь без источника данных обойтись???
И почему запрос ругается на свойство списка Column??
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694964
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.P
SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));

Для чего все это? Цель какая? Зачем пользователю мультиселектить?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694967
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе и отвечают.
У тебя есть три варианта:
1) Динамический SQL - т.е. строка запроса стоится целиком с нужным WНERE

2) Ты формируешь где-то в доп контроле строку "Уид1, Уид2, Уид3" и пользуешь WНERE InStr(...)>0 в запросе.

3) Ты запихиваешь Уид1, Уид2, Уид3 ... в спец. табличку SelectedUIDs
и пользуешь WHERE Уид in(select * FROM SelectedUIDs) или
WHERE Уид =SelectedUIDs
или (что быстрее всего) T INNER JOIN SelectedUIDs ON T.Уид=SelectedUIDs.Уид

----------------------
Впрочем, есть еще вариант с фильтром на отчет...
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694972
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И зачем делать отдельный список, в котором должно быть все тоже самое?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694981
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витал Mari.P
SELECT P.Уид
FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));

Для чего все это? Цель какая? Зачем пользователю мультиселектить?


Да потому что водителей тьма, в списке выбирать экипаж не удобно. Удобно вызывать форму, где показаны все водители и инфа по ним (10 полей).
А в результирующем списке данные по экипажу - табельный и фио.
Вот.
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32694983
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks2Вот тебе и отвечают.
У тебя есть три варианта:
1) Динамический SQL - т.е. строка запроса стоится целиком с нужным WНERE

2) Ты формируешь где-то в доп контроле строку "Уид1, Уид2, Уид3" и пользуешь WНERE InStr(...)>0 в запросе.

3) Ты запихиваешь Уид1, Уид2, Уид3 ... в спец. табличку SelectedUIDs
и пользуешь WHERE Уид in(select * FROM SelectedUIDs) или
WHERE Уид =SelectedUIDs
или (что быстрее всего) T INNER JOIN SelectedUIDs ON T.Уид=SelectedUIDs.Уид

----------------------
Впрочем, есть еще вариант с фильтром на отчет...


Так не охота доп контрол. А можно цикл организовать без кода, только с помощью макроса???
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695249
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.PДа потому что водителей тьма , в списке выбирать экипаж не удобно. Удобно вызывать форму, где показаны все водители и инфа по ним (10 полей).
А в результирующем списке данные по экипажу - табельный и фио.
Вот.

Т.е. - есть таблица "Водители" и есть таблица "Экипажи". Задача выбрать экипаж? Или сформировать экипаж?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695265
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно не делать отдельную табличку,а создать дополнительное поле в таблице-источнике данных для списка.
при "щёлканье" по мультисписку в это доп.поле писать флажок
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695280
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Так не охота доп контрол. А можно цикл организовать без кода, только с помощью макроса???

Можно функцией VBA сформировать строку...
--------------------
Но когда-нибудь, ты поймешь - лабуда это. Табличка для выбора, никаких проблем и быстро.
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695295
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>можно не делать отдельную табличку,а создать дополнительное поле в таблице-источнике данных для списка.
при "щёлканье" по мультисписку в это доп.поле писать флажок

Можно то... можно. А чего будет когда два пользователя начнут щелкать?
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695383
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
3) Ты запихиваешь Уид1, Уид2, Уид3 ... в спец. табличку SelectedUIDs
и пользуешь WHERE Уид in(select * FROM SelectedUIDs) или
WHERE Уид =SelectedUIDs

решение стандартное :
- держать mdb для такой таблички локально
- добавлять ключ по оператору
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695431
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. - есть таблица "Водители" и есть таблица "Экипажи". Задача выбрать экипаж? Или сформировать экипаж?[/quot]

Задача сформировать экипаж и привязать его к путевому листу.Есть таблица водители и есть таблица экипажи.
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695485
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
решение стандартное :
- держать mdb для такой таблички локально
- добавлять ключ по оператору


Хм добавлять ключ по оператору. Да пользователь перед тем как сформировать путевой лист десять раз водителей выберет и удалит.
Что же мне и удалять ключи по событию??? Так проще уж код написать.

i=0
With ListControl
while i<= ListCount
CurrentDB.Execute("SELECT P.Уид FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид)="+Str([Forms]![Новый путевой лист]![Список32].Column(3,i))+"));")

i=i+1
wend
End With
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695497
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой код.
i=0
With ListControl
while i< .ListCount
CurrentDB.Execute("SELECT P.Уид FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид)="+Str(.Column(3,i))+"));")

i=i+1
wend
End With[/quot]
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32695552
Mari.P
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mari.Pвот инсерт забыла Такой код.
i=0
With ListControl
while i< .ListCount
CurrentDB.Execute("insert into экипажи select P.Уид FROM справочник_водителей_АТЦ AS P
WHERE (((P.Уид)="+Str(.Column(3,i))+"));")

i=i+1
wend
End With[/quot]
...
Рейтинг: 0 / 0
Проблема с условием в запросе.
    #32696849
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Хм добавлять ключ по оператору. Да пользователь перед тем как сформировать путевой лист десять раз водителей выберет и удалит.
Что же мне и удалять ключи по событию???

Когда-нибудь, ты поймешь - проще делать именно так.

>>Так проще уж код написать.
По первости код писать очень нравится.

>>Что же мне и удалять ключи по событию???
Вариантов, как всегда, много...
Поэтому остановлюсь на самом тривиальном <=> самом эффективном.
1) Делаем ПОСТОЯННУЮ табличку SelectedUIDs
поля:
ID - счетчик и ключ;
UID int,
Selected boolean,
SESSION_ID <идентификатор сессии - тип зависит от выбора>
+
Уникальный индекс (UID, SESSION_ID)

Что ты там будешь использовать в качестве идентификатора сессии это достаточно сложный вопрос. Простейший вариант - имя пользователя. Неудобства - нельзя работать нескольким пользователям под одним именем одновременно.

Идентификатор сессии следует хранить в глобальной переменной и возвращать, например, функцией:

Public gCurSessionID as long

function CurSessionID () as long
CurSessionID=gCurSessionID
end function

1) При открытии формы заполняешь SelectedUIDs

Delete SelectedUIDs
WHERE SESSION_ID=CurSessionID()

INSERT SelectedUIDs (UID, Selected, SESSION_ID)
Select UID, FALSE, CurSessionID() FROM справочник_водителей_АТЦ
---------
Примечание: если твоя реализация SESSION_ID позволит пользователю повторно использовать сессии, то Delete/Insert можно на более интеллектуальную конструкцию, чтобы предудущий выбор не очищался каждый раз. Тогда пользователь может спокойно пить чай закрыв Access.
-------

2) Делаешь ПОСТОЯННЫЙ QUERY SelelectUIDs

Select S.ID, S.Selected, T.<фамилия>, Т.<чего там еще нада> ...
FROM SelectedUIDs as S INNER JOIN справочник_водителей_АТЦ as T
WHERE S.SESSION_ID=CurSessionID()

3) На базе этого QUERY SelelectUIDs
делаешь форму, где разрешаешь только изменять поле Selected (его можно [\/] оформить) и вставляешь ее субформой на главную.
И пущай зверье на ней и выбирает/убирает, ставя галочки.

Когда оно (зверье) навыбирается, окончательные данные формируются просто:
select ... from ... as T INNER JOIN SelectedUIDs as S ON T.Уид=S.UID
WHERE S.SESSION_ID=CurSessionID()
---------------
и заметь - никакого кода...
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблема с условием в запросе.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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