0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 16
1

Выборка из базы полей с условием

15.02.2012, 15:36. Показов 1667. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть такова: есть база волонтеров.Каждый из них выбрал несколько направлений деятельности
Есть форма для отправки писем.
необходимо отправить письма волонтерам,выбравшим какое либо отдельное направление.
Создана форма,на ней поле со списком. В списке - названия всех направлений. Но в самой таблице направления имеют логический тип(выбрано\невыбрано)
Задача то в принципе ясна: в соответствии с выбранные в ПолеСоСписком направлении выбрать всех волонтеров, у которых это направление выбрано и для каждого такого волонтера присвоить значение поля OSend=True
Но вот не получается никак.
Visual Basic
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
29
30
31
32
33
34
35
36
Private Sub Кнопка20_Click()
 On Error GoTo Err_Кнопка20_Click
 
    Dim stDocName As String, napr As String
    Dim rst As DAO.Recordset
    Dim strSql As String
  
 
    stDocName = ChrW(1041) & ChrW(1072) & ChrW(1079) & ChrW(1072) & ChrW(32) & ChrW(1047) & ChrW(1072) & ChrW(1087) & ChrW(1088) & ChrW(1086) & ChrW(1089)
    DoCmd.OpenQuery stDocName, acNormal, acEdit
    napr = Forms![Form1].NApravlenie.Value
 
    If napr = "Выявление и подготовка лидеров" Then
        napr = "Выявление и подготовка лидеров волонтерского движения"
    ElseIf napr = "Транспорт" Then
        napr = "Специальная подготовка по направлению «Транспорт»"
    End If
    
    strSql = "SELECT Email FROM База Where napr"
    Set rst = CurrentDb.OpenRecordset(strSql)
  
    Do Until rst.EOF
    rst.Edit
    rst!oSend = True
    rst.Update
    rst.MoveNext
    Loop
 
Exit_Кнопка20_Click:
    Exit Sub
 
Err_Кнопка20_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка20_Click
    
End Sub
но после строки
Visual Basic
1
Set rst = CurrentDb.OpenRecordset(strSql)
получаю ошибку"Слишком мало параметров.Требуется 1"

Я понимаю ошибку,что napr у меня то текстовый,то логический.Это неверно. Но как посторить правильный код - не пойму

Буду оч благодарен за любую помощь)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 15:36
Ответы с готовыми решениями:

Получить список таблиц, полей и описание полей базы данных
Добрый день! подскажите как можно получить список таблиц, полей и описание полей базы данных?

Выборка данных с условием.
Добрый день, вечер. Подскажите, пожалуйста, как сделать выборку. Запутался в "Запрос3", не...

Выборка данных с условием
Прошу помощи. Есть база данных с должностями в больницах, должности к примеру выглядят так: ...

Сумма полей 4-х таблиц с условием
Как мне получить сумму этих полей? В условии находится поля месяц и код товара(код рамы, код...

13
41 / 41 / 3
Регистрация: 14.10.2011
Сообщений: 60
15.02.2012, 15:48 2
А зачем Вы циклом через Recordset пытаетесь изменить значения поля? Не доверяете возможностям Jet?
А ведь с помощью UPDATE запрос намного быстрее и эффективнее получится.
Т.е. вот этот кусок надо совсем убрать:
Visual Basic
1
2
3
4
5
6
7
8
9
    strSql = "SELECT Email FROM База Where napr"
    Set rst = CurrentDb.OpenRecordset(strSql)
  
    Do Until rst.EOF
    rst.Edit
    rst!oSend = True
    rst.Update
    rst.MoveNext
    Loop
И заменить на этот кусок.
Visual Basic
1
2
    strSql = "UPDATE База SET Email = True Where Napravlenie = '" & napr & "';"
    CurrentProject.Connection.Execute strSql
Я не знаю точное название поля и предположил, что у Вас оно называет "Napravlenie". Если это не так, то исправьте название. И насколько я понял у Вас есть либо таблица "База", либо запрос.

P.S. И ещё. Не нужно называть объекты не предметно. Что значит "Кнопка20"? Прям по названию можно "догадаться" о чем она? Это очень плохая и вредная привычка.
0
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 16
15.02.2012, 16:08  [ТС] 3
ТОгда уж наверное не Email=true, а Osen=True?

Но все равно выдает ошибку "Отсутствует значение одного или нескольких требуемых параметров"

З.Ы. Да,поле со списком называется Napravlenie, База - это таблица
З.З.Ы. НАсчет кнопки - сорри,запарил)

