LinuxForum.Fans
Тема

Работа с MySQL из access

Автор: Cruiser78 10 сообщений 5402 просмотров
#130464

Прошу прощения, что задаю вопрос по оффтопикам, но... Увы...

Надо подключиться к базе MySQL из ms access. ODBC-драйвера скачал, установил. Базу звел, в ней завел пользователя со всеми, кроме GRANT'а правами на неё. Из phpmyadmin этот юзер базу видит и может с ней работать. А вот из ms access (2002) эта база открывается только в режиме read-only. Причем, при первом запуске (не самом уданом, данные неправильно в базу импортировал) база отрывалась RW. Перезалил данные и опаньки. Я весь мозг сломал, никак не пойму где собака зарылась.

Я в свое время плотно работал с базами Paradox'а. Так там таблицы открывались в RO-режиме и их надо было руками (программно) переводить в режим редактирования. А в accesse (первый день с ним) я найти такой переключатель не могу.

#130501

Вы бы написали как подключаетесь к базе из Access. ADODB или DAO, какие там стоят параметры подключения.

#130526
a-x написал:
Вы бы написали как подключаетесь к базе из Access. ADODB или DAO, какие там стоят параметры подключения.

1. Уходим от оффтопика, так как и в родном линукосовом (на RFR14) OO-Base наблюдаю ту же проблему.
2. Ответ на вопрос: Спроcи что нибудь попроще. Я таких старшных слов не знаю. Только слышал их изредка.
3. Описание работ (что делаю):
3.1. Установлена MySQL на сервере (то есть доступ не локальный);
3.2. На клиентсую ось (оффтопик или RFR14) ставлю соответствующие драйвера ODBC и стандартно для них настравиваю "источник данных".
3.3. В клиентском приложении (access'е или oo-base) стандартно, через меню, устанавливаю связь с этим источником. Как именно оно там подключается - для меня тайна. Я вижу только, что соединение есть и таблица открывается.
3.4. Однако и там и там - таблица стоит в режиме read-only и отредактировать её нельзя. Точнее - я не понимаю как её перевести в режим редактирования.
4. Да, может быть важно - в этих таблицах поля имеют русские названия. Ну и данные ставлю в кодировке cp1251.
-----------
на 4. Переименовал поля на ангийские. Не помогло. Режим правки данных в ОО-Base - не включается.

#130636

Могу ошыбатса, но всёже.
Чтобы кодировка играла нуна таблицу создать с нужной кодировкой.
Я так понял к мускулу конект идёт по сети, поэтому в конфиге мускула на сервере нуна разкоментировать строку
[console]#skip-networking[/console].
А для редактирования таблицы и создания таблиц по сети нунжно в конфиг вписать. только я точно не помню, но кажысь так
[console]skip-grant-tables[/console]

#130646

Как там стандартно через меню чего подключается честно не знаю, делаем в VBA
Ставим драйвер MySQL ODBC, пишем функцию

text

Function Tmp()
Dim dbs As New ADODB.Connection, qd As ADODB.Command
dbs.Open "DRIVER=MySQL ODBC 5.1 Driver;" & _
         "SERVER=nagios;" & _
         "DATABASE=Syslog;" & _
         "UID=username; Password=password;"

Dim strSQL As String strSQL = "UPDATE SystemEvents SET FromHost = 'nagios1' WHERE ID = 1;" Set qd = New ADODB.Command With qd .ActiveConnection = dbs .CommandText = strSQL .Execute End With End Function

Т.о. заменили для записи с ID = 1 значение поля FromHost в таблице SystemEvents в базе Syslog на сервере nagios.
Как-то так. Что вам конкретно надо, то и реализуйте.

#130765
kisil написал:
Я так понял к мускулу конект идёт по сети, поэтому в конфиге мускула на сервере нуна разкоментировать строку
[console]#skip-networking[/console].
А для редактирования таблицы и создания таблиц по сети нунжно в конфиг вписать. только я точно не помню, но кажысь так
[console]skip-grant-tables[/console]

У меня MySQL поставлен из репов CentOS 5.5. Вот такой: mysql Ver 14.12 Distrib 5.0.91, for redhat-linux-gnu (i686) using readline 5.1. К нему очень куций /etc/my.cnf файл приложен. Указанных параметров там нет. Более того, мускул этот ведет он себя как то странно - я вписываю в конфигурационный файл новые параметры, например, default-character-set=cp1251, перегружаю мускул, потом смотрю доклад его по актуальным параметрам. А там - latin1 пишется. То есть, получается, что он свой конфиг не отрабатывает. Этого я понять не могу. Далее - указаных Вами параметров нет и перечне актуальных параметров мускула. То есть - вроде он про них ничего и не знает.

А задача у меня простая - есть некая картотека, которая сделана была давно в древней версии MS Works. Идет обновление техники, дистрибутива лицензионного у меня нет, если он и был когда то в фирме, до меня, то сгинул в неизвестности. Ставить пиратку не хочу, покупать лицензию на продукт, который нужен пару раз в году - хочу еще меньше.
В результате я с определенным трудом вытащил из картотеки данные и загнал в мускул. Далее - эти данные должны изредка юзерями актуализироваться и по ним печататься, например, почтовые конверты и разные этикетки (то есть не требуется вообще никакого кодирования). То есть идеальная для этого связка для юзера акксесс и ворд в режиме слияния документов. Конверты получаются в лучшем виде. Можно, конечно, перегать данные из мускула в таблицы акксесс, будет еще проще в работе. Но, это не спортивно. Тем более - есть проблема (удаленный доступ к мускульным данным только в RO-режиме), которую надо понять и, поняв, решить. То есть - интерес спортивный.

#131493

Покажыте тот куцый конфиг мускула. Очень интересно что же там в нём есть.
Я извиняюсь я в прошлом посте ошыбся нуна не разкоментировать, а закоментировать строку, если конечно же она там не закоментирована по умолчанию.
[console]#skip-networking[/console]

Вы всёже попробуйте вписать в конфиг

text
skip-grant-tables

и перезапустить мускул, а тогда попробуйте к нему приконектитса не из вашей проги а например с помощью mysql-gui и если удастса приконэктитса то поробуйте создать базу и таблицы.
Ну и ещё посмотрите в лог мускула, что он пишет.
нащот кодировок посмотрите в документацыю к серверу на офсайте.

#131524
kisil написал:
Покажыте тот куцый конфиг мускула. Очень интересно что же там в нём есть.

Нет проблем.
[console]$ cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
# these lines and adjust the connectstring as needed.
#ndbcluster
#ndb-connectstring="nodeid=4;host=localhost:1186"

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[ndbd]
# If you are running a MySQL Cluster storage daemon (ndbd) on this machine,
# adjust its connection to the management daemon here.
# Note: ndbd init script requires this to include nodeid!
connect-string="nodeid=2;host=localhost:1186"

[ndb_mgm]
# connection string for MySQL Cluster management tool
connect-string="host=localhost:1186"
[/console]

И есть у меня ощущение, что мускул вообще на этот файл не реагирует.
Верся мускула, что ставится из репов CentOS 5.5 - 5.0.91-log

kisil написал:
попробуйте к нему приконектитса не из вашей проги а например с помощью mysql-gui и если удастса приконэктитса то поробуйте создать базу и таблицы.
Ну и ещё посмотрите в лог мускула, что он пишет.
нащот кодировок посмотрите в документацыю к серверу на офсайте.

Через phpmyadmin коннектится нормально и работа из него полноценна. Хотя, там пишется, что соединяется не по IP, а через unix-soket.
Да и проги не мои, а более чем типовые и стандартные ms access или OOO-base. Попробуем через gui...

#131829

Ну для проверки читает он файл настройки или нет поправте вот эту строку

[console]pid-file=/root/mysqld.pid[/console]

Он не сможет в этой директории создать пид файл и должен не запуститса если он читает єтот файл. Посмотреть можно в логе

text
log-error=/var/log/mysqld.log

Может попробывать вот этот конфиг он у меня нормально работает и это не дэфолтный а немножко модифицырований

text
# Example MySQL config file for large systems.
#
# This is for a large system with memory = 512M where the system runs mainly
# MySQL.
#
# You can copy this file to
# /etc/my.cnf to set global options,
# mysql-data-dir/my.cnf to set server-specific options (in this
# installation this directory is /var/lib/mysql) or
# ~/.my.cnf to set user-specific options.
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients [client] #password = your_password port = 3306 socket = /var/run/mysql/mysql.sock

default-character-set = utf8

# Here follows entries for some specific programs

# The MySQL server [mysqld] port = 3306 socket = /var/run/mysql/mysql.sock skip-locking key_buffer = 256M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 3M read_buffer_size = 1M read_rnd_buffer_size = 6M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 4

query_cache_limit = 2M

long_query_time = 3 log-slow-queries=/var/lib/mysql/slowquery.log

character-set-server = utf8 skip-innodb

# Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # # skip-networking

# Disable Federated by default skip-federated

# Replication Master Server (default) # binary logging is required for replication # log-bin=mysql-bin

# required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1

# Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master's port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret'; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables' values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2^32 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # # binary logging - not required for slaves, but recommended #log-bin=mysql-bin

# Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using BDB tables #bdb_cache_size = 64M #bdb_max_lock = 100000

# Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 256M #innodb_additional_mem_pool_size = 20M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 64M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50

[mysqldump] quick max_allowed_packet = 16M

[mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates

[isamchk] key_buffer = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M

[myisamchk] key_buffer = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M

[mysqlhotcopy] interactive-timeout

Только поправте пути если надо, и включите innodb если надо, у меня он отключен.

#131939
kisil написал:
Ну для проверки читает он файл настройки или нет поправте вот эту строку
....
Только поправте пути если надо, и включите innodb если надо, у меня он отключен.

1. C pid - идея замечательная. Проверил. Файл подхватывается. Это радует.
2. Запустил с Вашим конфигом. Естественно пути подправил на актуальные, да память поджал немного. Я не хочу этому серверу давать много ресурсов. Запустилось. Однако...

вот лог, что приходит и отрабатывает сервер:

[console]Time Id Command Argument
110221 16:24:32 1 Connect Access denied for user 'UNKNOWN_MYSQL_US'@'localhost' (using password: NO)
110221 16:26:42 2 Connect Access denied for user 'Admin'@'vadmin-lvs.alma.ru' (using password: YES)
3 Connect Marketing@vadmin-lvs.alma.ru on Marketing
3 Query SET NAMES cp1251
3 Query SET SQL_AUTO_IS_NULL = 0
3 Query SELECT Config, nValue FROM MSysConf
3 Query SELECT `Code` ,`Category` ,`Index` ,`Region` ,`City` ,`Address` ,`Consumer` ,`FIO` ,`Name` ,`Empl` ,`Phone` FROM `study`
110221 16:27:47 4 Connect Marketing@vadmin-lvs.alma.ru on Marketing
4 Query SET NAMES cp1251
4 Query SET SQL_AUTO_IS_NULL = 0
4 Query SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' )
4 Query select database()
110221 16:27:53 4 Field List study
4 Query SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'study'
4 Field List study
4 Query SHOW KEYS FROM `study`
110221 16:27:55 4 Query SET AUTOCOMMIT=0
4 Query COMMIT
4 Query SET AUTOCOMMIT=1
4 Quit
110221 16:27:57 3 Query SELECT `Code` ,`Category` ,`Index` ,`Region` ,`City` ,`Address` ,`Consumer` ,`FIO` ,`Name` ,`Empl` ,`Phone` FROM `study`
[/console]

То есть он отдает то, что его просят. То есть с ним нет проблем. Проблема в клиенте. Я хочу, чтобы клиент (юзер) мог открыть эту таблицу без каких либо заморочек в том же accesse, и мог не только её смотреть, но и редактировать. Изменять записи, добавлять новые. Access-же (и с ним и ООО-base) мне этого делать не дает. Как перевести его из режима просмотра в режим редактирования - я не понимаю. В старом добром парадоксе для этого была специальная кнопка. А здесь - если таблица "локальная", лежит в md-файле, то редактируй её сколько хочешь. Но, стоит поместить её в SQL-базу - и сразу получаем режим Read-Only. И как он него отказаться - не пойму никак.

Войдите или зарегистрируйтесь, чтобы ответить.