Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180

Пример перевода DAO в ADO

02.11.2017, 23:08. Показов 7164. Ответов 118
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
я сильно прошу прощения за подобный вопрос, но, не могли бы вы на конкретном примере показать, как написанное в DAO будет выглядеть в ADO?

вот, пример работы с базой в DAO, напишите пожалуйста, как это будет выглядеть, если тоже самое сделать при помощи ADO?
...чесслово, заколебался уже мануалы читать - много частностей, много общего, хочу понять, как это все слепить воедино:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
   Dim rs As DAO.Recordset
   Set rs = CurrentDb.OpenRecordset("AUTH", dbOpenDynaset)
   rs.MoveFirst
   Do Until rs.EOF
     If rs!login = Me.field_login Then
       If rs!passwd = Me.passwd Then
       login_name = Me.field_login
       DoCmd.OpenForm "DISTRIB"
       rs.MoveLast
       rs.MoveNext
       DoCmd.Close acForm, "Auth_start", acSaveYes
       Else
       MsgBox "Password do not match!"
       Me.passwd = ""
       rs.MoveLast
       rs.MoveNext
       End If
     Else
     rs.MoveNext
    End If
   Loop
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2017, 23:08
Ответы с готовыми решениями:

ADO и DAO
Уважаемые форумчане! Не могли бы вы дать четкое объяснение разницы между ADO и DAO? Что предпочтительнее? Нужен более простой...

ADO или DAO
Очень интересно было бы ознакомиться с мнением грамотных людей по поводу различий между ADO и DAO, а также плюсов ли минусов в ту или...

Как разобраться с ADO и DAO
Подскажите где найти доступну для понимания ламеру информацию о ADO и DAO.....

118
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
02.11.2017, 23:30
В простейшем случае меняются только первые 2 строки.
Visual Basic
1
2
   Dim rs As Object 'As ADODB.Recordset если подключена библиотека msado
   Set rs = Currentproject.connection.execute("AUTH")
Но это далеко не единственная возможность. Можно, вместо аксовского внутреннего коннекшена, создать свой, задав ему сервер, драйвер, логин, пароль и т.д и делать рекордсет на его основе. Можно создать свободный рекродсет, вообще не привязанный к какой-либо таблице, создать в нем поля и наполнить их данными. Технология ADODB (и ADOX) обладает значительно большими возможностями (что одновременно конечно осложняет синтаксис) и применима практически к любой реляционной базе данных.
3
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
03.11.2017, 11:44  [ТС]
суть в том, что моя база сейчас accdb, но мне нужно будет переводить ее на SQL server, который не желает общаться языком DAO )))
в вышеописанном предложенном вами варианте, когда я просто меняю описание обращения к базе, но не меняю инструментарий работы с данными таблицы, не вызовет ли это проблемы когда база перекочует на SQL server?

насколько я понимаю, в ADO можно сразу одним запросом выбрать нужную строку по значению ячейки и в этом же запросе выполнить проверку данных этой строки или выполнить с ними какиелибо действия, без построчного перебора при помощи "Do Until", верно?
0
Эксперт MS Access
 Аватар для Eugene-LS
13183 / 5881 / 1506
Регистрация: 05.10.2016
Сообщений: 16,507
03.11.2017, 13:13
Цитата Сообщение от blade_snl Посмотреть сообщение
суть в том, что моя база сейчас accdb, но мне нужно будет переводить ее на SQL server
Сочувствую.
Практически весь код придётся переправить и оптимизировать под ADO.
В результате будет лучше , но повозиться придётся, увы.

Добавлено через 3 минуты
Цитата Сообщение от blade_snl Посмотреть сообщение
насколько я понимаю, в ADO можно сразу одним запросом выбрать нужную строку по значению ячейки и в этом же запросе выполнить проверку данных этой строки или выполнить с ними какиелибо действия, без построчного перебора при помощи "Do Until", верно?
Не уверен что понял ваш вопрос.
Так это и в DAO вроде возможно....
ADO лучше - быстрее - КРУЧЕ!
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
03.11.2017, 13:28  [ТС]
Eugene-LS, одну базу прийдется переделывать - факт. вторую только начинаю писать, потому хочу сразу писать в АДО. Перечитал кучу текста, мануалов, форумов... В общих чертах принцип построения запросов вроде понятен, но есть загвоздка с началом реализации на практике. ПОтому и выложил кусок конкретного кода в ДАО с просьбой написать егоже в АДО... насколько я понимаю, поиск нужной строки идет через запрос SELECT по значению поля, результатом которого и будет нужная строка. МОжно ли в этом же запросе сразу выполнить проверку на значение ячейки "passwd"?
Собственно буду признателен, если ктото просто выложит тотже кусок кода, но уже в виде запросов АДО...
0
Эксперт MS Access
 Аватар для Eugene-LS
