/var/log/life.log
Блог программиста из солнечной Бурятии

ODBC, MSAccess и прочая нечисть

Под FreeBSD я что-то не решился этим заниматься, ну тат вроде как замена винде и делать пришлось. Задача такова: есть прога на java, которая через ODBC общается с MSAccess базой, вот это извращение нужно было заставить работать под ubuntu. Для начала были установлены unixodbc и mdbtools. Поле их установки никаких ярлыков в меню не появилось, команды аля unixodbc mdbtools не прокатили, через поиск надыбыл /usr/share/menu/unixodbc-bin а то туда уже ODBCConfig, надо сказать толку от этой гуишной оболочки не много, так и не разобрался как нормально что там сделать, всё ошибки выдавал, опытным путём и гуглом было выяснено, что все что надо находится в /etc/odbc.ini и /etc/odbcinst.ini. В odbcinst.ini находились настройки драйвера MSAccess которые мне всётаки удалось запихнуть. а в odbc.ini настройки System DNS где собственно и должно находится описалово конекта к базе, ничего сложного там не было

1
2
3
4
5
6
7
8
[myConnection]
Description = Microsoft AccessTS
Driver = MDB1
Database = /home/vampirus/db1.mdb
Servername = localhost
UserName =
Password =
Port = 5432

помойму только Driver,Database тут нужны но раз работает и так то оставил)
проверил работу

1
2
isql -v myConnection
 select * from Realtion

работает, ну думаю зашибись, так просто, вечером проверю, как там java с этим подружится, и пошёл на работу.
Вечером.
про попытке запуска прога выпадала с исключением, ещё бы ведь я почему-то решил что будет лучше если поставить Open-jdk вмето sun'овского. Ладно поставил сановкий jdk. И тут меня ждал сюрприз, видимо драйвер корявый или что, но при любом раскладе было Result Set Type is not supported. Получается от MSAccess надо было отказыватся, ничего лучше mysql я не придумал. Надо сказать ставить mysql php apache я не хотел, т.к. для этих целей я хотел поставить FreeBSD на старый комп. Ну ладно думаю пригодится mysql ещё для чего-нибудь. т.к. php ставить не хотелось, решил ну попробую через perl не сложно должно быть, но модуля(или как он там?) DBD:ODBC не оказалось, про попытке его доставить Makefile.pl выдал какие то ошибки, разбираться в которых небыло никакого желания. потом для импорта, решил поробовать mdbtools, не зря же ставил, но на сколько я смог понять импорт шёл только в csv, ну думаю тут на python попробую, благо с csv я на нём уже работал, но тут меня ждала подлянка, для работы с mysql надо было что-то доставить, а было уже лень. Последней попыткой была kexi под FreeBSD она вроде в mysql мне перекинула(или нет, непомню), но тут она отказывалась это делать и падала.
Уторо вечера мудренее.
Надо было сразу поставить php и не выпендриваться, ах да ещё пришлось качнуть драйвер odbcmysql и настроить, но это мелочи. скриптик простой ничего сложного

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$r = odbc_connect("myConnection","","");
$q = odbc_exec($r,"select * from Relation");
$conn = mysql_connect("localhost","root","password");
mysql_selectdb("db1");
while(odbc_fetch_row($q)){
    $PS=odbc_result($q,"PS");
    $Parg = odbc_result($q,"Parg");
    $X = odbc_result($q,"X");
    $R = odbc_result($q,"relation");
    $Y = odbc_result($q,"Y");
    mysql_query("INSERT INTO Relation (PS,Parg,X,relation,Y) VALUE ('$PS','$Parg','$X','$R','$Y')");
}
?>

и вот я с надежной запускаю прогу, а она мне идите лесом, таблицы RELATION нету, как так? есть она говорю(ну не привык я ещё что регистр имеет значение), ладно переименовываю таблицу в RELATION, а она мне нету таблицы Relation, ах ты су... @= во что значит делат прогу в винде группе человек. Переведя всё к единому регистру, java всё скушала и начала работать)