Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
-arkan-
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 8
#1

как правильно писвоить строковой переменной s запрос SQL? - MS Access

21.03.2012, 11:50. Просмотров 1608. Ответов 11
Метки нет (Все метки)

как правильно писвоить строковой переменной s запрос SQL?

Private Sub Report_Open(Cancel As Integer)

Dim s As String

s = SELECT таблОУ.КодРайона, таблРайоны.Район, таблОУ.НазваниеОУ, таблОУ.НомерОУ, фунАдрес(таблОУ!ПочтовыйИндекс,[УлицаПолнНазв],таблОУ!Дом,[Квартира]) AS Адрес, таблОУ_Должн.Должность, таблЛИЧН.Фамилия, таблЛИЧН.Имя, таблЛИЧН.Отчество, [таблОУ_ОУ--Должн].ТелРаб, [таблОУ_ОУ--Должн].ТелРаб2, таблЛИЧН.ТелДом, [таблОУ_ОУ--Должн].КодДолжн, таблОУ_Типы.ТипОУ_2, таблОУ.КодТипаОУ, таблОУ.КодОУ, таблОУ_Типы.ТипОУ_3, таблОУ.Эл_почта, таблОУ.КодВладельца
FROM ((таблУлицы INNER JOIN (таблРайоны INNER JOIN (таблОУ_Типы INNER JOIN таблОУ ON таблОУ_Типы.КодТипаОУ = таблОУ.КодТипаОУ) ON таблРайоны.КодРайона = таблОУ.КодРайона) ON таблУлицы.КодУлицы = таблОУ.КодУлицы) LEFT JOIN таблОУ_АдресДоп ON таблОУ.КодОУ = таблОУ_АдресДоп.КодОУ) INNER JOIN (таблЛИЧН INNER JOIN (таблОУ_Должн INNER JOIN [таблОУ_ОУ--Должн] ON таблОУ_Должн.КодДолжн = [таблОУ_ОУ--Должн].КодДолжн) ON таблЛИЧН.КодЛичн = [таблОУ_ОУ--Должн].КодЛичн) ON таблОУ.КодОУ = [таблОУ_ОУ--Должн].КодОУ
WHERE (((таблОУ.КодРайона)=1) AND (([таблОУ_ОУ--Должн].КодДолжн)<=90 And ([таблОУ_ОУ--Должн].КодДолжн)<>30) AND ((таблОУ.КодТипаОУ) In (1,2,3,4,40,50,70,90)) AND ((таблОУ.КодВладельца)<=30))
ORDER BY таблОУ_Типы.ТипОУ_2;



Debug.Print s

Me.RecordSource = s


End Sub
http://www.cyberforum.ru/ms-access/thread1933680.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2012, 11:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос как правильно писвоить строковой переменной s запрос SQL? (MS Access):

Как программно скопировать в буфер обмена значение строковой переменной в Access2003?
Как программно скопировать в буфер обмена значение строковой переменной в...

Синтаксис запроса со строковой переменной
Здравствуйте. Подскажите, пожалуйста, правильный синтаксис запроса. Есть: s...

Возможно ли в VB открыть форму, имя которой храниться в строковой переменной?
Имеется таблитца с типами документов. Соответствующий документ обрабатывается...

Как передать значение переменной в запрос?
Мне надо, чтобы в таблицу добавлялись записи, изменённые програмным путем....

