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

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

21.03.2012, 11:50. Просмотров 1615. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2012, 11:50
Ответы с готовыми решениями:

Подскажите как правильно написать SQL запрос
Был запрос: UPDATE Т_ТС SET Прим = &quot;ЗАРЕГИСТРИРОВАНО&quot;, WHERE...

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

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

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

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

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
3 / 3 / 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

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

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

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


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

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

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