Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Есть ли способ контролировать запрос, генерируемый к внешней базе? / 24 сообщений из 24, страница 1 из 1
14.12.2017, 04:07
    #39569340
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
Работаем с Oracle через ODBC.
С удивлением обнаружил, что запрос реально посылаемый на сервер, сильно отличается от того что видно в SQL View.
Причем отличается так плохо, что выполнение занимает до получаса вместо нескольких секунд.
Это конечно лечится если сделать запрос pass-through. Но при этом юзеры ворчат на 2 проблемы:
во-первых, надо текст запроса править вручную чтобы Oracle его понял - например, заменять везде двойные кавычки на одинарные, и исправлять схема_имятаблицы на схема.имятаблицы.
Нет ли способа как-то объяснить этой идиотской приблуде чтобы не коверкала запрос?
Пример:
SELECT field1, field2 from partitioned_table where field1='ABC'
А вот что приходит на сервер:
1.SELECT primary_key from partitioned_table where field1='ABC'
2.SELECT field1, field2 from partitioned_table WHERE
primary_key=value1
OR primary_key=value2
OR primary_key=value3
.......OR primary_key=value10

Таблица большая, 50 млн записей. Ждем по пол-часа и затем при любой попытке проскроллить все начинается сначала, еще пол-часа.

"Это...какой-то позор!" (с)Швондер
...
Рейтинг: 0 / 0
14.12.2017, 09:20
    #39569407
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90если сделать запрос pass-through. Но при этом юзеры ворчат на 2 проблемы:
во-первых, надо текст запроса править вручную чтобы Oracle его понял - например, заменять везде двойные кавычки на одинарные, и исправлять схема_имятаблицы на схема.имятаблицы.

не вариант?
Код: vbnet
1.
2.
3.
4.
dim q as querydef
set q = currentdb.queryqefs('имя сделанного запроса pass-through')
q.sql= ФункцияПричесывания(q.sql)
...
...
Рейтинг: 0 / 0
15.12.2017, 01:55
    #39570049
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
bubuchaRTX90если сделать запрос pass-through. Но при этом юзеры ворчат на 2 проблемы:
во-первых, надо текст запроса править вручную чтобы Oracle его понял - например, заменять везде двойные кавычки на одинарные, и исправлять схема_имятаблицы на схема.имятаблицы.

не вариант?
Код: vbnet
1.
2.
3.
4.
dim q as querydef
set q = currentdb.queryqefs('имя сделанного запроса pass-through')
q.sql= ФункцияПричесывания(q.sql)
...


Спасибо за очевидное предположение, но нет.
Это нужно писать им приложение для Access, да они и не согласятся.
Еще проблема что им не нравится, что при pass-through query им нужно вводить credentials каждый раз при запуске запроса.

Я интересовался, есть ли в этой приблуде способ повлиять на то, как она трансформирует запрос; как я и подозревал - нет такого способа.
И да, я знаю что Access sux, и место ему на помойке. Но это увы вне моей компетенции, а компания по своим внутренним соображениям не разрешает поставить бизнес-юзерам хоть какую-нибудь SQL утилиту :(
...
Рейтинг: 0 / 0
15.12.2017, 10:06
    #39570139
bubucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90Это нужно писать им приложение для Access, да они и не согласятся.

так а сейчас разве не через акс работают?
RTX90Еще проблема что им не нравится, что при pass-through query им нужно вводить credentials каждый раз при запуске запроса.

это не проблема акса, это проблема реализации юзер интерфейса

авторРаботаем с Oracle через ODBC.
...
Таблица большая, 50 млн записей
в аксе на линкованых таблицах? о_О

ну да...после этого
автор... я знаю что Access sux
...
Рейтинг: 0 / 0
15.12.2017, 11:08
    #39570202
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
bubuchaRTX90Это нужно писать им приложение для Access, да они и не согласятся.

так а сейчас разве не через акс работают?
RTX90Еще проблема что им не нравится, что при pass-through query им нужно вводить credentials каждый раз при запуске запроса.

это не проблема акса, это проблема реализации юзер интерфейса

авторРаботаем с Oracle через ODBC.
...
Таблица большая, 50 млн записей
в аксе на линкованых таблицах? о_О

ну да...после этого
автор... я знаю что Access sux

Рад что вы посмеялись. Гы-гы. Спасибо за помощь.
...
Рейтинг: 0 / 0
17.12.2017, 08:09
    #39570907
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90,

Акс - прекрасное средство для небольших приложений, а если использовать нормальный SQL сервер в качестве бэкэнда, то работает и для крупных нагруженных проектов, вы зря так о нем отзываетесь.

В данном случае у вас неправильный подход к организации взаимодействия пользователей с базой. Непосредственно с таблицами должны работать только разработчики, а не конечные пользователи. Тем более, если речь идет об SQL сервре, к прямым запросам пользователя подпускать нельзя, иначе они могут такого наворотить, что мало не покажется.

Работать через линкованные таблицы в аксе, конечно, можно, но так вы большую часть преимуществ SQL сервера - запросы построителя зачастую неэффективные, будут большие потери в скорости в некоторых случаях. Я обычно конструктор и прилинкованные таблицы использую только для облегчения построения основы текста pass-through запроса, пользователи этих запросов не видят вообще.

В общем, если хотите перейти на новый уровень, используя SQL сервер, необходимо менять подход к разработке и организации процессов пользователей - как при переходе от Экселя к Акцессу.
...
Рейтинг: 0 / 0
17.12.2017, 13:12
    #39570948
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
MrShinRTX90,

Акс - прекрасное средство для небольших приложений, а если использовать нормальный SQL сервер в качестве бэкэнда, то работает и для крупных нагруженных проектов, вы зря так о нем отзываетесь.

В данном случае у вас неправильный подход к организации взаимодействия пользователей с базой. Непосредственно с таблицами должны работать только разработчики, а не конечные пользователи. Тем более, если речь идет об SQL сервре, к прямым запросам пользователя подпускать нельзя, иначе они могут такого наворотить, что мало не покажется.

Работать через линкованные таблицы в аксе, конечно, можно, но так вы большую часть преимуществ SQL сервера - запросы построителя зачастую неэффективные, будут большие потери в скорости в некоторых случаях. Я обычно конструктор и прилинкованные таблицы использую только для облегчения построения основы текста pass-through запроса, пользователи этих запросов не видят вообще.

В общем, если хотите перейти на новый уровень, используя SQL сервер, необходимо менять подход к разработке и организации процессов пользователей - как при переходе от Экселя к Акцессу.
"страшно далеки они от народа".
Капитан, вы все верно естественно сказали, но такое ощущение что в большой фирме в суппорте вы никогда не работали и понятия не имеете как оно там.
"Большая фирма" это ~300 000 человек. Разумеется, разные отделы и подразделения, но IT политика на _всех_ - одна. Один на всех список разрешенных для установки приложений в зависимости от бизнес-линии. Так вот бизнес-юзеры для ad hoc queries - Ms Acces. Точка.
...
Рейтинг: 0 / 0
17.12.2017, 18:23
    #39571029
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90,
Я знаю, о чем говорю. Я руководил российским ИТ департаменом конторы, в которой сейчас 325000 человек, писал софт по заказу другой фирмы с численностью 200000 человек и других крупных контор, но численность никакого отношения не имеет к процессам и архитектуре каждого конкретного случая. Тем более в крупных отделах нельзя допускать к таблицам никого, кроме разработчиков. В крайних случаях особо продвинутых пользователей можно допускать до создания своих запросов, Акс - неплохое средство, но эффективность реально посылаемых на сервер запросов через линкованные таблицы действительно плохая, а другие средства построения запросов не дают той мощности тех же отчетов, что есть в Аксе. Пусть сторят, что нужно по смыслу, для повышения эффективности дайте пользователям средство конвертации запросов с линкованными таблицами в pass-through, это уже прямая обязанность разработчиков.
...
Рейтинг: 0 / 0
17.12.2017, 18:31
    #39571030
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90 Так вот бизнес-юзеры для ad hoc queries - Ms Acces. Точка.
Что мешает написать на Access-е нормальное клиент-серверное приложение кроме неумения?
...
Рейтинг: 0 / 0
17.12.2017, 22:23
    #39571079
Joss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
...
Рейтинг: 0 / 0
18.12.2017, 07:24
    #39571158
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90,

Поумерьте свой апломб и постарайтесь выбирать выражения, здесь технический форум, а не Просто треп или болталка в фейсбуке.

Вам ответили, что Акс не может полностью контролировать запросы к серверу, сделали совершенно справедливое предложение написать полноценное клиент-серверное приложение с реализованной бизнес логикой для бизнес пользователей, и не нужно там писать аналог Oracle Discoverer, не раз видел аналогичные решения. Если ваши бизнес процессы предполагают написание прямых запросов к таблицам не разработчиками - это явно указавает на недостаточную компетенцию менеджмента, создавшего их, так делать нельзя. Если считаете, что можно, попробуйте обосновать.

Если нужно средство анализа данных, а сертифицированных средств не хватает - пробейте сертификацию и закупку подходящего софта, например какого-нибудь BI, там все заточено под серверы, пусть крутят данные как угодно в построителях
...
Рейтинг: 0 / 0
18.12.2017, 12:19
    #39571304
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
JossМожет пригодится автору топика Разработка на Access клиентских приложений для Oracle
Этот хотя бы погуглил и кинул первую попавшуюся ссылку 2005 года. Сам-то видел что там внутри? Там внутри советы для чайников как соединиться с Oracle и основы синтаксиса SQL.

Вопрос к специалистам - есть какой-то способ при использовании pass-through запросов сделать так, чтобы не нужно было вводить credentials при каждом открытии запроса? Хранение пароля в открытом текстовом виде не предлагать.

Вообще Jet Engine это вещь в себе, пользователи например сами нашли сопособ - после того как запрос сконструирован, нужно клинуть на кнопку Totals в результате добавляется group by по каждому полю, и в результате почему-то запрос приходит на сервер уже _без_ идиотических изменений, как есть. Ну и выполняется вместо получаса за каких-то 15 минут.
...
Рейтинг: 0 / 0
18.12.2017, 12:35
    #39571313
DSN,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90,

реестр для тебя "открытый текстовый вид" ?
вдруг "нет", тогда - DSN
...
Рейтинг: 0 / 0
18.12.2017, 12:40
    #39571319
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90,
товарищ, здесь большинство каждый день на работе занимается именно разработкой таких приложений. Когда-то все этого делать не умели.
Так что замечание "что мешает кроме неумения" остается в силе.

Ваш оскорбленный тон отношу к тому же незнанию/неумению.
...
Рейтинг: 0 / 0
18.12.2017, 12:49
    #39571329
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
DSN,RTX90,

реестр для тебя "открытый текстовый вид" ?
вдруг "нет", тогда - DSN
И то и другое модифицировать не имеем права.
...
Рейтинг: 0 / 0
18.12.2017, 12:58
    #39571334
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
Ответ по делу вы уже давно получили.
...
Рейтинг: 0 / 0
18.12.2017, 13:10
    #39571343
DSN,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90DSN,RTX90,

реестр для тебя "открытый текстовый вид" ?
вдруг "нет", тогда - DSN
И то и другое модифицировать не имеем права.я про "одно" говорил - системный DSN в реестре
Что ты там "другое" увидел ?

Покажи настройки ODBC
Может у тебя там трассировка включена ?
...
Рейтинг: 0 / 0
18.12.2017, 13:20
    #39571346
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
DSN,RTX90пропущено...

И то и другое модифицировать не имеем права.я про "одно" говорил - системный DSN в реестре
Что ты там "другое" увидел ?

Покажи настройки ODBC
Может у тебя там трассировка включена ?
Нет, трассировка не включена. Вообще по сути проблема в том, что раньше юзеры как-то справлялись. Но на днях сверху проапгрейдили драйвер ODBC и всё встало колом.
Как же они нас замучали своими апгрейдами, особенно жабой. Только-только все настроишь, приноровишься - бац, ночью все проапгрейдили, ничего не работает. Начинаешь слать запросы на предоставление административных прав на своей машине, куча аппрувалов, объяснительные, наконец дают на 2 дня, начинаешь опять все приводить в порядок...до следующего апгрейда:(
...
Рейтинг: 0 / 0
18.12.2017, 13:36
    #39571361
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90Работаем с Oracle через ODBC.
С удивлением обнаружил, что запрос реально посылаемый на сервер, сильно отличается от того что видно в SQL View.
Причем отличается так плохо, что выполнение занимает до получаса вместо нескольких секунд.
Это конечно лечится если сделать запрос pass-through. Но при этом юзеры ворчат на 2 проблемы:
во-первых, надо текст запроса править вручную чтобы Oracle его понял - например, заменять везде двойные кавычки на одинарные, и исправлять схема_имятаблицы на схема.имятаблицы.
Нет ли способа как-то объяснить этой идиотской приблуде чтобы не коверкала запрос?
Пример:
SELECT field1, field2 from partitioned_table where field1='ABC'
А вот что приходит на сервер:
1.SELECT primary_key from partitioned_table where field1='ABC'
2.SELECT field1, field2 from partitioned_table WHERE
primary_key=value1
OR primary_key=value2
OR primary_key=value3
.......OR primary_key=value10

Таблица большая, 50 млн записей. Ждем по пол-часа и затем при любой попытке проскроллить все начинается сначала, еще пол-часа.

"Это...какой-то позор!" (с)Швондер
Когда открываете обычный запрос на выборку данных Access пытается открыть его в обновляемом виде. Т.е. данные в запросе можете редактировать словно открыли обычную таблицу. Я так предполагаю именно поэтому Access находит значение первичного ключа и переделывает запрос по своему.
Если и в правду у Вас 50 млн. записей, ну тогда запрос к серверу однозначно. А что касается переделки текста запроса на синтаксис Oracle, ну так создайте простую формочку с 2-мя полями "старый текст" и "новый текст". Пусть пользователи ставят старый текст и нажимают на кнопку, а форма пусть превращает SQL текст на понятный для Oracle скрипт. Один раз помучаетесь с кодом, но потом всё должно получиться.
Я лично на стороне Oracle создал множество процедур, а по нажатию кнопки выходит форма для ввода параметров (для фильтра данных), пользователь как только заполняет параметры и нажимает на ОК, программа переделывает текст запроса к серверу и открывает его. Пользователи ничего не правят. Вот и всё! Вам лучше всего переделать все запросы именно так.
...
Рейтинг: 0 / 0
18.12.2017, 13:38
    #39571364
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
studierenRTX90Работаем с Oracle через ODBC.
С удивлением обнаружил, что запрос реально посылаемый на сервер, сильно отличается от того что видно в SQL View.
Причем отличается так плохо, что выполнение занимает до получаса вместо нескольких секунд.
Это конечно лечится если сделать запрос pass-through. Но при этом юзеры ворчат на 2 проблемы:
во-первых, надо текст запроса править вручную чтобы Oracle его понял - например, заменять везде двойные кавычки на одинарные, и исправлять схема_имятаблицы на схема.имятаблицы.
Нет ли способа как-то объяснить этой идиотской приблуде чтобы не коверкала запрос?
Пример:
SELECT field1, field2 from partitioned_table where field1='ABC'
А вот что приходит на сервер:
1.SELECT primary_key from partitioned_table where field1='ABC'
2.SELECT field1, field2 from partitioned_table WHERE
primary_key=value1
OR primary_key=value2
OR primary_key=value3
.......OR primary_key=value10

Таблица большая, 50 млн записей. Ждем по пол-часа и затем при любой попытке проскроллить все начинается сначала, еще пол-часа.

"Это...какой-то позор!" (с)Швондер
Когда открываете обычный запрос на выборку данных Access пытается открыть его в обновляемом виде. Т.е. данные в запросе можете редактировать словно открыли обычную таблицу. Я так предполагаю именно поэтому Access находит значение первичного ключа и переделывает запрос по своему.
Если и в правду у Вас 50 млн. записей, ну тогда запрос к серверу однозначно. А что касается переделки текста запроса на синтаксис Oracle, ну так создайте простую формочку с 2-мя полями "старый текст" и "новый текст". Пусть пользователи ставят старый текст и нажимают на кнопку, а форма пусть превращает SQL текст на понятный для Oracle скрипт. Один раз помучаетесь с кодом, но потом всё должно получиться.
Я лично на стороне Oracle создал множество процедур, а по нажатию кнопки выходит форма для ввода параметров (для фильтра данных), пользователь как только заполняет параметры и нажимает на ОК, программа переделывает текст запроса к серверу и открывает его. Пользователи ничего не правят. Вот и всё! Вам лучше всего переделать все запросы именно так.
Остается нерешеным вопрос - как сделать чтобы не логиниться по-новой при каждом открытии запроса?
...
Рейтинг: 0 / 0
18.12.2017, 13:49
    #39571376
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90...
Остается нерешеным вопрос - как сделать чтобы не логиниться по-новой при каждом открытии запроса?

А это совсем не проблема! Откройте запрос к серверу в режиме конструктора, нажимаете Alt + Enter, после чего выходит окно "Свойство запроса". Там есть пункт "Строка подключения ODBC" (ODBCConnectStr Property), вот там по умолчанию выходит просто "ODBC", а надо писать что-то вроде этого "ODBC;DSN=Вот тут название DSN". И всё!
...
Рейтинг: 0 / 0
18.12.2017, 13:57
    #39571381
DSN,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
RTX90Остается нерешеным вопрос - как сделать чтобы не логиниться по-новой при каждом открытии запроса?
"Строка подключения ODBC" запроса к серверу можно устанавливать программно, перед запуском запроса

Код: vbnet
1.
2.
3.
4.
5.
6.
dim q as querydef
set q = currentdb.queryqefs('имя сделанного запроса pass-through')
' 1
'q.Connect = "ODBC;DSN=СистемныйDSNВКоторомУжеЕстьВсеПараметрыВключаяЛогинИПароль" 
' 2
q.Connect = "ODBC;Driver={Microsoft ODBC Driver for Oracle};.......;Uid=myUsername;Pwd=myPassword;"


1-ый вариант, конечно, лучше и надёжнее. Это то что я предлагал сразу. Тогда и программно не нужно было бы ничего делать.
Был бы прописан DSN один раз и всё.

По в.2 - нужно где-то хранить строку подключения.
Можно в лок.таблице Акцесса, в зашифрованном виде, если сильно нужно скрыть пароль.
Или в свойстве Акс-базы.
Или в юзерской ветке реестра.
...
Рейтинг: 0 / 0
18.12.2017, 14:33
    #39571415
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
Модератор: Почистил.

Товарищ RTX90. Пришли спрашивать совета, по крайней мере обойдитесь без хамства. Я не говорю даже об элементарной вежливости. Обратите внимание, что на профильном форуме на вас самих не спустили собак за "Access sux".

Если ваша цель не поискать собеседника, возможно решавшего подобную проблему, а пошуметь и потопать ногами, то форум будет избавлен от вашего присутствия
...
Рейтинг: 0 / 0
19.12.2017, 02:51
    #39571728
RTX90
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Есть ли способ контролировать запрос, генерируемый к внешней базе?
GeoМодератор: Почистил.

Товарищ RTX90. Пришли спрашивать совета, по крайней мере обойдитесь без хамства. Я не говорю даже об элементарной вежливости. Обратите внимание, что на профильном форуме на вас самих не спустили собак за "Access sux".

Если ваша цель не поискать собеседника, возможно решавшего подобную проблему, а пошуметь и потопать ногами, то форум будет избавлен от вашего присутствия
Уважаемый, ваши товарищи все под Тамбовом.
Я задавал технический вопрос, а меня начали по-хамски поучать, я ответил.
Вы, я вижу, поддерживаете местное хамство. Чтож, ваше право. Оргазмируйте от своей "власти". Можете банить, завести новый аккаунт дело двух минут. Собственно, уже завёл.
Единственный пользователь studieren начал дискуссию по существу, ему я благодарен.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Есть ли способ контролировать запрос, генерируемый к внешней базе? / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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