как правильно выполнить запрос?
$result = mysql_query(&quot;SELECT * FROM messages WHERE `num`=&quot;.$stat.&quot; ORDER BY id...

11
And_110
5 / 5 / 0
Регистрация: 07.06.2010
Сообщений: 322
21.03.2012, 13:12 #2
Попробуй так:

Изготовить сохраненный запрос. Убрать из него условия и сохранить как Query1 (для примера)

в коде:

s = Currentdb.querydefs("Query1").SQL
Debug.Print s

strOrderBy = Mid(s, InStr(UCase(s), "ORDER BY"))
s = Mid(s, 1, Len(s) - Len(strOrderBy))

s = s & " WHERE [таблОУ].[КодРайона] = " & 1
s = s & " AND [таблОУ_ОУ--Должн].[КодДолжн] <= " & 9
...
s = s & " AND [таблОУ].[КодТипаОУ] In (" & "1,2,3,4,40,50,70,90" & ")"

s = s & strOrderBy
Debug.Print s

Вместо строк 1, 9... - обращения к форме

Обработка ошибок:
1. Проверить, есть ли в запросе условия. Если есть - удалить
2. Проверить, есть ли в запросе Order By. Если нет - удалить ";" (в конце)

Развитие:
1. Функция удаления условий из строки SQL общего вида
2. Функция добавления условий к строке SQL общего вида




0
neo-programer
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 290
21.03.2012, 13:14 #3
Попробуй так:

Private Sub Report_Open(Cancel As Integer)

Dim s As String
s = "SELECT таблОУ.КодРайона, таблРайоны.Район, таблОУ.НазваниеОУ, таблОУ.НомерОУ, фунАдрес(таблОУ!ПочтовыйИндекс,[УлицаПолнНазв],таблОУ!Дом,[Квартира]) AS Адрес, таблОУ_Должн.Должность, таблЛИЧН.Фамилия, таблЛИЧН.Имя, таблЛИЧН.Отчество, [таблОУ_ОУ--Должн].ТелРаб, [таблОУ_ОУ--Должн].ТелРаб2, таблЛИЧН.ТелДом, [таблОУ_ОУ--Должн].КодДолжн, таблОУ_Типы.ТипОУ_2, таблОУ.КодТипаОУ, таблОУ.КодОУ, таблОУ_Типы.ТипОУ_3, таблОУ.Эл_почта, таблОУ.КодВладельца
FROM ((таблУлицы INNER JOIN (таблРайоны INNER JOIN (таблОУ_Типы INNER JOIN таблОУ ON таблОУ_Типы.КодТипаОУ = таблОУ.КодТипаОУ) ON таблРайоны.КодРайона = таблОУ.КодРайона) ON таблУлицы.КодУлицы = таблОУ.КодУлицы) LEFT JOIN таблОУ_АдресДоп ON таблОУ.КодОУ = таблОУ_АдресДоп.КодОУ) INNER JOIN (таблЛИЧН INNER JOIN (таблОУ_Должн INNER JOIN [таблОУ_ОУ--Должн] ON таблОУ_Должн.КодДолжн = [таблОУ_ОУ--Должн].КодДолжн) ON таблЛИЧН.КодЛичн = [таблОУ_ОУ--Должн].КодЛичн) ON таблОУ.КодОУ = [таблОУ_ОУ--Должн].КодОУ
WHERE (((таблОУ.КодРайона)=1) AND (([таблОУ_ОУ--Должн].КодДолжн)<=90 And ([таблОУ_ОУ--Должн].КодДолжн)<>30) AND ((таблОУ.КодТипаОУ) In (1,2,3,4,40,50,70,90)) AND ((таблОУ.КодВладельца)<=30))
ORDER BY таблОУ_Типы.ТипОУ_2" & ";"

Me.RecordSource = s

End Sub
0
And_110
5 / 5 / 0
Регистрация: 07.06.2010
Сообщений: 322
21.03.2012, 13:45 #4
Масса вариантов:

s = "SELECT таблОУ.КодРайона, таблРайоны.Район, таблОУ.НазваниеОУ, таблОУ.НомерОУ, фунАдрес(таблОУ!ПочтовыйИндекс,[УлицаПолнНазв],таблОУ!Дом,[Квартира]) AS Адрес, таблОУ_Должн.Должность, таблЛИЧН.Фамилия, таблЛИЧН.Имя, таблЛИЧН.Отчество, [таблОУ_ОУ--Должн].ТелРаб, [таблОУ_ОУ--Должн].ТелРаб2, таблЛИЧН.ТелДом, [таблОУ_ОУ--Должн].КодДолжн, таблОУ_Типы.ТипОУ_2, таблОУ.КодТипаОУ, таблОУ.КодОУ, таблОУ_Типы.ТипОУ_3, таблОУ.Эл_почта, таблОУ.КодВладельца"

s = s & " FROM ((таблУлицы INNER JOIN (таблРайоны INNER JOIN (таблОУ_Типы INNER JOIN таблОУ ON таблОУ_Типы.КодТипаОУ = таблОУ.КодТипаОУ) ON таблРайоны.КодРайона = таблОУ.КодРайона) ON таблУлицы.КодУлицы = таблОУ.КодУлицы) LEFT JOIN таблОУ_АдресДоп ON таблОУ.КодОУ = таблОУ_АдресДоп.КодОУ) INNER JOIN (таблЛИЧН INNER JOIN (таблОУ_Должн INNER JOIN [таблОУ_ОУ--Должн] ON таблОУ_Должн.КодДолжн = [таблОУ_ОУ--Должн].КодДолжн) ON таблЛИЧН.КодЛичн = [таблОУ_ОУ--Должн].КодЛичн) ON таблОУ.КодОУ = [таблОУ_ОУ--Должн].КодОУ"

s = s & " WHERE [таблОУ].[КодРайона] = " & 1
s = s & " AND [таблОУ_ОУ--Должн].[КодДолжн] <= " & 9
...
s = s & " AND [таблОУ].[КодТипаОУ] In (" & "1,2,3,4,40,50,70,90" & ")"

s = s & " ORDER BY [таблОУ_Типы].[ТипОУ_2]"

0
-arkan-
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 8
21.03.2012, 13:52  [ТС] #5

выдает пустой запрос
Как исправить ошибку ???

значение [таблОУ].[КодРайона] должен быть целым числом


Private Sub Report_Open(Cancel As Integer)

Dim s As String
Dim a As String
Dim b As Integer

Select Case [Forms]![ФормаПечати_По_Руководителям]![Группа45]

Case 0
a = "0"
Case 1
a = "1,2,3,4,40,50,70,90"
Case 2
a = "80"
Case 3
a = "100,110,120"
Case 4
a = "1"
Case 5
a = "2"
Case 6
a = "3"
Case 7
a = "4"
Case 8
a = "50"
Case 9
a = "90"

End Select

Select Case [Forms]![ФормаПечати_По_Руководителям]![Группа70]
Case 1
b = 0
Case 2
b = 50
Case 3
b = 10
End Select


код запроса
.........
"WHERE [таблОУ].[КодРайона]= " & a & _
"AND [таблОУ_ОУ--Должн].[КодДолжн]<=90 " & _
"And [таблОУ_ОУ--Должн].[КодДолжн]<>30 " & _
"AND [таблОУ].[КодТипаОУ] In (1,2,3,4,40,50,70,90) " & _
"AND [таблОУ].[КодВладльца]<=30 " & _
"ORDER BY таблОУ_Типы.ТипОУ_2;"
0
And_110
5 / 5 / 0
Регистрация: 07.06.2010
Сообщений: 322
21.03.2012, 14:05 #6
вот эта строка может получать только числа:
"WHERE [таблОУ].[КодРайона]= " & a

a вот эта может получать только список чисел:
"WHERE [таблОУ].[КодРайона] IN (" & a & ")"

а прежде, чем запускать - нужно смотреть, что напечатано в debug
0
BorisL
2 / 2 / 0
Регистрация: 19.03.2009
Сообщений: 743
21.03.2012, 15:01 #7
Чтобы сократить механическую часть работы отвечающим на вопрос, предлагаю автору вопроса выложить сюда контрольный пример (mdb).
0
-arkan-
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 8
21.03.2012, 15:18  [ТС] #8
Цитата Сообщение от BorisL
Чтобы сократить механическую часть работы отвечающим на вопрос, предлагаю автору вопроса выложить сюда контрольный пример (mdb).
эт... инфа закрыта ...
0
neo-programer
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 290
21.03.2012, 15:58 #9
тады и тема у нас закрыта, трахайся сам cо своим запросом
0
Ирча
0 / 0 / 0
Регистрация: 08.02.2010
Сообщений: 345
21.03.2012, 16:08 #10
Цитата Сообщение от neo-programer
тады и тема у нас закрыта, трахайся сам cо своим запросом
Все-таки жестоко
[bold]-arkan-[/bold] Нам инфа не нужна...
Сделай тестовую базу с подмененными данными, но сохраненной структурой и типом данных
0
neo-programer
0 / 0 / 0
Регистрация: 01.10.2011
Сообщений: 290
21.03.2012, 16:45 #11
Цитата Сообщение от Ирча
Цитата Сообщение от neo-programer
тады и тема у нас закрыта, трахайся сам cо своим запросом
Все-таки жестоко
[bold]-arkan-[/bold] Нам инфа не нужна...
Сделай тестовую базу с подмененными данными, но сохраненной структурой и типом данных
Я ж тебе говорил, что настоящие профи - жесткие люди.
Посмотри сколько у него полей в запросе, да и условий.
Я ж время на него свое трачу, чтоб в его бреднях разобраться, а он даже таблицу БЕЗ ДАННЫХ (ПУСТУЮ) не может предоставить..... блин секрет видете ли.
Я за десять лет таких секретов до кучи насмотрелся
0
Ирча
0 / 0 / 0
Регистрация: 08.02.2010
Сообщений: 345
22.03.2012, 07:30 #12
Цитата Сообщение от neo-programer
Я ж время на него свое трачу, чтоб в его бреднях разобраться, а он даже таблицу БЕЗ ДАННЫХ (ПУСТУЮ) не может предоставить..... блин секрет видете ли.
Я за десять лет таких секретов до кучи насмотрелся
))
Так я, поэтому и влезла с уточнением...
Может человек не в курсе, что пустой достаточно
0
22.03.2012, 07:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2012, 07:30
Привет! Вот еще темы с решениями:

Как правильно построить БД и запрос
Здравствуйте.Нужна ваше помощь в создании бд. Задание следующее: Создать...

Как организовать правильно запрос
Доброго всем. Никак не могу понять, как ЭТО сделать... Есть таблица, есть форма...

Как правильно создать запрос
Доброго времени суток! Подскажите пожалуйста, как можно создать запрос?...

Как правильно построить запрос
Добрый день) Имеется таблицы в БД содержащая строки: Дата заказа-DZ, дата...


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

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

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