Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Синтаксис запроса к серверу. / 25 сообщений из 29, страница 1 из 2
14.12.2017, 09:34
    #39569417
Синтаксис запроса к серверу.
Здравствуйте.
MS Access 2007. Windows 7 x64. Разделённая база данных *.accdb.
Делаю запрос к серверу (таблица прилинкована, строка подключения прописана) таким образом:
SELECT *
FROM watermeters
WHERE watermeter_id = "264879";

Всё работает, всё нормально, запрос обрабатывается очень шустро (доли секунды).

Делаю ещё один запрос из локальной таблицы:
SELECT watermeter_id
FROM q_PrimerOVK;

Возвращает значение 264879.

Подставляю запрос к локальной таблице в запрос к серверу:
SELECT *
FROM watermeters
WHERE watermeter_id IN (SELECT watermeter_id FROM q_PrimerOVK);

Получаю ошибку. Что я делаю не так? Нужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице.
Принтскрины приложены ниже.
...
Рейтинг: 0 / 0
14.12.2017, 09:35
    #39569419
Синтаксис запроса к серверу.
[img=C:\Users\Валерий\Desktop\Запрос к серверу\2]
...
Рейтинг: 0 / 0
14.12.2017, 09:36
    #39569421
Синтаксис запроса к серверу.
...
Рейтинг: 0 / 0
14.12.2017, 09:36
    #39569423
Синтаксис запроса к серверу.
...
Рейтинг: 0 / 0
14.12.2017, 09:37
    #39569425
Синтаксис запроса к серверу.
...
Рейтинг: 0 / 0
14.12.2017, 09:37
    #39569426
Синтаксис запроса к серверу.
...
Рейтинг: 0 / 0
14.12.2017, 09:37
    #39569427
Синтаксис запроса к серверу.
...
Рейтинг: 0 / 0
14.12.2017, 09:50
    #39569437
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Валерий ЗиминНужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице.

Сервер ничего не знает про локальные таблицы, по этому:
1. Получить значение из локальной таблицы
2. Использовать значение из п1. как параметр при вызове запроса к серверу
...
Рейтинг: 0 / 0
14.12.2017, 09:57
    #39569440
хм-м-м
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
bubuchaСервер ничего не знает про локальные таблицы
Смотря что ТС называет сервером...
...
Рейтинг: 0 / 0
14.12.2017, 10:00
    #39569443
Синтаксис запроса к серверу.
bubucha,

И это каждый раз подставлять вручную?
Можно ли автоматизировать процесс?
...
Рейтинг: 0 / 0
14.12.2017, 10:21
    #39569467
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
хм-м-мbubuchaСервер ничего не знает про локальные таблицы
Смотря что ТС называет сервером...
ну...судя по скриншотам и информации между строк :-)
Валерий Зиминbubucha,
И это каждый раз подставлять вручную?
Можно ли автоматизировать процесс?
vba решает такие вопросы
...
Рейтинг: 0 / 0
14.12.2017, 10:37
    #39569480
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Можно на сервере создать табличку для ключей и вставлять их туда перед выполенением основного запроса, а внем обращаться уже к серверной таблице.

Кстати, знаю, можно получить полный текст ошибки от ODBC, т.е. расшифровать невнятную ошибку, но забыл как это делать. Напомнит кто-нибудь?
...
Рейтинг: 0 / 0
14.12.2017, 15:38
    #39569694
Синтаксис запроса к серверу.
MrShinМожно на сервере создать табличку для ключей и вставлять их туда перед выполенением основного запроса, а внем обращаться уже к серверной таблице.

Сервер чужой. Они на это не пойдут. Так что не вариант.
...
Рейтинг: 0 / 0
14.12.2017, 15:53
    #39569709
Синтаксис запроса к серверу.
Валерий Зиминbubucha,
И это каждый раз подставлять вручную?
Можно ли автоматизировать процесс?
vba решает такие вопросы[/quot]

Кодом не угостите?))
...
Рейтинг: 0 / 0
14.12.2017, 16:12
    #39569731
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Валерий ЗиминСервер чужой. Они на это не пойдут. Так что не вариант.
Ну так сами создайте временную таблицу, такие таблицы автоматически удаляются при закрытии сессии.

Но в данном конкретном случае будет проще сформировать запрос через VBA, как было предложено выше, список ключей для выражения IN легко формируется в цикле, формируется полный текст sql и заменяется свойство sql запроса:
Код: sql
1.
CurrentDb.QueryDef("MyQuery").sql = "SELECT...." 


После чего просто используем запрос MyQuery как обычно.
...
Рейтинг: 0 / 0
15.12.2017, 09:23
    #39570114
Синтаксис запроса к серверу.
Сделал вот так, но не работает.
Можете поправить?

Private Sub q_OVK()
Dim oMyDb As Database
Dim oMyQuery As QueryDef
Dim x As String
x = DLookup("watermeter_id", "q_PrimerOVK")
Set oMyDb = CurrentDb
Set oMyQuery = oMyDb.CreateQueryDef("q_OVK", "SELECT * FROM watermeters WHERE watermeter_id = x;")
End Sub
...
Рейтинг: 0 / 0
15.12.2017, 09:58
    #39570134
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
авторСделал вот так... а надо так
...
Рейтинг: 0 / 0
15.12.2017, 12:31
    #39570248
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Валерий ЗиминЗдравствуйте.
MS Access 2007. Windows 7 x64. Разделённая база данных *.accdb.
Делаю запрос к серверу (таблица прилинкована, строка подключения прописана) таким образом:
SELECT *
FROM watermeters
WHERE watermeter_id = "264879";

Всё работает, всё нормально, запрос обрабатывается очень шустро (доли секунды).

Делаю ещё один запрос из локальной таблицы:
SELECT watermeter_id
FROM q_PrimerOVK;

Возвращает значение 264879.

Подставляю запрос к локальной таблице в запрос к серверу:
SELECT *
FROM watermeters
WHERE watermeter_id IN (SELECT watermeter_id FROM q_PrimerOVK);

Получаю ошибку. Что я делаю не так? Нужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице.
Принтскрины приложены ниже.

Я конечно не знаю, если таблицы прилинкованные, то оно должно работать и так. Попробуй прописать запрос с полным указанием ODBC пути к прилинкованной таблице. Что-то аля

Код: sql
1.
2.
3.
SELECT *
FROM watermeters IN '' [ODBC;Driver={SQL Server Native Client 10.0};Server=myServer;Database=myDatabase;Trusted_Connection=yes;]) b
WHERE b.watermeter_id IN (SELECT watermeter_id FROM q_PrimerOVK);
...
Рейтинг: 0 / 0
15.12.2017, 12:33
    #39570254
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Шыфл, лишнее скопировал

Код: sql
1.
2.
3.
SELECT *
FROM watermeters IN '' [ODBC;Driver={SQL Server Native Client 10.0};Server=myServer;Database=myDatabase;Trusted_Connection=yes;]
WHERE watermeter_id IN (SELECT watermeter_id FROM q_PrimerOVK);
...
Рейтинг: 0 / 0
19.12.2017, 12:56
    #39571939
