|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Здравствуйте. 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); Получаю ошибку. Что я делаю не так? Нужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице. Принтскрины приложены ниже. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 09:34 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
[img=C:\Users\Валерий\Desktop\Запрос к серверу\2] ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 09:35 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминНужно делать запрос к серверу на основании полученного значения из запроса к локальной таблице. Сервер ничего не знает про локальные таблицы, по этому: 1. Получить значение из локальной таблицы 2. Использовать значение из п1. как параметр при вызове запроса к серверу ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 09:50 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
bubuchaСервер ничего не знает про локальные таблицы Смотря что ТС называет сервером... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 09:57 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
bubucha, И это каждый раз подставлять вручную? Можно ли автоматизировать процесс? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 10:00 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
хм-м-мbubuchaСервер ничего не знает про локальные таблицы Смотря что ТС называет сервером... ну...судя по скриншотам и информации между строк :-) Валерий Зиминbubucha, И это каждый раз подставлять вручную? Можно ли автоматизировать процесс? vba решает такие вопросы ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 10:21 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Можно на сервере создать табличку для ключей и вставлять их туда перед выполенением основного запроса, а внем обращаться уже к серверной таблице. Кстати, знаю, можно получить полный текст ошибки от ODBC, т.е. расшифровать невнятную ошибку, но забыл как это делать. Напомнит кто-нибудь? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 10:37 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
MrShinМожно на сервере создать табличку для ключей и вставлять их туда перед выполенением основного запроса, а внем обращаться уже к серверной таблице. Сервер чужой. Они на это не пойдут. Так что не вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 15:38 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий Зиминbubucha, И это каждый раз подставлять вручную? Можно ли автоматизировать процесс? vba решает такие вопросы[/quot] Кодом не угостите?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 15:53 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминСервер чужой. Они на это не пойдут. Так что не вариант. Ну так сами создайте временную таблицу, такие таблицы автоматически удаляются при закрытии сессии. Но в данном конкретном случае будет проще сформировать запрос через VBA, как было предложено выше, список ключей для выражения IN легко формируется в цикле, формируется полный текст sql и заменяется свойство sql запроса: Код: sql 1.
После чего просто используем запрос MyQuery как обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2017, 16:12 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Сделал вот так, но не работает. Можете поправить? 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 09:23 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
авторСделал вот так... а надо так ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 09:58 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминЗдравствуйте. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 12:31 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Шыфл, лишнее скопировал Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2017, 12:33 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Спасибо за подсказки, но снова затык: Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 12:56 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминСпасибо за подсказки, но снова затык: Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной per_x. Всё это подставляется в запрос к серверу к таблице personal_accounts. Из этого запроса получаю id и присваиваю его к переменной per_y. При этом через Debug.Print получаю значение этой переменной. После этого подставляю это значение в следующий запрос и... затык. При чём, если поставить полученное значение переменной per_y руками - всё работает - запрос возвращает одно значение. Как быть?Для начала перестать постить полотна или хотя бы закатывать их в спойлер. Затем прочитать и понять - http://www.sql.ru/faq/faq_topic.aspx?fid=410 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 13:02 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
При чём при просмотре таблицы watermeters в режиме конструктора поле personal_account_id - тип данных "числовой", размер поля "длинное целое". Менял тип переменной per_y на String, Variant, Long - не помогло. Так же устанавливал значение per_y = rst!Id и через CLng(rst!Id) - тоже ничего не изменилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 13:05 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
ПанургВалерий ЗиминСпасибо за подсказки, но снова затык: Суть такая - на форме выбираю дом и квартиру. По адресу получаю уникальный код дома и присваиваю его к переменной 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 Я не отрицаю свою руконеплечесть, но и тут тоже затык)) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 13:28 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """ Зачем столько кавычек, если per_x числовое? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2017, 22:42 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминЗдравствуйте. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 00:09 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий ЗиминНа счёт картинок дико извиняюсь - пробовал.Картинки можно обрезать до размера значимой части. Сообщения об ошибках можно копировать методом копипаста (Ctrl+C, Ctrl+V) прямо в сообщение на форуме, код вставлять в тэгах, там же и выделять требуемую часть спецтэгами. Всё это есть в помощи на сайте. Примерно как это сделал я. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 12:03 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
а так?Set rst = oMyDb.OpenRecordset("SELECT id FROM personal_accounts WHERE (houseguid =""" & per_x & """ Зачем столько кавычек, если per_x числовое? Как раз-таки тут без кавычек не работает, а вот в rst2 убрал лишние кавычки, написал вот так: Код: vbnet 1.
И всё заработало! Ещё одна вещь: если в таком запросе возвращается не одна строка, а две? Пробовал добавить .fields(0) - опять эррор. Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2017, 14:40 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Всем здравствуйте! Опять прошу помощи: Вопрос по той же БД. Цель: получить таблицу, в которой будут объединена информация из двух БД (локальной и MySQL). Я написал модуль, который ищет из удалённой таблицы MySQL нужные сведения, на основании данных, содержащихся в локальной БД. Говоря прямо, в моей БД хранятся показания счётчиков холодной и горячей воды. Идентификация проходит следующим образом: Адрес дома, номер квартиры, ИД прибора учёта, показания, дата снятия показания. Надо привести эту информацию к виду: ИД лицевого счёта водоканала, номер прибора учёта, показания, дата снятия показания. При помощи модуля у меня находится информация из базы данных водоканала, с параметрами, указанными из формы локальной БД. То есть я в форме выбираю адрес дома и номер квартиры, на основе этого модуль ищет лицевой счёт этой квартиры в БД водоканала, ищет ИД лицевого счёта, из другой таблицы находит номер прибора учёта и возвращает эти данные. В идеале, было бы здорово, если бы из формы данные отправлялись в БД водоканала, но это сложно, я вряд ли смогу это сделать (у Водоканала БД MySQL, внесение информация происходит при помощи процедуры). Есть вариант экспортировать информацию в отдельную таблицу. Я бы хотел сделать это в два этапа: сначала собираю информацию с данными из локальной БД. Потом, с помощью цикла, сформировать новую таблицу, в которую должны подтянуться данные из БД водоканала (те самые ИД лицевого счёта и номер прибора учёта) и моей (локальной) БД. На счёт второго варианта: я не знаю как в VBA формировать новую таблицу, осуществлять поиск записи из других таблиц и делать подстановку значений, на основании имеющихся данных. Алгоритм такой: 1) Создать таблицу 2) Посмотреть первую запись из таблицы показаний 3) На основании адреса и квартиры, найти из внешней БД MySQL ид аккаунта и номер прибора учёта 4) Присвоить эти значения просматриваемой записи 5) Перейти к следующей записи 6) Повторить п. 3-5. (до последней записи) Как это реализовать в VBA я не знаю(( Может кто-нибудь подсказать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2018, 13:26 |
|
Синтаксис запроса к серверу.
|
|||
---|---|---|---|
#18+
Валерий Зимин, А что конкретно ты не знаешь? Как програмно создать табліцу? Так а оно тебе надо програмно? Создай одін раз і заполняй. Ілі через дао Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Как вабрать запісь табліцы показаній, как перейті к следуюсчей запісь? Откраваешь рекордсет і лістаешь его через .MoveNext пока он не кончітся .EOF=true На основаніі полей рекордсета .fields("address") і .fields("квартіра") открываешь рекордсет к твоей MySQL водоканала і счітываешь поля .fields("ИД лицевого счёта водоканала") і .fields("номер прибора учёта") запісываешь іх в табліцу (опять же через рекордсет .Add і .Update). Всё в цыкле Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ну ілі не парішься, лінкуешь табліцу базы водоканала с нужнымі даннымі і делаешь прямой SQL запрос через join ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2018, 12:58 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1611699]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 395ms |
0 / 0 |