Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
vasya_27
4 / 4 / 0
Регистрация: 01.03.2016
Сообщений: 139
#1

Ошибка при попытке обработать SQL-запрос из recordset

23.04.2017, 05:13. Просмотров 171. Ответов 1
Метки нет (Все метки)

Здравствуйте! Задача выбрать нужные поля из таблиц и поместить их в ListBox
При попытке обработать SQL-запрос лезет такая ошибка
Кликните здесь для просмотра всего текста
Ошибка при попытке обработать SQL-запрос из recordset

Сам SQL-запрос/VBA
SQL
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Private Sub btnSearch_Click()
' Кнопка Поиск
Dim CountBuilding As Integer
' Количество зданий, попавших в запрос
IF IsNull(SearchAddress.Value) THEN
   ' Улица не имеет значения для пользователя
   SelectSearchAddress = 0
Else
   ' Номер улицы для поиска
   SelectSearchAddress = SearchAddress.Value
END IF
IF IsNull(SearchHouse.Value) THEN
   ' Номер дома не имеет значения для пользователя
   SelectSearchHouse = 0
Else
   ' Номер дома для поиска
   ' Номер дома преобразован из
   ' строки символов в число
   SelectSearchHouse = Val(SearchHouse.Value)
END IF
 
' Формирование строки запроса
' Основная часть строки
SQLText = "SELECT tblObject.Address, " & _
    "tblAddress.AddressName AS НАЗВАНИЕ, " & _
    "tblAddress.AddressSign AS ПРИЗНАК, " & _
    "tblObject.House AS ДОМ, " & _
    "tblObject.Flat AS КВАРТИРА, " & _
 "FROM tblAddress, tblObject " & _
    "WHERE  tblAddress.Address = tblObject.Address "
' Дополнительная часть строки
' содержит параметры выбора
IF SelectSearchAddress <> 0 OR SelectSearchHouse <> 0 THEN
      ' Если выбрана улица
      SQLText = SQLText & " AND tblObject.Address =" & _
                SelectSearchAddress
   End If
   If SelectSearchHouse <> 0 Then
      ' Если введен номер дома
      SQLText = SQLText & " AND tblObject.House =" & _
                SelectSearchHouse
   END IF
 
 
' Источник данных поля
ListBox.RowSource = SQLText
' Подсчет количества зданий, попавших в запрос
CountBuilding = CountQuery(SQLText)
IF CountBuilding = 0 THEN
   ' В запросе нет записей
   MsgBox "Зданий, отвечающих условиям вашего " & _
       "запроса, в базе нет. Повторите запрос, " & _
       "изменив требования.", _
       vbOKOnly + vbExclamation, "Внимание"
   ' Возврат на первую вкладку
   ' для повторения запроса
   Exit Sub
End If
' Изменение надписи внизу второй вкладки
 CountRecords.Caption = _
    "Количество зданий, попавших в запрос: " & _
     Str(CountBuilding)
' Выделение первой записи объекта "Поле со списком"
ListBox.Selected(1) = True
End Sub
Сама БД(Access 2010)
47 Маслов 4.rar
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2017, 05:13
Ответы с готовыми решениями:

Передать параметры в sql запрос (ADODB.Recordset)
как передать параметры в select те в Delphi Это бы так выглядило ...

Различие прямого SQL-запроса и через Recordset в MS Access
ВОПРОС ПО SQL фрагмент кода st = 'SELECT * FROM MainStudentTest WHERE...

Не удаётся отображать прогресс выполнения SQL запросов через Recordset
Возможно, тема уже обсуждалась, но ответа на свой вопрос через поиск не нашёл....

При попытке создать recordset вылетает ошибка RDS Handler'а
При попытке создать recordset вылетает ошибка RDS Handler'а. Кто-нибудь с этим...

при попытке организовать поиск по базе с разбиением на страницы выдается ошибка ADODB.Recordset (0x800A0BCD)
есть база данных, при попытке организовать поис с разбиением на страницы...

1
snipe
2863 / 972 / 220
Регистрация: 07.08.2013
Сообщений: 2,431
23.04.2017, 06:47 #2
синтаксическая ошибка в 28 строке кода
запятая после слова Квартира

Добавлено через 20 минут
иногда вместо функции select case удобнее использовать функцию choose
т.е. вместо того что у Вас написано
Visual Basic
1
2
3
4
5
6
7
8
Select Case Days
   Case 1
        DayText = "Первое"
   Case 2
        DayText = "Второе"
.......
    Case 31
        DayText = "Тридцать первое"
можно написать так
Visual Basic
1
DayText=Choose(Days,"Первое","Второе", .........., "Тридцать первое")
тоже самое с месяцами
но для месяцев можно применить функцию
MonthText=iif(

Добавлено через 9 минут
Visual Basic
1
MonthText=iif(Months=3 or Months=8, " " & MonthName(Months) & "а", " " & Left(MonthName(Months),Len(MonthName(Months))-1) & "я")
Добавлено через 20 минут
далее
описывать параметры ADO-рекордсета конечно увлекательное занятие
но можно эти параметры указать при открытии
Visual Basic
1
rs.open strSQL, CurrentProject.connection, 3, 3
где strSQL- строка написанная на языке SQL
CurrentProject.connection - соединение
цифры это числовые значения adOpenKeyset ( а вот второй параметр не помню)

еще
пользоваться свойством RecordCount сразу после открытия рекордсета не совсем правильно (может быть возвращено не правильное значение посему рекордсет сначала проверяют на наличие записей и гоняют взад вперед
а уж потом считывают свойство RecordCount
Visual Basic
1
if rs.eof and rs.bof Then: Else rs.movelast: rs.movefirst
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2017, 06:47

ГЛЮКИ. Set Табл.Form.Recordset = ДЛИННЫЙ sql-запрос. Возникают проблемы при фильтрации.
Есть подчиненная форма ЗаказыТабл. Для неё ставлю: Set...

Ошибка на VBA при работе с ADO.Recordset (таблица SQL Server)
Проект ADP, БД: SQL Server 7.0, таблица TABLE1, поле intgr типа int Делаю так:...

При попытке изменить таблицу в SQL появляется ошибка
Создана база данных, при попытке внести данные в таблицу и при нажатии команды...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru