Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/29: Рейтинг темы: голосов - 29, средняя оценка - 4.76
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40

Как использовать функцию Select

16.02.2014, 15:05. Показов 6060. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста как правильно сделать запрос с помощью VBA функцией SQL select
Visual Basic
1
[Адрес объекта] = "SELECT Адрес FROM   [Данные по договору] WHERE [Пультовой_номер] = 240 "
где Адрес это столбец в таблице [Данные по договору] а [Пультовой_номер] критерий поиска

нужно чтобы нашелся адрес в одной таблице по критерию и вставился в другую таблицу в поле [Адрес объекта]

В выше указанном примере в поле [Адрес объекта] вставляется "SELECT Адрес FROM [Данные по договору] WHERE [Пультовой_номер] = 240" а не результат запроса

Спасибо всем кто откликнется!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2014, 15:05
Ответы с готовыми решениями:

Как использовать SELECT для загрузки перечня?
Здравствуйте. Уважаемые гуру, прошу вашей помощи в оганизации SELECTа для загрузки перечня. Информация в таблице "MyTab"...

Как использовать свою функцию в Select
В хранимой процедуре нужно сделать select в которой использовать собственную функцию для определения, например стоимости. Что то...

Как при выборе значения в select выполнить функцию php и передать в ей аргумент (значение select)
Вообще, я хочу сделать выборку в таблице. После выбора в <select>, в таблице должны остаться запись только с подходящим значением. Вот моя...

22
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 15:09
1. DLookUp("Адрес","[Данные по договору]","[Пультовой_номер] = 240")
2. CurrentProject.Connection.Execute("SELEC T First(Адрес) FROM [Данные по договору] WHERE [Пультовой_номер] = 240").Fields(0)
1
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 15:18  [ТС]
1. Зачем dlookup
2. На .Fields (0) ругается
3. Как полученное значение подставить в поле [Адрес объекта]