Добавлено через 6 минут
Так,стоп.
Выражение
Visual Basic
1
Napravlenie = '" & napr & "';"
будет всегда истинным,потому что napr и берется из поля Napravlenie
А надо,зная значение napr, выбрать тех волонтеров,у которых в направлении, таком же,как napr, стоит значение true
Может криво объясняю,но приведу пример:
Есть волонтер Иванов, который выбрал экологическое и творческое направление.
Мы в поле Napravlenie выбираем творческое направление и нажимаем Кнопку20, находим в базе Иванова,видим,что у него значение поля Творческое=true и тогда для Иванова присваиваем значение поля oSend=True
0
Эксперт MS Access
7395 / 4532 / 295
Регистрация: 12.08.2011
Сообщений: 14,015
16.02.2012, 10:04 4
Цитата Сообщение от Vigor Посмотреть сообщение
Я понимаю ошибку,что napr у меня то текстовый,то логический
это как это? и почему сразу не обращаться к полю? --->
SQL
1
2
    strSql = "UPDATE База SET osend = True Where Napravlenie = " & Forms![Form1].NApravlenie      
    CurrentProject.Connection.Execute strSql
при условии, что всё настроено как положено и в таблицы заносим ключи для связей.
0
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 41
16.02.2012, 10:19 5
Я повторюсь:Napravlenie - это поле со списком,оно находится на форме. Мы должны выбранное направление из этого поля сравнить с полями в таблице
вот часть структуры таблицы,для:
Имя - текстовый
Фамилия - текстовый
Отчество - текстовый
Экологическое направление - логический
Социальное направление - логический
Творческое направление логический

А на форме у меня поле со списком Napravlenie, из которого командой
Visual Basic
1
napr = Forms![Form1].NApravlenie.Value
я узнаю,волонтеров с каким направление надо выбирать
Причем список этот не берется откуда то,а там введены фиксированные значения

ПОэтому часть проблемы и заключается в том,как сравнить napr и возможное, выбранное волонтером направление
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2012, 10:46 6
Цитата Сообщение от Vigor06 Посмотреть сообщение
вот часть структуры таблицы,для:
Имя - текстовый
Фамилия - текстовый
Отчество - текстовый
Экологическое направление - логический
Социальное направление - логический
Творческое направление логический
ИМХО, надо бы так-->

Имя - текстовый
Фамилия - текстовый
Отчество - текстовый
Направление - числовой (<---тут должен храниться код направления из таблицы tblНаправление)

tblНаправление(id,Направление) [id-счетчик,Направление-текстовый]
0
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 41
16.02.2012, 11:01 7
К сожалению,база досталась по наследству и там уже более 130 записей.долго переделывать((
тем более волонтер может одновременно выбрать до 7 направлений
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2012, 11:08 8
Цитата Сообщение от Vigor06 Посмотреть сообщение
и там уже более 130 записей.долго переделывать((
Вот когда будет за 1000....тогда уже будет долго..А пока,ИМХО,лучше сделать правильно сразу, потом хуже будет и сложнее переделать, поверьте!

Цитата Сообщение от Vigor06 Посмотреть сообщение
тем более волонтер может одновременно выбрать до 7 направлений
И? тоже самое можно будет сделать и при правильно структуре таблицы.
0
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 41
16.02.2012, 11:21 9
Цитата Сообщение от Agapov_stas Посмотреть сообщение
Вот когда будет за 1000....тогда уже будет долго..А пока,ИМХО,лучше сделать правильно сразу, потом хуже будет и сложнее переделать, поверьте!


И? тоже самое можно будет сделать и при правильно структуре таблицы.
ТОже верно.Но тогда я смутно представляю себе структуру таблицы,при которой будет удобнее решить текущую проблему. Все равно таким же макаром придется перебирать все строки с направлениями
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2012, 12:03 10
Приложите кусок БД(желательно в формате mdb.)
0
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 41
16.02.2012, 13:04 11
вот она
Вложения
Тип файла: zip База ВЦ.zip (338.5 Кб, 11 просмотров)
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2012, 15:34 12
Изменять нет времени, сделал пока так, как построена Ваша таблица.
Посмотрите формы Form1(то, как Вы пытались через IF..Then) и Form1_2(через Case)
Вложения
Тип файла: rar База ВЦ.rar (88.0 Кб, 18 просмотров)
1
0 / 0 / 0
Регистрация: 19.11.2010
Сообщений: 41
16.02.2012, 15:46 13
Оу,спасибо огромное! Вроде все отлично и выдает адекватные результаты)
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2012, 15:51 14
Цитата Сообщение от Vigor06 Посмотреть сообщение
Оу,спасибо огромное!
https://www.cyberforum.ru/ms-a... post355766

Цитата Сообщение от Vigor06 Посмотреть сообщение
Вроде все отлично и выдает адекватные результаты)
Но, неплохо бы переделать правильно таблу(!)
К сожалению, не хватает времени.Как получится, скину сюда.
0
16.02.2012, 15:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2012, 15:51
Помогаю со студенческими работами здесь

Выпадающий список из названий полей с условием их отбора
Всем доброго времени суток. Очень нужна ваша помощь, господа эксперты. Не знаю с какой стороны...

Выборка с исключением некоторых полей
Доброго времени суток! Столкнулся с проблемой: Есть две таблицы: Необходимо отобрать...

Выборка данных из вычисляемых полей
Здравствуйте! Необходимо для Клиентов (Client) вывести информацию по связанными с ними...

Выборка из нескольких полей столбца в одно
Здравствуйте! Прошу помочь с решением такой задачи (если оно существует): В базу вносятся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru