powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача данных через процедуру MySQL
7 сообщений из 7, страница 1 из 1
Передача данных через процедуру MySQL
    #39556021
Здравствуйте! Копаюсь на форуме и благодаря советам тут смог подключить свою базу к внешней БД MySQL через ODBC-коннектор. Подключить-то подключил, настроил кодировку и даже могу выполнять запросы, которые возвращают нужные мне сведения, но теперь возникла проблема с передачей данных. Итак.
Имеется:
Windows 7 x64
Access 2007
БД на нём же (*.accdb)
Настроенное подключение к БД MySQL через ODBC driver v. 3.51
Удалённая чужая БД, с доступными тремя таблицами (personal_accounts, watermeters, indication_statuses).

Необходимо передавать данные через БД Access в БД MySQL.
Владельцы последней прислали инструкцию как происходит передача данных, но куда и как это использовать, я не знаю (начал работать с аксессом с мая этого года).
Вот их инструкция:
-------------
Организация в режиме он-лайн записывает данные о показаниях приборов учета в БД MySQL, находящуюся на сервере, с помощью процедуры:
CREATE PROCEDURE `insert_indications`(
OUT p_error_code INT – кодошибкиобработкиплатежа/показаний
,OUTp_error_textVARCHAR(500) --текст ошибки обработки платежа/показаний
,OUTp_idVARCHAR(20)--уникальный номер записи обработки платежа/показаний
,INp_personal_account VARCHAR(8) -- номерлицевогосчета
,INp_watermeter_dateDATE -- дата снятия показаний по приборам учета
,IN p_watermeter1_id INT(15) -- ид. прибораучета1
,IN p_watermeter1_value INT(15) -- показаниеприбораучета1
,IN p_watermeter2_id INT(15)-- ид. прибора учета2
,IN p_watermeter2_value INT(15)-- показаниеприбора учета2
,IN p_watermeter3_id INT(15)-- ид. прибора учета3
,IN p_watermeter3_value INT(15)-- показаниеприбора учета3
,IN p_watermeter4_id INT(15)-- ид. прибора учета4
,IN p_watermeter4_value INT(15)-- показаниеприбора учета4
,IN p_watermeter5_id INT(15)-- ид. прибора учета5
,IN p_watermeter5_value INT(15)-- показаниеприбора учета5
,IN p_watermeter6_id INT(15)-- ид. прибора учета6
,IN p_watermeter6_value INT(15)-- показаниеприбора учета6
,IN p_watermeter7_id INT(15)-- ид. прибора учета7
,IN p_watermeter7_value INT(15)-- показаниеприбора учета7
,IN p_watermeter8_id INT(15)-- ид. прибора учета8
,IN p_watermeter8_value INT(15)-- показаниеприбора учета8
)

Примервызовапроцедуры:
callinsert_indications (@1, @2, @3, '16003577', '2016-11-03', 6844240, 77, 6846615, 58, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

select @1, @2, @3; -- выбор сообщений об ошибке и возврат номера записи.

Доступен вид со статусами платежей, где по ид. записи можно узнать статус его обработки:
1 - внесено организацией, принимающей платежи/показания;
3 - на обработке в ОВК;
2 - внесено в БД ОВК;
4 – ошибка (для показаний).

-------------
Где и что нужно прописать (VBA или в запросе к серверу, или ещё где-то) для того, чтобы данные, занесённые нашим оператором, отправлялись на сервер в БД MySQL? Заранее благодарю за помощь. Если есть похожая тема, прошу прощения, не смог найти.
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39556098
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Зимин,
Можете воспользоваться конструкцией типа, в VBA на стороне аксесса:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
..
Dim cmd As ADODB.Command
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
  Set cnn = CurrentProject.Connection
  Set cmd = New ADODB.Command
  With cmd
    .ActiveConnection = cnn
    .CommandText = "ИмяПроцедуры"
    .CommandType = adCmdStoredProc
    .NamedParameters = True
      'Cоздадим параметр nVarChar (500)
    .Parameters.Append .CreateParameter("@имяПарматра1", adVarWChar, adParamInput, 500, "Некая строка")
      'создадим параметр типа int (SQL) - Long (VBA)
    .Parameters.Append .CreateParameter("@имяПараметра2", adInteger, adParamInput, , CLng(111))
      'и т.д.
    Set rs = .Execute(, , adExecuteNoRecords)
  End With
  Set cmd = Nothing
  rs.Close: Set rs = Nothing
  cnn.Close: Set cnn = Nothing
..



У вас много переменных, поэтому параметров придется добавить несколько больше с вашей стороны.
Здесь в факе на сайте в общем то вопрос разбирался этот, но в разрезе MS SQL. Разница в разрезе MS SQL и MySQL в данном ключе в общем то незначительна, так как вы используете ODBC.
Вот исчерпывающая информация по вашему вопросу по передаче параметров: Тынц
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39556180
Сергей Лалов,

Благодарю за оперативный ответ! Если честно, конструкция для моих знаний сложная, так что буду пытаться её реализовать, плюс смотреть в разделе MS SQL.

Если есть более простой вариант, буду признателен.
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39556223
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий Зимин,

Можно упростить конечно. Только перед этим надо уточнить, у вас таблицы/представления линкованы через ODBC, в трее аксесса слева они выглядят как обычные линкованные таблицы с сервера (значки земного шара + название таблицы)?
Если так, то вам не надо создавать сохраненную процедуру на стороне сервера, а просто в аксессе создать обычный запрос , к примеру на добавление записей в таблицу. Снять значение переменных, вводимых пользователем на стороне клиента и вставить их в запрос.
Три вопроса к вам, которые значительно упростят поиск ответа с нашей стороны:
1) Таблицы с сервера mysql у вас линкованы в аксессе?
2) Что выполняет ваша сохраненная процедура? Добавляет запись в таблицу, обновляет данные в таблице?
3) Откуда оператор базы данных вносит информацию на сервер в базу сейчас?
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39556271
Сергей Лалов,