13183 / 5881 / 1506
Регистрация: 05.10.2016
Сообщений: 16,507
03.11.2017, 13:35
Цитата Сообщение от blade_snl Посмотреть сообщение
Собственно буду признателен, если ктото просто выложит тотже кусок кода, но уже в виде запросов АДО...
С примерами сложняк (я чаще с MySQL работаю).
С чем вы работаете, и как - это всё на усмотрение разраба.

Вот простенький пример по вашей задачке:
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
Public Function GetData(sExpression$, sSourse$, Optional vCriteria As Variant = Null, _
        Optional vDefault As Variant = Null, _
        Optional vOptions As Variant = Null) As Variant
'--------------------------------------------------------------------
'es 14.12.2016  : msa.polarcom.ru
'Возвращает:
'   Значение (выражения) указанное в sExpression из таблицы или запроса указанного в sSourse
'   по условиям отбора указанным в vCriteria (Опционально)
'При ошибке или отсутствии данных в источнике - Вернет значение  указанное в vDefault (Null)
'--------------------------------------------------------------------
'Аргументы:
'    sExpression   - Название поля или Выражение с его участием (для SELECT ...)
'    vCriteria     - Критерии отбора записей для WHERE ...
'    vDefault      - Значение возврвщаемое если искомое не найдено (или = Null)
'    vOptions      - Поле и Порядок сортировки (Типа: "ORDER BY ..." или "DESC" и т.п.)
'--------------------------------------------------------------------
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sSql$
'--------------------------------------------------------------------
On Error GoTo GetData_Err
    Set cnt = CurrentProject.Connection ' Локально
    cnt.CursorLocation = 2 'adUseServer (2) - adUseClient (3)
    Set rst = CreateObject("ADODB.Recordset")
    rst.CursorLocation = 2 'adUseServer (2) - adUseClient (3)
    
    sSql = "SELECT " & sExpression & " FROM " & sSourse & (" WHERE " + vCriteria) & (" " + vOptions)
    rst.Open sSql, cnt, adOpenStatic, adLockReadOnly
    
    GetData = rst.Fields(0) 'Берём заказанное значение
    If IsNull(GetData) = True Then GetData = vDefault
 
GetData_Bye:
    On Error Resume Next
    rst.Close: Set rst = Nothing
    cnt.Close: Set cnt = Nothing
    Exit Function
 
GetData_Err:
    GetData = vDefault: Err.Clear: Resume GetData_Bye
End Function
... ADODB.Connection - можно перенаправить куда угодно.
Сам этим кодом не пользуюсь - он специально упрощён "до плинтуса" для (надеюсь) лучшего понимания .
1
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.11.2017, 13:44
blade_snl, почитайте эту статью - Подключение к базе данных через ADODB (статья). Там есть ответы на некоторые Ваши вопросы
1
Эксперт MS Access
 Аватар для Eugene-LS
13183 / 5881 / 1506
Регистрация: 05.10.2016
Сообщений: 16,507
03.11.2017, 13:49
Цитата Сообщение от mobile Посмотреть сообщение
почитайте эту статью
А неплохая статья кстати!

Только замечу, что при удал. коннекшене не вредно проверять и восстанавливать соединение (по необходимости) перед каждым обращением к БД.
Достаточно одной несложной функции ...
(Если мы коннекшен держим на уровне приложения, что экономит время)
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
03.11.2017, 15:58  [ТС]
mobile, начал ознакамливаться со статьей, заодно пытаюсь все это применять на деле, но сразу выскакивает такая ошибка (фото во вложении). что я делаю не так?
аксесс 2016
Миниатюры
Пример перевода DAO в ADO  
0
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
03.11.2017, 16:02  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Только замечу, что при удал. коннекшене не вредно проверять и восстанавливать соединение (по необходимости) перед каждым обращением к БД
что именно имеется ввиду?
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
03.11.2017, 16:52
Цитата Сообщение от blade_snl Посмотреть сообщение
но сразу выскакивает такая ошибка (фото во вложении). что я делаю не так
Значит надо подключить библиотеку ADO в референсах - редактор ВБА=>Tools=>References и из списка выбрать Microsoft ActiveX Data Objects X.X Library и поставить на ней галку. Здесь Х.Х это версия. Я обычно выбираю 2.6.

Добавлено через 1 минуту
Можно конечно и позднее связывание. Но для учебы лучше иметь в референсах - видны свойства и методы.
2
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
03.11.2017, 17:35  [ТС]
mobile, ох, спасибо - помогло ))

