powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Синтаксис запроса к серверу.
29 сообщений из 29, показаны все 2 страниц
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #39569419
[img=C:\Users\Валерий\Desktop\Запрос к серверу\2]
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569421
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569423
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569425
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569426
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569427
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39569437
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЗиминНужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице.

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

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

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

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

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

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


После чего просто используем запрос MyQuery как обычно.
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #39570134
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСделал вот так... а надо так
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #39571944
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЗиминСпасибо за подсказки, но снова затык:
Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной per_x. Всё это подставляется в запрос к серверу к таблице personal_accounts. Из этого запроса получаю id и присваиваю его к переменной per_y. При этом через Debug.Print получаю значение этой переменной. После этого подставляю это значение в следующий запрос и... затык. При чём, если поставить полученное значение переменной per_y руками - всё работает - запрос возвращает одно значение. Как быть?Для начала перестать постить полотна или хотя бы закатывать их в спойлер.
Затем прочитать и понять - http://www.sql.ru/faq/faq_topic.aspx?fid=410
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39571948
При чём при просмотре таблицы watermeters в режиме конструктора поле personal_account_id - тип данных "числовой", размер поля "длинное целое".
Менял тип переменной per_y на String, Variant, Long - не помогло. Так же устанавливал значение per_y = rst!Id и через CLng(rst!Id) - тоже ничего не изменилось.
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #39572335
а так?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """

Зачем столько кавычек, если per_x числовое?
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #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
Синтаксис запроса к серверу.
    #39572620
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЗиминНа счёт картинок дико извиняюсь - пробовал.Картинки можно обрезать до размера значимой части. Сообщения об ошибках можно копировать методом копипаста (Ctrl+C, Ctrl+V) прямо в сообщение на форуме, код вставлять в тэгах, там же и выделять требуемую часть спецтэгами. Всё это есть в помощи на сайте. Примерно как это сделал я.
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39572760
а так?Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """

Зачем столько кавычек, если per_x числовое?

Как раз-таки тут без кавычек не работает, а вот в rst2 убрал лишние кавычки, написал вот так:

Код: vbnet
1.
Set rst2 = oMyDb.OpenRecordset("Select watermeter_id from watermeters where (personal_account_id = " & per_y & ") AND (watermeter_unit = 1);")



И всё заработало!

Ещё одна вещь: если в таком запросе возвращается не одна строка, а две?
Пробовал добавить .fields(0) - опять эррор.

Код: vbnet
1.
Set rst2 = oMyDb.OpenRecordset("Select watermeter_id from watermeters where (personal_account_id = " & per_y & ") AND (watermeter_unit = 1);").fields(0)
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39600589
Всем здравствуйте! Опять прошу помощи:
Вопрос по той же БД. Цель: получить таблицу, в которой будут объединена информация из двух БД (локальной и MySQL).
Я написал модуль, который ищет из удалённой таблицы MySQL нужные сведения, на основании данных, содержащихся в локальной БД. Говоря прямо, в моей БД хранятся показания счётчиков холодной и горячей воды. Идентификация проходит следующим образом:
Адрес дома, номер квартиры, ИД прибора учёта, показания, дата снятия показания.

Надо привести эту информацию к виду:

ИД лицевого счёта водоканала, номер прибора учёта, показания, дата снятия показания.

При помощи модуля у меня находится информация из базы данных водоканала, с параметрами, указанными из формы локальной БД.
То есть я в форме выбираю адрес дома и номер квартиры, на основе этого модуль ищет лицевой счёт этой квартиры в БД водоканала, ищет ИД лицевого счёта, из другой таблицы находит номер прибора учёта и возвращает эти данные.

В идеале, было бы здорово, если бы из формы данные отправлялись в БД водоканала, но это сложно, я вряд ли смогу это сделать (у Водоканала БД MySQL, внесение информация происходит при помощи процедуры).
Есть вариант экспортировать информацию в отдельную таблицу.
Я бы хотел сделать это в два этапа: сначала собираю информацию с данными из локальной БД. Потом, с помощью цикла, сформировать новую таблицу, в которую должны подтянуться данные из БД водоканала (те самые ИД лицевого счёта и номер прибора учёта) и моей (локальной) БД.
На счёт второго варианта: я не знаю как в VBA формировать новую таблицу, осуществлять поиск записи из других таблиц и делать подстановку значений, на основании имеющихся данных.
Алгоритм такой:
1) Создать таблицу
2) Посмотреть первую запись из таблицы показаний
3) На основании адреса и квартиры, найти из внешней БД MySQL ид аккаунта и номер прибора учёта
4) Присвоить эти значения просматриваемой записи
5) Перейти к следующей записи
6) Повторить п. 3-5. (до последней записи)

Как это реализовать в VBA я не знаю(( Может кто-нибудь подсказать?
...
Рейтинг: 0 / 0
Синтаксис запроса к серверу.
    #39601087
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Зимин,

А что конкретно ты не знаешь? Как програмно создать табліцу? Так а оно тебе надо програмно? Создай одін раз і заполняй. Ілі через дао
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
 
Dim dbsNorthwind As Database 
Dim tdfNew As TableDef 
Set tdfNew = dbsNorthwind.CreateTableDef("NewTableDef") 
      tdfNew.Fields.Append tdfNew.CreateField("Date", dbDate)
      tdfNew.Fields.Append tdfNew.CreateField("FirstName", dbText) 
      tdfNew.Fields.Append tdfNew.CreateField("LastName", dbText)  
dbsNorthwind.TableDefs.Append tdfNew 



Как вабрать запісь табліцы показаній, как перейті к следуюсчей запісь? Откраваешь рекордсет і лістаешь его через .MoveNext пока он не кончітся .EOF=true

На основаніі полей рекордсета .fields("address") і .fields("квартіра") открываешь рекордсет к твоей MySQL водоканала і счітываешь поля .fields("ИД лицевого счёта водоканала") і .fields("номер прибора учёта") запісываешь іх в табліцу (опять же через рекордсет .Add і .Update).

Всё в цыкле
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
do until not r.EOF

_$$$$$___$$__$$_$$$$$___$$$___$$$__$$$$__$$$$$$_$$__$$
$$__$$___$$__$$_$$______$$$$_$$$$_$$__$$_$$__$$_$$__$$
_$$$$$___$$$$$$_$$$$____$$_$$$_$$_$$__$$_$$______$$$$$
__$$$$___$$__$$_$$______$$__$__$$_$$__$$_$$________$$
$$__$$___$$__$$_$$$$$___$$_____$$__$$$$__$$______$$

r.MoveNext
loop



Ну ілі не парішься, лінкуешь табліцу базы водоканала с нужнымі даннымі і делаешь прямой SQL запрос через join
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Синтаксис запроса к серверу.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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