1) Таблицы с сервера mysql у вас линкованы в аксессе?
Да, таблицы прилинкованы в аксесссе (в трее земной шар с названием)

2) Что выполняет ваша сохраненная процедура? Добавляет запись в таблицу, обновляет данные в таблице?
Работает на добавление. При этом, при передаче данных от нас серверу, сервер их анализирует, и если какие-нибудь условия на значение не выполняются (текущее значение меньше предыдущего, например, или аккаунт указан неверно), формируется отчёт об ошибке.

3) Откуда оператор базы данных вносит информацию на сервер в базу сейчас?
В настоящее время оператор на клиенте работает с формой. В форме есть определённые поля, куда он вручную заносит данные, после чего, нажимает на кнопку и данные рекордсетом сохраняются в локальной БД Access (база разделена)

Надеюсь правильно ответил на вопросы.
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39557283
Есть изменения: я сделал запрос к серверу через call insert_indications. Мои данные проходят и обрабатываются на сервере. Теперь проблема в двух вещах:
1)Данный запрос я полностью писал вручную. В том числе и параметры к нему. Выглядит это так
call insert_indications (@1, @2, @3, '05070076', '2017-11-22', 7173433, 153, 7184913, 153, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

Можно ли в этом месте (запрос к серверу) сделать "автоподстановку" значений из полей формы и выполняемых запросов?

Поясню: первые три параметра (@1, @2, @3) не меняются,
Потом идёт номер лицевого счёта ('05070076') - мне его нужно найти, после ввода адреса дома и квартиры (то есть тут должна быть ссылка на определённую колонку запроса, как я понимаю)
Потом дата ('2017-11-22'). У меня она в формате дд.мм.гггг. Как переделать в гггг.мм.дд?
Дальше ид нужного счётчика (прибора учёта) (7173433), который тоже нужно искать, но это по аналогии с поиском номера лицевого счёта.
Потом поле с текущим показанием. Данные должны браться из определённого поля формы Forms![fПоказанияИПУ]![ППокХВС]. Как прописать в запросе ссылку на это поле? (да, имена полей в кириллице((( )

Опять же, это всё мне нужно прописать в запросе к серверу, а на форме сделать привязку выполнения этого запроса через VBA после нажатия на кнопку? Мне надо так, чтобы было проще))

2) Можно ли эти записи делать не по одной, а набить их в таблицу, а потом оттуда отправить? Я так понимаю нужно использовать циклы. Как их использовать, я вообще пока не знаю.
...
Рейтинг: 0 / 0
Передача данных через процедуру MySQL
    #39557293
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов
Код: vbnet
1.
.Parameters.Append .CreateParameter("@имяПараметра2", adInteger, adParamInput, , CLng(111))


Странное решение. Лучше использовать квалификатор типа, а не преобразующую функцию:
Код: vbnet
1.
.Parameters.Append .CreateParameter("@имяПараметра2", adInteger, adParamInput, , 111&)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача данных через процедуру MySQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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