Спасибо за быстрый ответ!
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 15:33
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
Зачем dlookup
Один из способов получить значение.
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
На .Fields (0) ругается
Так и говорит "ругаюсь" ? Сообщение приложите. Возможно нет записи, удовлетворяющей условию, то проверить на EOF,BOF еще нужно.
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
Как полученное значение подставить в поле [Адрес объекта]
Как-как, ручками...
Visual Basic
1
[Адрес объекта]=DLookUp("Адрес","[Данные по договору]","[Пультовой_номер] = 240")
или:
Visual Basic
1
2
3
With CurrentDb.OpenRecordset("SELECT First(Адрес) as Address FROM [Данные по договору] WHERE [Пультовой_номер] = 240")
If Not .EOF AND NOT .BOF Then Me.[Адрес объекта]= !Address 
End With
1
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 16:15  [ТС]
Изначально есть вот это:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If a = "ПЦО ОВО GSM" Then
    [Адрес объекта] = DLookup("[Адрес]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
    s = DLookup("[Название_объекта]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
    d = DLookup("[Тип_объекта]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
        If IsNull(s) Then
        f = DLookup("[Фамилия]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
        g = DLookup("[Имя]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
        h = DLookup("[Отчество]", "[Данные по договору]", "[Пультовой_номер]=" & b & "And [Куда_подключен]=""" & "GSM" & """" & "or [Куда_подключен]=""" & "GPRS" & """")
        End If
    [Название объекта] = (d & " " & s & " " & f & " " & g & " " & h)
    End If
но dlookup очень долго ищет значения
вот я и хочу dlookup заменить на select
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 16:33
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
но dlookup очень долго ищет значения
Есс-но..
Откройте рекордсет, и из него извлекайте значения необходимые.

Добавлено через 10 минут
Попробуйте:

Visual Basic
1
2
3
4
5
6
7
8
Dim rs as Object
Set rs= CurrentDb.OpenRecordset("Select * From  [Данные по договору] Where [Пультовой_номер]=" & b & " And [Куда_подключен]='GSM' or [Куда_подключен]='GPRS'")
f=""
With rs
If Len(![Название_объекта] & "")=0 Then f=![Фамилия] & " " & ![Имя] & " " & ![Отчество]
Me.[Название объекта]= ![Тип_объекта] & " " & ![Название_объекта] & " " & f
End With
Set rs=Nothing
1
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 17:29  [ТС]
Все отлично!, только c критерием GPRS не ищет а вставляет первое значение найденное в таблице при любом "b"
С критерием GSM все ОК
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 17:31
Мы так и будем гадать на бубнах, или Вы все-таки приложите пример?
0
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 17:33  [ТС]
База большая я попробую ее урезать и выложить.
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 17:35
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
База большая
А она вся и не нужна. Вы хотя бы таблицу с формой приложили бы, или на худой конец таблицу.
0
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 18:28  [ТС]
Вот оставил только нужный момент
Вложения
Тип файла: rar Дежурные ПЦО.rar (144.1 Кб, 6 просмотров)
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 18:55
Еще бы в формате mdb..
0
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 19:28  [ТС]
Фух перевел, почему то на форуме не у кого нет свежего Access, всегда приходится мучатся с переводом.
Вложения
Тип файла: rar Дежурные ПЦО.rar (155.0 Кб, 15 просмотров)
0
3357 / 1776 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
16.02.2014, 19:49
Вам для начала необходимо разобраться в структуре таблиц, а потом уже формы создавать.
Поля подстановок - убрать напрочь.

Добавлено через 2 минуты
К тому же не понятно, у Вас в одной таблице "Пультовый номер" имеет числовой тип, а во второй, на которой основывается форма, - тип текстовый..
Вообщем, разберитесь с таблицами..
0
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 19:55  [ТС]
С таблицей все нормально, от полей подстановки отказаться не могу, потому как заполнители будут данные забивать разного вида и потом не найденыш что к чему относится. А так выбрали из списка и все.

Пультовой номер текстовый потому, что есть другие таблицы в которых пультовой номер вида 24К/1234 и я его не как к числу отнести не могу, и вставить текстовое поле в числовое не получится.
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
16.02.2014, 22:08
А я чего то вообще запрос не нашел, куда вы его пишете?
0
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
16.02.2014, 22:19  [ТС]
В коде VBA

Добавлено через 9 минут
Все я исправил, заработала как надо.
Спасибо, Agapov_stas за основную часть кода.

Если кому интересно, могу выложить рабочий результат.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.02.2014, 03:34
Цитата Сообщение от Hugo-MIB Посмотреть сообщение
от полей подстановки отказаться не могу, потому как заполнители будут данные забивать разного вида и потом не найденыш что к чему относится. А так выбрали из списка и все.
Не было предложения отказаться от полей со списком. Рекомендация звучала иначе - убрать поля подстановок в таблице. Из их значений создать справочники, а уже на основе этих справочников сделать поля со списком на форме. Идеологическая основа вредности полей подстановок в таблицах кратко изложена здесь: http://alx-artamonov.narod.ru/index/0-5
Именно для вашего случая, когда поля подстановок созданы не из справочников, а как список значений, к набору Артаманова можно добавить серьезные неудобства по их обслуживанию. При добавлении, удалении, изменении списка, придется лезть в конструктор и там менять. Это очень неудобно, да и опасно. А заменить/добавить/удалить значение из таблицы-справочника пара пустяков.

И еще маленькое замечание. Если в запросе надо перечислить несколько условий для одного поля, то лучше (быстрее и нагляднее) пользоваться не прямым их перечислением с OR между ними, а использовать предложение IN с набором параметров в скобках. Для вышепоказанного условия это будет так
Вместо
SQL
1
AND [Куда_подключен]='GSM' OR [Куда_подключен]='GPRS'
Написать
SQL
1
AND [Куда_подключен] IN ('GSM','GPRS')
Добавлено через 6 минут
Кстати, в пункте 3 артамоновского списка враки . Не создается дополнительный индекс при создании поля подстановки в таблице. Это было на "заре цивилизации", в Access 2 и давно уже убрано отовсюду.
1
 Аватар для Hugo-MIB
1 / 1 / 0
Регистрация: 16.12.2013
Сообщений: 40
18.02.2014, 12:50  [ТС]
mobile Спасибо за совет, приму к сведению.
В прицепе я отладил работа с OR но попробую сделать и через IN.

Добавлено через 58 минут
mobile
Я не как не могу понять как переделать подстановку на справочник.
Если Вам не трудно переделайте мой приме с подстановки на справочник. Хотя бы в общих чертах.
Спасибо.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.02.2014, 14:27
Hugo-MIB, справочники можно создать руками, записав в них то, что есть в полях подставновки в таблицах. Но я сделал для вас процедуру, которая анализирует таблицы. И если есть поле подстановки, то для него создается таблица с именем поля, в котором найдена подстановка
Кликните здесь для просмотра всего текста

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
37
38
39
40
41
42
43
44
45
46
47
Sub toHandbook()
    Dim db As DAO.Database, tdf As TableDef, fld As DAO.Field, prp As DAO.Property
    Dim k, fp
    On Error GoTo errend
    Set db = CurrentDb
    For Each tdf In db.TableDefs
        If Left(tdf.Name, 4) <> "msys" And Left(tdf.Name, 4) <> "~TMP" Then
            Debug.Print tdf.Name
            For Each fld In tdf.Fields
                Debug.Print tdf.Name, fld.Name ', prp.Name, prp.Value
                If Len(fld.Properties("RowSource").Value & "") > 0 Then
                    k = k + 1
                    fp = fld.Properties("RowSource").Value
                    Debug.Print tdf.Name, fld.Name, "|" & fp & "|"
                    MakeHandbook fld.Name, fp, k
                End If
nextfld:
            Next
        End If
    Next
noerr:
    Exit Sub
errend:
    Select Case Err.Number
        Case 3219, 3270
            Resume nextfld
        Case Else
            Debug.Print Err.Number & " " & Err.Description
            Resume nextfld
    End Select
End Sub
 
Sub MakeHandbook(fldName, fp, k)
    Dim s, p, i, db As DAO.Database, rst As DAO.Recordset, r
    Set db = CurrentDb
    r = Replace(fldName, " ", "")
    p = Split(fp, ";")
    s = "create table [" & r & "] (id counter primary key, Значение text)"
    db.Execute s
    
    Set rst = db.OpenRecordset(r)
    For i = 0 To UBound(p)
        rst.AddNew
        rst!Значение = p(i)
        rst.Update
    Next
End Sub


Таблицы справочников уже есть в БД. Но вдруг поможет для других таблиц
Вложения
Тип файла: rar Дежурные ПЦО.rar (33.3 Кб, 13 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2014, 14:27
Помогаю со студенческими работами здесь

Как использовать if в select
Люди подскажите как написать запрос что бы проверялось значение поля. Т.е. например: select ..., if A = 1 select B = 100 else select B =...

как использовать Select на загрузке формы?
вот задание: При загрузке формы в компонент DataGridView передаются события, которые относятся только к текущему дню. При нажатии кнопки...

Как использовать select из приведенного класса
Имею данный класс для соединения и выполнения определенных действий с база mysql. Разобрался во всем кроме select, подскажите как...

Как использовать if в select(более сложно)
Подскажите как использовать if в select. Например нужно: SELECT ..., IF A=1 THEN B,C,D = SELECT B,C,D FROM TABLE1 WHERE ... ELSE B,C,D =...

Как использовать 1 select для 2-х таблиц?
Всем привет! Есть 1 код select. Потом я добавил ещё 1 код select, но 2-ой не работает. Код 2-ого анологичен 1-ой. Поэтому решил...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru