Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77

Нужна помощь с текстом кода в Access (для выборки и обновления таблицы)

02.04.2012, 13:19. Показов 3763. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Нужна Ваша помощь.
Подскажите, пожайлуста, что в моем коде может быть не так:

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
Private Sub bUpd2_Click()
On Error GoTo err1
'открыть база
Dim src As DAO.Recordset
Set src = CurrentDb.OpenRecordset("база", dbOpenSnapshot)
 
'открыть Поликлиника
Dim dst As DAO.Recordset
Set dst = CurrentDb.OpenRecordset("Поликлиника", dbOpenDynaset)
 
Dim s$
'в цикле по записям база
Do While Not src.EOF
 
'строка критерия поиска по ключевому полю
s = "[Страна]='" & src("Страна") & "' AND & "[Название Поликлиники]='" & src("Название поликлиники") & "' AND " & "[Название города]='" & src("Название города") & "' & "'"
 
'ищем в приемнике
dst.FindFirst s
If Not dst.NoMatch Then
'нашли - обновляем значения остальных полей
dst.Edit
dst("[тип улицы]") = src("[тип улицы]")
dst("[название улицы]") = src("[название улицы]")
dst("[номер дома]") = src("[номер дома]")
dst.Update
End If
src.MoveNext
Loop
MsgBox "OK", vbInformation
Exit Sub
err1:
MsgBox Error, vbCritical
Exit Sub
End Sub
Выпадает ошибка в поле: s = "[Страна]='" & src("Страна") & "' AND & "[Название Поликлиники]='" & src("Название поликлиники") & "' AND " & "[Название города]='" & src("Название города") & "' & "'"
А я не понимаю - почему? У меня 2 таблицы для сравнения с таблицы База переноситься данные в таблицу Поликлиника, нужно подключить возможность нажатием на клавишу, чтобы проводилось обновление в таблице Поликлиника по 3-м совпадающим полям: Страна, Название Поликлиники, Название Города - в случае совпадения, тогда поля Тип улици, Название улици, Номер дома - меняються. А у меня не получаеться с написанием правильного алгоритма - мало знаний и опыта.
Код работает только с 2 ключевыми поля, когда я пишу: s = "[Название Поликлиники]='" & src("Название Поликлиники") & "' AND " & "[Название Города]='" & src("Название Города") & "'"

Как переписать поле для 3 - 4 или 5 текстовых полей (по которым производиться сравнение)?

Подскажите, пожайлуста.

И если можете, подскажите в какой литературе, можно повысить свой уровень.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.04.2012, 13:19
Ответы с готовыми решениями:

Массив: Нужна помощь в реализации кода для ввода симметричной матрицы.
Здравствуйте! Есть программа, которая позволяет пользователю вводить матрицу смежности графа, а так же редактировать её. Так же,...

Нужна помощь в установке обновления KB2685811
Добрый день. Можете скинуть ссылку на файл обновление windows KB2685811 пожалуйста Для Вашего вопроса создана отдельная тема.

Кнопка для обновления данных таблицы из базы данных access c#
Как мне запрограммировать кнопку для того, чтобы она обновляла данные из БД ACCESS C#?

17
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,933
Записей в блоге: 4
02.04.2012, 13:34
на первый взгляд все так
попробуйте изменить

Code
1
2
3
s = "[Страна]='" & src("Страна") 
s=s & "' AND [Название Поликлиники]='" & src("Название поликлиники") 
s=s & "' AND [Название города]='" & src("Название города") & "' "
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.04.2012, 14:12
Лучший ответ Сообщение было отмечено как решение

Решение

Fori, а не пробовали запросом обновлять?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub bUpd2_Click()
Dim sq$
sq = "UPDATE Поликлиника INNER JOIN " & _
             "база ON Поликлиника.[Страна] = база.[Страна] And " & _ 
             "Поликлиника.[Название поликлиники] = база.[Название поликлиники] And " & _
             "Поликлиника.[Название города] = база.[Название города] " & _
     "SET Поликлиника.[тип улицы] = база.[тип улицы], " & _
         "Поликлиника.[название улицы] = база.[название улицы], " & _
         "Поликлиника.[номер дома] = база.[номер дома]"
