|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Здравствуйте! Копаюсь на форуме и благодаря советам тут смог подключить свою базу к внешней БД 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? Заранее благодарю за помощь. Если есть похожая тема, прошу прощения, не смог найти. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 11:22 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Валерий Зимин, Можете воспользоваться конструкцией типа, в VBA на стороне аксесса: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
У вас много переменных, поэтому параметров придется добавить несколько больше с вашей стороны. Здесь в факе на сайте в общем то вопрос разбирался этот, но в разрезе MS SQL. Разница в разрезе MS SQL и MySQL в данном ключе в общем то незначительна, так как вы используете ODBC. Вот исчерпывающая информация по вашему вопросу по передаче параметров: Тынц ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 12:56 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Сергей Лалов, Благодарю за оперативный ответ! Если честно, конструкция для моих знаний сложная, так что буду пытаться её реализовать, плюс смотреть в разделе MS SQL. Если есть более простой вариант, буду признателен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 14:18 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Валерий Зимин, Можно упростить конечно. Только перед этим надо уточнить, у вас таблицы/представления линкованы через ODBC, в трее аксесса слева они выглядят как обычные линкованные таблицы с сервера (значки земного шара + название таблицы)? Если так, то вам не надо создавать сохраненную процедуру на стороне сервера, а просто в аксессе создать обычный запрос , к примеру на добавление записей в таблицу. Снять значение переменных, вводимых пользователем на стороне клиента и вставить их в запрос. Три вопроса к вам, которые значительно упростят поиск ответа с нашей стороны: 1) Таблицы с сервера mysql у вас линкованы в аксессе? 2) Что выполняет ваша сохраненная процедура? Добавляет запись в таблицу, обновляет данные в таблице? 3) Откуда оператор базы данных вносит информацию на сервер в базу сейчас? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 15:09 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Сергей Лалов, 1) Таблицы с сервера mysql у вас линкованы в аксессе? Да, таблицы прилинкованы в аксесссе (в трее земной шар с названием) 2) Что выполняет ваша сохраненная процедура? Добавляет запись в таблицу, обновляет данные в таблице? Работает на добавление. При этом, при передаче данных от нас серверу, сервер их анализирует, и если какие-нибудь условия на значение не выполняются (текущее значение меньше предыдущего, например, или аккаунт указан неверно), формируется отчёт об ошибке. 3) Откуда оператор базы данных вносит информацию на сервер в базу сейчас? В настоящее время оператор на клиенте работает с формой. В форме есть определённые поля, куда он вручную заносит данные, после чего, нажимает на кнопку и данные рекордсетом сохраняются в локальной БД Access (база разделена) Надеюсь правильно ответил на вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2017, 15:53 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Есть изменения: я сделал запрос к серверу через 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) Можно ли эти записи делать не по одной, а набить их в таблицу, а потом оттуда отправить? Я так понимаю нужно использовать циклы. Как их использовать, я вообще пока не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2017, 08:37 |
|
Передача данных через процедуру MySQL
|
|||
---|---|---|---|
#18+
Сергей Лалов Код: vbnet 1.
Странное решение. Лучше использовать квалификатор типа, а не преобразующую функцию: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2017, 08:57 |
|
|
start [/forum/topic.php?fid=45&fpage=62&tid=1611899]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 138ms |
0 / 0 |