Синтаксис запроса к серверу.
Спасибо за подсказки, но снова затык:
Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной per_x. Всё это подставляется в запрос к серверу к таблице personal_accounts. Из этого запроса получаю id и присваиваю его к переменной per_y. При этом через Debug.Print получаю значение этой переменной. После этого подставляю это значение в следующий запрос и... затык. При чём, если поставить полученное значение переменной per_y руками - всё работает - запрос возвращает одно значение. Как быть?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub q_OVK()
Dim oMyDb As Database
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Dim per_x As String
Dim per_y As Long
Dim per_z As Long
per_x = DLookup("FIAS", "q_FIASPoAdress")
Set oMyDb = CurrentDb
Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """) AND (flat = """ & Form_fПоказанияИПУ.СКвартира & """);")
per_y = CLng(rst!Id)
Set rst2 = oMyDb.OpenRecordset("SELECT watermeter_id FROM watermeters WHERE (personal_account_id =""" & per_y & """) AND (watermeter_unit = 1);")
per_z = rst2!watermeter_id
Debug.Print per_x, per_y, per_z
End Sub
...
Рейтинг: 0 / 0
19.12.2017, 13:02
    #39571944
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Валерий ЗиминСпасибо за подсказки, но снова затык:
Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной per_x. Всё это подставляется в запрос к серверу к таблице personal_accounts. Из этого запроса получаю id и присваиваю его к переменной per_y. При этом через Debug.Print получаю значение этой переменной. После этого подставляю это значение в следующий запрос и... затык. При чём, если поставить полученное значение переменной per_y руками - всё работает - запрос возвращает одно значение. Как быть?Для начала перестать постить полотна или хотя бы закатывать их в спойлер.
Затем прочитать и понять - http://www.sql.ru/faq/faq_topic.aspx?fid=410
...
Рейтинг: 0 / 0
19.12.2017, 13:05
    #39571948
Синтаксис запроса к серверу.
При чём при просмотре таблицы watermeters в режиме конструктора поле personal_account_id - тип данных "числовой", размер поля "длинное целое".
Менял тип переменной per_y на String, Variant, Long - не помогло. Так же устанавливал значение per_y = rst!Id и через CLng(rst!Id) - тоже ничего не изменилось.
...
Рейтинг: 0 / 0
19.12.2017, 13:28
    #39571965
Синтаксис запроса к серверу.
ПанургВалерий ЗиминСпасибо за подсказки, но снова затык:
Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной per_x. Всё это подставляется в запрос к серверу к таблице personal_accounts. Из этого запроса получаю id и присваиваю его к переменной per_y. При этом через Debug.Print получаю значение этой переменной. После этого подставляю это значение в следующий запрос и... затык. При чём, если поставить полученное значение переменной per_y руками - всё работает - запрос возвращает одно значение. Как быть?Для начала перестать постить полотна или хотя бы закатывать их в спойлер.
Затем прочитать и понять - http://www.sql.ru/faq/faq_topic.aspx?fid=410

На счёт картинок дико извиняюсь - пробовал. Прочитал фак, там сказано, что
Вставить изображение в сообщение можно двумя способами:
1. Приложить к сообщению картинку в фомате JPG, PNG или GIF.
2. Использовать тег IMG для гиперссылки на файл.

Думаю от такого спойлера толку мало:
C:\Users\Валерий\Desktop\Запрос к серверу\1.jpg


Я не отрицаю свою руконеплечесть, но и тут тоже затык))
...
Рейтинг: 0 / 0
19.12.2017, 22:42
    #39572335
а так?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """

Зачем столько кавычек, если per_x числовое?
...
Рейтинг: 0 / 0
20.12.2017, 00:09
    #39572381
Адеке
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис запроса к серверу.
Валерий ЗиминЗдравствуйте.
MS Access 2007. Windows 7 x64. Разделённая база данных *.accdb.
Делаю запрос к серверу (таблица прилинкована, строка подключения прописана) таким образом:
SELECT *
FROM watermeters
WHERE watermeter_id = "264879";

Всё работает, всё нормально, запрос обрабатывается очень шустро (доли секунды).

Делаю ещё один запрос из локальной таблицы:
SELECT watermeter_id
FROM q_PrimerOVK;

Возвращает значение 264879.

Подставляю запрос к локальной таблице в запрос к серверу:
SELECT *
FROM watermeters
WHERE watermeter_id IN (SELECT watermeter_id FROM q_PrimerOVK);

Получаю ошибку. Что я делаю не так? Нужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице.
Принтскрины приложены ниже.

Попробуйте так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM watermeters
WHERE watermeter_id IN (
SELECT watermeter_id 
FROM q_PrimerOVK 
GROUP BY watermeter_id
);
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Синтаксис запроса к серверу. / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]