CurrentDb.Execute sq
End Sub
3
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
02.04.2012, 15:37  [ТС]
При использовании вашего примера у меня вылазит ошибка: Run-Time Error 3061. Слишком мало параметров. Требуется 2. и кнопки "End" и "Debug".
Что я делаю не так? Подскажите?
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.04.2012, 16:53
Цитата Сообщение от Fori Посмотреть сообщение
[При использовании вашего примера у меня вылазит ошибка: Run-Time Error 3061. Слишком мало параметров. Требуется 2.
Сверьте имена таблиц и полей, участвующих в запросе, с реальными именами в базе и при расхождении подправьте в запросе..
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
02.04.2012, 17:40  [ТС]
Цитата Сообщение от minob Посмотреть сообщение
Сверьте имена таблиц и полей, участвующих в запросе, с реальными именами в базе и при расхождении подправьте в запросе..
Супер, все работает. Это я не опытный пользователь. Не подумал, что при выполнении запроса отчет или вывод о совершенной операции не показывает.
Подскажите, как в код добавить информацию, чтобы по завершению выпадало окно "ОК", или если не сработало - тогда "Ошибка".
Я могу добавить такой код:
Visual Basic
1
2
3
4
5
6
7
Loop
    MsgBox "OK", vbInformation
    Exit Sub
err1:
    MsgBox Error, vbCritical
    Exit Sub
End Sub
Или мне нужен правильный код? У меня это код не работает пишет ошибку "Loop Without Do". Это почему такая ошибка?

Прошу прощения - заработало - без Loop.

Добавлено через 17 минут
Цитата Сообщение от minob Посмотреть сообщение
Fori, а не пробовали запросом обновлять?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub bUpd2_Click()
Dim sq$
sq = "UPDATE Поликлиника INNER JOIN " & _
             "база ON Поликлиника.[Страна] = база.[Страна] And " & _ 
             "Поликлиника.[Название поликлиники] = база.[Название поликлиники] And " & _
             "Поликлиника.[Название города] = база.[Название города] " & _
     "SET Поликлиника.[тип улицы] = база.[тип улицы], " & _
         "Поликлиника.[название улицы] = база.[название улицы], " & _
         "Поликлиника.[номер дома] = база.[номер дома]"
CurrentDb.Execute sq
End Sub
Нужна ваша помощь с еще одним вопросом:
Я хочу создать универсальный отчет: чтобы в Рабочей форме, возможно было бы выбирать с разных списков информацию и по нажатию кнопки - выполняется запрос с установленным фильтром (значение в поле со списком). А в случае не выбора значения в поле со списком на форме, то запрос выполнял условия, как будто Условие для выборки не заданы. Но, столкнулся со следующей проблемой, при выполнении запроса в выборку запроса попадают, только поля с не пустыми значениями, когда я в форме не выбираю ничего, а должна быть выборка - всех полей.
Вот пример Условия запроса:
SQL
1
2
3
SELECT база.Страна, ВИбаза.Город, ВИбаза.Код, ВИбаза.ФИО
FROM база
WHERE ((база.Страна) LIKE IIf(Forms![Рабочая Форма]!СписокСтрана1 IS NULL,"*",Forms![Рабочая Форма]!СписокСтрана1))
Когда я в Рабочей форме, в поле со списком "СписокСтрана1" выбираю "Россия", - выборка происходит правильно (в запросе, только все поля Страна, где указано "Россия"). А вот, когда я оставляю поле пустым, запрос выполняет выборку, всех заполненных полей, то есть, у меня в выборку попадает "Россия", "Казахстан", "Молдова", и не попадают пустые значения (поля где страна не выбрана, т.к. еще не контактировали с агентом).
Может, кто сталкивался с таким вопросом? Помогите пожалуйста.\

Заранее спасибо.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.04.2012, 17:55
Цитата Сообщение от Fori Посмотреть сообщение
...
WHERE ((база.Страна) Like IIf(Forms![Рабочая Форма]!СписокСтрана1 Is Null,"*",Forms![Рабочая Форма]!СписокСтрана1))...
Пробуйте изменить WHERE таким образом
T-SQL
1
2
WHERE (база.Страна = Forms![Рабочая Форма]!СписокСтрана1 Or 
      Nz(Forms![Рабочая Форма]!СписокСтрана1,'')='')
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
02.04.2012, 18:06  [ТС]
Пишет - ошибка синтаксиса (запятая) в выражении запроса....
Прошу прощения - проверил все ошибки - работает.
Спасибо вам.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.04.2012, 18:12
Цитата Сообщение от Fori Посмотреть сообщение
Пишет - ошибка синтаксиса (запятая) в выражении запроса....
Так вы, очевидно, в режиме конструктора создаете запрос, тогда замените запятую, разделяющую параметры функции Nz, на точку с запятой.
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
02.04.2012, 18:21  [ТС]
Все заработало, Супер. Спасибо Вам.
Но у меня остался вопрос: как мне сделать в этом запросе выборку не по одному полю Страна, а еще добавить выборку по остальным полям: Страна, Город, Код, ФИО, Адрес и т.д.
Меня пугает формула в запросе: в поле Страна - [Forms]![Рабочая Форма]![СписокСтрана1], и появилось в запросе поле Nz([Forms]![Рабочая Форма]![писокСтрана1];'')

А как мне добавить выборку еще по 2-3-4 параметрам (полям)? Или мне в каждом поле создавать новую формулу:
к примеру выборка по Городу: [Forms]![Рабочая Форма]![СписокГород] и в новой ячейке указать Nz([Forms]![Рабочая Форма]![СписокГород];'')

Тогда у меня будет два поля Nz([Forms]![Рабочая Форма]![СписокГород];'') и Nz([Forms]![Рабочая Форма]![писокСтрана1];'')

Подскажите, как мне быть если у меня отчет состоит из 20 параметров, может есть какие-то операторы соединения/сложения, можете показать пример, как будет выглядеть для 2-3-4 полей? Или подскажите, как сделать соединение.

Заранее спасибо.
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
02.04.2012, 19:08
Цитата Сообщение от Fori Посмотреть сообщение
А как мне добавить выборку еще по 2-3-4 параметрам (полям)? Или мне в каждом поле создавать новую формулу:
к примеру выборка по Городу: [Forms]![Рабочая Форма]![СписокГород] и в новой ячейке указать Nz([Forms]![Рабочая Форма]![СписокГород];'')

Тогда у меня будет два поля Nz([Forms]![Рабочая Форма]![СписокГород];'') и Nz([Forms]![Рабочая Форма]![писокСтрана1];'')
Пишите запросы в режиме SQL, а не создавайте их в режиме конструктора, тогда никаких дополнтительных полей для Nz не нужно будет (хотя и в режиме конструктора можно обойтись без них).
Пишете примерно так
T-SQL
1
2
3
WHERE (база.Страна = Forms![Рабочая Форма]!СписокСтрана1 Or Nz(Forms![Рабочая Форма]!СписокСтрана1,'')='') 
And (база.Город = [Forms]![Рабочая Форма]![СписокГород] Or Nz([Forms]![Рабочая Форма]![СписокГород],'')='') 
And ....
P.S. Функцию Nz ввел потому, что точно не знаю, какие значения у вас в незаполненных полях/полях со списком/.. формы, Null или пустая строка.
P.P.S. Nz(x,'')='' можно заменить выражением x & ''=''
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
04.04.2012, 13:32  [ТС]
Что-то не работает мой запрос, помогите пожалуйста:

SQL
1
2
3
SELECT база.Страна, база.Город, база.Код, база.ФИО, база.[Дата рождения], база.Пол, база.Специальность, база.[Дополнительная специальность]
FROM база
WHERE (((база.Страна)=[Forms]![Рабочая Форма]![СписокСтрана1]) AND ((база.Город)=[Forms]![Рабочая Форма]![СписокГород1])) OR (((Nz([Forms]![Рабочая Форма]![СписокСтрана1],''))='') AND ((Nz([Forms]![Рабочая Форма]![СписокГород1],''))=''));
Если в форме ничего не выбирать, то в запросе попадают все записи - это хорошо. Но, если в форме я выбираю Страну "Россия" или выбираю город "Москва", то запрос остаеться пустым - не заполняеться. Почему так? Может у меня в коде ошибка?
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
04.04.2012, 13:51
Цитата Сообщение от Fori Посмотреть сообщение
Что-то не работает мой запрос, помогите пожалуйста
Мне нужно посмотреть, что происходит в базе.
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
04.04.2012, 16:51  [ТС]
Стартовая форма (Рабочая Форма), закладка Отчет общ., функция (запрос УниверсальныйЗапросПростой) прописан на открытий при нажатии кнопки Запрос Общий.
И прошу вас просмотреть, пожалуйста вообщем работу базы, может еще будут пожелания и предложения по базе. Основное направление базы - работа медицинских и торговых представителей, кто ежемесячно присылает отчеты в Excel.

Заранее спасибо.
Вложения
Тип файла: rar БД отчет.rar (436.6 Кб, 32 просмотров)
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
04.04.2012, 18:42
Вот запрос, секция WHERE для которого была дана мной. Он работает нормально.
T-SQL
1
2
3
4
5
SELECT ВИбаза.Страна, ВИбаза.Город, ВИбаза.Код, ВИбаза.ФИО, ВИбаза.[Дата рождения], 
       ВИбаза.Пол, ВИбаза.Специальность, ВИбаза.[Дополнительная специальность]
FROM ВИбаза
WHERE (ВИбаза.Страна=Forms![Рабочая Форма]!СписокСтрана1 Or Nz(Forms![Рабочая Форма]!СписокСтрана1,'')='') 
And (ВИбаза.Город=Forms![Рабочая Форма]!СписокГород1 Or Nz(Forms![Рабочая Форма]!СписокГород1,'')='');
Вот запрос, в который преобразует предыдущий запрос оптимизатор запросов. Преобразвание происходит после того, как перейти из режима SQL в режим конструктора и что-то подправить в запросе, и/или сохранить запрос. Он тоже работает нормально.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT ВИбаза.Страна, ВИбаза.Город, ВИбаза.Код, ВИбаза.ФИО, ВИбаза.[Дата рождения], 
       ВИбаза.Пол, ВИбаза.Специальность, ВИбаза.[Дополнительная специальность]
FROM ВИбаза
WHERE (((ВИбаза.Страна)=[Forms]![Рабочая Форма]![СписокСтрана1]) AND 
      ((ВИбаза.Город)=[Forms]![Рабочая Форма]![СписокГород1])) OR 
      (((ВИбаза.Город)=[Forms]![Рабочая Форма]![СписокГород1]) AND 
      ((Nz([Forms]![Рабочая Форма]![СписокСтрана1],''))='')) OR 
      (((ВИбаза.Страна)=[Forms]![Рабочая Форма]![СписокСтрана1]) AND 
      ((Nz([Forms]![Рабочая Форма]![СписокГород1],''))='')) OR 
      (((Nz([Forms]![Рабочая Форма]![СписокСтрана1],''))='') AND 
      ((Nz([Forms]![Рабочая Форма]![СписокГород1],''))=''));
А вот откуда взялся дефектный запрос, текст которого вы приводили в сообщении от 04.04.2012 12:32, остается загадкой.
Вообще-то для вашего случая, наверное, самый оптимальный вариант - динамический запрос.

Извините, но на детальный просмотр вашей базы у меня нет времени, да и предметной областью, для которой разрабатывается база, не владею, кроме того, не работаю с макросами. .
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 77
04.04.2012, 18:46  [ТС]
Подскажите пожалуйста, что такое динамический запрос, вы можете показать пример?
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
05.04.2012, 07:35
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Fori Посмотреть сообщение
Подскажите пожалуйста, что такое динамический запрос, вы можете показать пример?
Неверно выразился. Не динамический запрос, а динамически формируемый запрос. Недавно здесь рассматривался на примере один из способов формирования строки условий отбора для секции WHERE запроса при числовых значениях параметров. В вашем случае могут встретиться, кроме числовых, еще и строковые, и датные параметры.
В процедуру обработки события "Нажатие клавиши" (Click) кнопки "Кнопка355" (имена элементов управления должны быть информативными) с надписью "Запрос общий" помещаете код
Visual Basic
1
2
3
4
5
6
7
8
9
  Dim sq$, sr$
  sr = "" 'при необходимости поместить перечень полей, по которым нужна сортировка
  sq = "SELECT Страна, Город, Код, ФИО, [Дата рождения], Пол, " & _
       "Специальность, [Дополнительная специальность] FROM ВИбаза WHERE True"
  sq = sq & " And Страна=" + FDynVal(Me!СписокСтрана1.Value) & _
            " And Город=" + FDynVal(Me!СписокГород1.Value)
  If Len(sr) > 0 Then sq = sq & " ORDER BY " & sr
  CurrentDb.QueryDefs("УниверсальныйЗапросПростой").SQL = sq
  DoCmd.OpenQuery "УниверсальныйЗапросПростой"
Функцию, оформляющую нужным образом строковые представления параметров, можно поместить, как в модуль формы, так и (если она будет использоваься также для формирования других запросов) в общий модуль.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function FDynVal(FrmContrVal)
  If Len(FrmContrVal & "") = 0 Then
    FDynVal = Null
  Else
    Select Case VarType(FrmContrVal)
      Case 2 To 6, 11, 14, 17
        FDynVal = Str(FrmContrVal)
      Case 8
        FDynVal = "'" & FrmContrVal & "'"
      Case 7
        FDynVal = Format(FrmContrVal, "\#mm\/dd\/yyyy\#")
    End Select
  End If
End Function
5
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
19.10.2013, 16:34
Ошибочный ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2013, 16:34
Помогаю со студенческими работами здесь

Нужна помощь VBA Access
Всем привет.. Мало знаком с программированием.. Есть весовой терминал Тензо-М 018.. к нему прилагается программа для связи с ПК которая...

Нужна помощь в написании кода
Есть документ в котором есть поля :Сотрудник(ссылка на справочник сотрудники),проект(ссылка на справочник...

Нужна Помощь в переводе кода C#
Доброго времени суток. Есть метод на на c#. Нужно перевести на java. проблема в разнице типов byte между java и c#. private...

Срочно нужна помощь по программе Access
Как сделать запрос на изменение в режиме конструктора??? Помогите пожалуйста, очень надо!!! запрос на изменение в отгрузках, размер...

Нужна помощь в валидации HTML-кода
Здравствуйте уважаемые форумчане. Прошедшие 2 дня занимался валидацией кода своего сайта через "validator.w3.org", причём...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru