|
|
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Есть форма, в ней список из трех колонок, в третьей колонке содержится УИД водителя,он же выбран в списке в качестве возвращаемого значения.В запросе хочется получить все УИДы из списка32, но запрос ничего не возвращает, несмотря на то, что список не пустой. Подскажите что делать??? SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 08:59:36 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Хи-хи... 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; но скорость будет еще та... Таблицу вспомогательную надо пользовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:15:06 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. так не пробовал? откуда запускается запрос? из базы? из кода? docmd.openquery "name" docmd.openquery "SELECT tram-tram..." как запускается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:20:46 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Mari.PЕсть форма, в ней список из трех колонок, в третьей колонке содержится УИД водителя,он же выбран в списке в качестве возвращаемого значения.В запросе хочется получить все УИДы из списка32, но запрос ничего не возвращает, несмотря на то, что список не пустой. Подскажите что делать??? SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))); ([Forms]![Новый путевой лист]![Список32]) - Возвратит один Уид из выбранной строки или NULL, если строки не выбраны. А источник данных этого списка? Запрос? Почему бы его не использовать для получения списка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:21:18 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
[quot aleks2]Хи-хи... SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))); Так низзя: (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))) Да почему нельзя? Если какую-нибудь строку в списке выбрать, то по запросу и уид этой строки нормально выберется, только мне-то надо чтобы все уиды которые есть в списке32 в колонке номер 3 выбрались по запросу. А если в списке ничего мышкой не заселектить, то и запрос пустой. Что делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:25:31 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
[SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32])));[/quot] ([Forms]![Новый путевой лист]![Список32]) - Возвратит один Уид из выбранной строки или NULL, если строки не выбраны. А источник данных этого списка? Запрос? Почему бы его не использовать для получения списка?[/quot] Ну да, так и получается Источник данных использовать нельзя, тк изначально в нем тьма записей, пользователь мультиселектить устанет. Поэтому вызывается дополнительная форма и из нее в список попадает УИД. А можно как-нибудь без источника данных обойтись??? И почему запрос ругается на свойство списка Column?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:31:02 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Mari.P SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))); Для чего все это? Цель какая? Зачем пользователю мультиселектить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:46:51 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Вот тебе и отвечают. У тебя есть три варианта: 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.Уид ---------------------- Впрочем, есть еще вариант с фильтром на отчет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:47:22 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
И зачем делать отдельный список, в котором должно быть все тоже самое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:49:03 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Витал Mari.P SELECT P.Уид FROM справочник_водителей_АТЦ AS P WHERE (((P.Уид) In ([Forms]![Новый путевой лист]![Список32]))); Для чего все это? Цель какая? Зачем пользователю мультиселектить? Да потому что водителей тьма, в списке выбирать экипаж не удобно. Удобно вызывать форму, где показаны все водители и инфа по ним (10 полей). А в результирующем списке данные по экипажу - табельный и фио. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:51:22 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
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.Уид ---------------------- Впрочем, есть еще вариант с фильтром на отчет... Так не охота доп контрол. А можно цикл организовать без кода, только с помощью макроса??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 09:53:40 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Mari.PДа потому что водителей тьма , в списке выбирать экипаж не удобно. Удобно вызывать форму, где показаны все водители и инфа по ним (10 полей). А в результирующем списке данные по экипажу - табельный и фио. Вот. Т.е. - есть таблица "Водители" и есть таблица "Экипажи". Задача выбрать экипаж? Или сформировать экипаж? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 11:35:32 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
можно не делать отдельную табличку,а создать дополнительное поле в таблице-источнике данных для списка. при "щёлканье" по мультисписку в это доп.поле писать флажок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 11:44:29 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
>>Так не охота доп контрол. А можно цикл организовать без кода, только с помощью макроса??? Можно функцией VBA сформировать строку... -------------------- Но когда-нибудь, ты поймешь - лабуда это. Табличка для выбора, никаких проблем и быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 11:51:14 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
>>можно не делать отдельную табличку,а создать дополнительное поле в таблице-источнике данных для списка. при "щёлканье" по мультисписку в это доп.поле писать флажок Можно то... можно. А чего будет когда два пользователя начнут щелкать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 11:55:09 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
автор 3) Ты запихиваешь Уид1, Уид2, Уид3 ... в спец. табличку SelectedUIDs и пользуешь WHERE Уид in(select * FROM SelectedUIDs) или WHERE Уид =SelectedUIDs решение стандартное : - держать mdb для такой таблички локально - добавлять ключ по оператору ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 12:16:57 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Т.е. - есть таблица "Водители" и есть таблица "Экипажи". Задача выбрать экипаж? Или сформировать экипаж?[/quot] Задача сформировать экипаж и привязать его к путевому листу.Есть таблица водители и есть таблица экипажи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 12:31:51 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
автор решение стандартное : - держать 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 12:46:22 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
Такой код. 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] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 12:49:08 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
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] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2004, 13:06:56 |
|
||
|
Проблема с условием в запросе.
|
|||
|---|---|---|---|
|
#18+
>>Хм добавлять ключ по оператору. Да пользователь перед тем как сформировать путевой лист десять раз водителей выберет и удалит. Что же мне и удалять ключи по событию??? Когда-нибудь, ты поймешь - проще делать именно так. >>Так проще уж код написать. По первости код писать очень нравится. >>Что же мне и удалять ключи по событию??? Вариантов, как всегда, много... Поэтому остановлюсь на самом тривиальном <=> самом эффективном. 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() --------------- и заметь - никакого кода... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2004, 09:11:55 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32695265&tid=1671761]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
17ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 321ms |

| 0 / 0 |