Добавлено через 10 минут
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Только замечу, что при удал. коннекшене не вредно проверять и восстанавливать соединение (по необходимости) перед каждым обращением к БД
я так понимаю, каждое обращение к базе, когда я открываю соединение, необходимо закрывать через
Visual Basic
1
2
    conn.Close
    Set conn = Nothing
иначе лочится база и я ничего не могу сделать. так?
0
Эксперт MS Access
 Аватар для Eugene-LS
13183 / 5881 / 1506
Регистрация: 05.10.2016
Сообщений: 16,507
03.11.2017, 18:15
Цитата Сообщение от blade_snl Посмотреть сообщение
иначе лочится база и я ничего не могу сделать. так?
Не я про другое - и как раз наоборот, соединение открываем, и не закрываем до конца работы приложения, периодически проверяя что не слетело из за обрыва связи.
2
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
06.11.2017, 14:27  [ТС]
Цитата Сообщение от Eugene-LS Посмотреть сообщение
и как раз наоборот, соединение открываем, и не закрываем до конца работы приложения
ввиду того, что я только начал и у меня ошибка на ошибке, то незакрытая база тутже лочит мне работу с программой.. ))) возможно потому, что таблицы пока сидят не отдельно от форм, а в базовом файле..

и вот, по поводу ошибок.
могу ли я результат SQL-запроса сразу присваивать переменной? потому как у меня на строку запроса в нижеприведенном коде, ругается "type mismatch"
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Dim passwd, strSQL As String
 If IsNull(field_login.Value) = True Then
  MsgBox "Enter LOGIN please!"
 ElseIf IsNull(field_passwd.Value) = True Then
  MsgBox "Enter PASSWORD please!"
  Else
    Set conn = Nothing
    Set conn = New ADODB.Connection
    conn = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=D:\!!!_work\!_Prof-Service\ACCESS-DB\!_PofServ_access\ProfServ_base_1.0.accdb;Uid=Admin;Pwd=;"
    conn.Open
    Set passwd = ("SELECT 'passwd' FROM 'AUTH' WHERE 'login' = " & Me.field_login)
    MsgBox passwd
    conn.Close
    Set conn = Nothing
End If
Добавлено через 5 минут
что я неверно делаю?
0
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
06.11.2017, 14:32
Я писал вот так:

Visual Basic
1
2
3
Set conn = New ADODB.Connection
strConn = "DRIVER=SQL Server;SERVER=DCS\DCS;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=ddc"
conn.Open strConn
1
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
06.11.2017, 14:35  [ТС]
tkrainyk, коннект к базе как раз таки у меня проходит вроде. у меня ругается на сам SQL-запрос. Я уже и сам вижу, что фигню написал, я переменной присваиваю строку запроса, но я его не выполняю
0
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
06.11.2017, 14:42
А вы напишите, для проверки подключения:

Visual Basic
1
MsgBox "Соединение установлено"
1
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
06.11.2017, 14:54
В переменной passwd смешано 2 типа: обращаетесь как к объекту set passwd = ..., а справа текстовая строка. Пусть strSql хранит SQL-текст, а passwd рекордсет, тогда
Visual Basic
1
2
strSql = "SELECT passwd FROM AUTH WHERE login = '" & Me.field_login & "'"
passwd.Open sstrSql, conn
2
4 / 4 / 1
Регистрация: 02.02.2017
Сообщений: 180
06.11.2017, 15:00  [ТС]
tkrainyk,
Цитата Сообщение от tkrainyk Посмотреть сообщение
MsgBox "Соединение установлено"
именно этим я и делал проверку - тут все ок
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
06.11.2017, 15:03
Ссылка на поле:

Visual Basic
1
rs.Fields("id").Value
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2017, 15:03
Помогаю со студенческими работами здесь

Библиотеки VBA dao/ado в одной базе
подскажите пожалуйста, в программе 2 макроса, --1 работает, когда библиотека Microsoft DAO 3.6 Object library выше Macrosoft ADO Ext....

Люди, скажите свое мнение о DAO и ADO,- что лучше?
Заранее спасибо за любое мнение!

DAO - > ADO
Есть база данных ACCEESS97 - таблица TEST с полями DATEOD,LS,NAMELS и модулем DAO_test (код ниже) Помогите перевести этот код на...

Возмоможно ли с помощью DAO или ADO подключиться к удаленному серверу в интернете
Обязательно ли на серевере должен быть установлен RDS? Если возможно приведите пример строки подключения для существуещего сервера в...

Пример открытия БД на ADO и открытия таблицы
Кто-нибудь помогите с примером открытия БД на ADO и открытие таблицы. Большое спасибо.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru