Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание запроса с параметрами к MySQL через ODBC 
:(
    Опции темы
vka73
Дата 8.9.2007, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Для увеличения производительности связки Access-MySQL с меньшими переделками требуется подменить некоторые запросы с прилинкованным таблицами на запросы с прямыми вызовами к СУБД MySQL, также необходимо передавать в эти запросы параметры перед выполнением.
Следующий код не хочет работать, пишет, что параметров 0. Что я делаю не так?

Код

Sub remote_query()
    Dim qtf As QueryDef
    CurrentDb.QueryDefs.Delete ("Запрос1")
    Set qtf = CurrentDb.CreateQueryDef
    With qtf
        .Name = "Запрос1"
        .Connect = "ODBC;DSN=test"
        .SQL = "SELECT ?"
        MsgBox (.Parameters.Count)
        .Parameters(0).Direction = dbParamInputOutput
        .Parameters(0).Value = "qw"
        .ReturnsRecords = True
    End With
    CurrentDb.QueryDefs.Append qtf
    CurrentDb.QueryDefs.Refresh
    Set qtf = Nothing
End Sub


Подскажите люди добрые, очень надо.
PM MAIL   Вверх
Akina
Дата 9.9.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(vka73 @  9.9.2007,  00:51 Найти цитируемый пост)
Следующий код не хочет работать, пишет, что параметров 0. Что я делаю не так?

Какая именно строка кода вызывает указанную ошибку?

M
Akina
Не забываем использовать теги форума "Код".



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vka73
Дата 9.9.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 9.9.2007,  11:46)
Какая именно строка кода вызывает указанную ошибку?


Код

   .Parameters(0).Direction = dbParamInputOutput
   .Parameters(0).Value = "qw"


Это сообщение отредактировал(а) vka73 - 9.9.2007, 21:16
PM MAIL   Вверх
Akina
Дата 9.9.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(MS Access Help - DAO.QueryDef)

Parameters Collection
              

A Parameters collection contains all the Parameter objects of a QueryDef object.

Remarks

The Parameters collection provides information only about existing parameters. You can't append objects to or delete objects from the Parameters collection.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
vka73
Дата 9.9.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Цитата(Akina @ 9.9.2007,  22:33)
Цитата(MS Access Help - DAO.QueryDef)

Parameters Collection
              

A Parameters collection contains all the Parameter objects of a QueryDef object.

Remarks

The Parameters collection provides information only about existing parameters. You can't append objects to or delete objects from the Parameters collection.

Это я понимаю.
Весь вопрос как раз в том как сделать так, чтобы параметр появился в колекции в случае написания запроса к MySQL через ODBC. В данном примере я ставил символ '?' для того чтобы он был проинтерпритирован как параметр, не помогло.
PM MAIL   Вверх
bopoha
Дата 10.9.2007, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Попробуй создать Access харнимый запрос с параметрами. Код будет примерно такой:
Код

PARAMETERS prmInt Long;
SELECT Таблица1.qwe, Таблица1.ttt, Таблица1.int
FROM Таблица1
WHERE (((Таблица1.int)=[prmInt]));


Я не рекомендую создавать запрос каждый раз. Это плохо сопровождаемо. Можно просто менять его sql.

Быстрее будет работать метод: создать хранимые запросы к серверу, что-то вроде: "SELECT * FROM [таблица]". Данные будут только на чтение. Такой запрос без обработки движком Access передается к серверу mySQL, соответственно в этом запросе будут не доступны всякие функции Access, зато будет доступен синтаксис mySQL. Этот запрос можно использовать вместо подлинкованной таблицы ODBC.

Есть ли в mySQL поддрежка параметров в запросах?
PM MAIL WWW ICQ Skype GTalk   Вверх
vka73
Дата 10.9.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Цитата(bopoha @ 10.9.2007,  10:01)
Попробуй создать Access харнимый запрос с параметрами. Код будет примерно такой:
Код

PARAMETERS prmInt Long;
SELECT Таблица1.qwe, Таблица1.ttt, Таблица1.int
FROM Таблица1
WHERE (((Таблица1.int)=[prmInt]));


Я не рекомендую создавать запрос каждый раз. Это плохо сопровождаемо. Можно просто менять его sql.

Быстрее будет работать метод: создать хранимые запросы к серверу, что-то вроде: "SELECT * FROM [таблица]". Данные будут только на чтение. Такой запрос без обработки движком Access передается к серверу mySQL, соответственно в этом запросе будут не доступны всякие функции Access, зато будет доступен синтаксис mySQL. Этот запрос можно использовать вместо подлинкованной таблицы ODBC.

Есть ли в mySQL поддрежка параметров в запросах?

Вот я и не хочу каждый раз его создавать, а просто подставлять разные значения параметров.
Access хранимый запрос с параметрами написать не проблема, только он мне совсем не нужен, а нужен запрос к MySQL через ODBC.
То что принципиально можно использовать параметры в подобных запросах это точно:
Работа с параметрами хранимой процедуры Firebird в Access
Работа с данными внешнего формата
Во втором примере в конце есть пример кода для MySQL:
Код

Sub ODBCsub() 
     'Данная процедура показывает использование 
     'объектов типа ODBCDirect и Workspace 
     'для запуска хранимой процедуры на сервере 
     Dim wksp As Workspace 
     Dim conn_ODBC 
     Dim qd_conn 
     Dim rst As Recordset 
     'On Error GoTo myer 
     'создаем рабочее пространство типа ODBCDirect 
     Set wksp = CreateWorkspace("sergey", "", "", dbUseODBC) 
     'создаем соединение 
     Set conn_ODBC = wksp.OpenConnection("", False, False, _ 
     "ODBC;DATABASE=NHL;UID=sa;PWD=;DSN=mysql") 
     'отключаем Microsoft Jet 
     DBEngine.DefaultType = dbUseODBC 
     MsgBox TypeOutput(DBEngine.DefaultType) 
     'создаем объект типа QueryDef, 
     'вызывающий хранимую процедуру 
     Set qd_conn = conn_ODBC.CreateQueryDef("", "{CALL NHL_standing(?)}") 
     'передаем значение параметру хранимой процедуры 
     qd_conn.Parameters(0) = "Atlantic" 
     'создаем набор данных, для чего используем метод 
     'OpenRecordset объекта qd_conn типа QueryDef 
     Set rst = qd_conn.OpenRecordset 
     'выводим на экран 
     MsgBox rst(0).Value 
myer: 
     wksp.Close 
     Exit Sub 
End Sub
 
Но в этом примере создают другой workspace и временный запрос. Мне же надо чтобы этот запрос виделся из окружения Access, т.е. из форм, отчетов и других запросов.
PM MAIL   Вверх
bopoha
Дата 11.9.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Повторюсь:
Цитата(bopoha @  10.9.2007,  10:01 Найти цитируемый пост)
Есть ли в mySQL поддрежка параметров в запросах?

В последней версии возможно будет, но я не уверен.

Fireberd и MS SQL поддерживают процедуры и запросы с параметрами. 

И еще. Может посмотреть в сторону ADO? Библиотека поддерживает процедуры.
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.