<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=44239&amp;view=findpost&amp;p=289651</guid>
        <pubDate>Thu, 29 Jan 2004 13:02:31 +0000</pubDate>
        <title>ODBC &amp;amp; *NIX</title>
        <link>https://forum.sources.ru/index.php?showtopic=44239&amp;view=findpost&amp;p=289651</link>
        <description><![CDATA[the_Shadow: Собственно говоря, что я сделал... Взял БД от M&#036; Access, поискал чем его можно пооткрывать в стиле<br>
M&#036;-технологий... то, что получилось, я &quot;свел&quot; в этом постинге. <br>
<br>
ВНИМАНИЕ&#33; Не стоит пытаться подстрелить меня из рогатки с оптическим прицелом и глушителем.<br>
Я <em class='tag-i'>ПРЕКРАСНО</em> знаю, что работа с файлом от M&#036; Access средствами ODBC -- бред, т.к.<br>
файл Access&#39;а относится к ISAM-файлам (Index-Sequence Access Method), для работы с которыми есть<br>
все-таки технология DAO (Data-Base Access Objects) от того же M&#036;, но... Ну нет у меня &quot;под рукой&quot; M&#036; SQL <br>
Server&#39;а, а ставить -- а не ну ли его на фиг? Чтобы потом &quot;сносить&quot;? Вот и тестировал на том, что было.<br>
<br>
Хэх&#33; Как верно заметил Olej в одном из своих постингов, работа с ODBC из UNIX -- только для тех,<br>
&quot;кто понимает толк в истинных извращениях&quot;. Добавлю от себя что и вообщем-то ODBC, даже в M&#036; Windows<br>
никогда не были <em class='tag-i'>самым</em> удобным интерфейсом, ни в С, ни, тем более, в С++. Хотя, справедливости<br>
ради, надо заметить, что все остальное (в том числе и основанное на ODBC) -- еще хуже, т.к. ODBC <br>
(по крайней мере, если прочесть именно о самой идее ODBC), еще более-менее &quot;прозрачный&quot; интерфейс. <br>
И учесть довольно &quot;малоглюкавую&quot; реализацию, что для M&#036;, согласитесь, отнюдь не типично. Хотя, подчас <br>
работать с ODBC -- &quot;истинное удовольствие&quot;... <br>
<br>
Как пример UNIX&#39;овского подхода к делу, могу привести практически любую БД под UNIX (от Oracle до <br>
PostgreSQL и SAP DB), в которых считается правилом хорошего тона предоставлять не один, а ряд инструментов:<br>
- это и библиотеки доступа к БД, основанные на &quot;Embedded SQL&quot;. В этом случае Вы пишете некий &quot;промежуточный&quot; <br>
код из SQL и С, &quot;скармливаете&quot; его препроцессору из состава БД и на выходе получаете С-модуль, реализующий <br>
SQL-запросы к БД по Вашей &quot;спецификации&quot;. <br>
- Это и библиотеки &quot;прямого доступа&quot; к данным для БД... <br>
- Библиотеки работают как с С, так и с С++, Perl, Java... Собственно, можно делать что угодно, как угодно<br>
и при помощи каких угодно инструментальных средств.<br>
<br>
Да, собственно, много чего есть в UNIX для работы с БД. По этой причине, человеку, пришедшему из<br>
мира Windows, можно слегка ошалеть, только прочитав документацию на <em class='tag-i'>нормальную</em> БД.<br>
<br>
Ладно. Что нам-то делать? Т.к. глюки глюками, а доступ к тому, что M&#036; называет &quot;базами данных&quot; все-таки<br>
надобно поиметь. <br>
<br>
<strong class='tag-b'>Вариант #1 -- iODBC.</strong><br>
Поддерживается ряд платформ:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SunOS &nbsp; &nbsp; &nbsp; 4.1.x &nbsp; &nbsp; &nbsp; Sun Sparc</div><div class="code_line">&nbsp;&nbsp; &nbsp;HP/UX &nbsp; &nbsp; &nbsp; 9.x, 10.x &nbsp; HP9000 s700/s800</div><div class="code_line">&nbsp;&nbsp; &nbsp;HP/UX &nbsp; &nbsp; &nbsp; 9.x &nbsp; &nbsp; &nbsp; &nbsp; HP9000 s300/s400 &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IBM AIX &nbsp; &nbsp; 3.x, 4.x &nbsp; &nbsp;IBM RS6000, PowerPC</div><div class="code_line">&nbsp;&nbsp; &nbsp;Sun Solaris 2.x &nbsp; &nbsp; Sun Sparc, PCx86</div><div class="code_line">&nbsp;&nbsp; &nbsp;SGI Irix SVR4 &nbsp; 5.x, 6.x &nbsp; &nbsp;IP12 MIPS, IP22 MIPS</div><div class="code_line">&nbsp;&nbsp; &nbsp;NCR SVR4 &nbsp; &nbsp;3.x &nbsp; &nbsp; NCR 3435</div><div class="code_line">&nbsp;&nbsp; &nbsp;UnixWare SVR4.2 1.x, 2.x &nbsp; &nbsp;x86</div><div class="code_line">&nbsp;&nbsp; &nbsp;DEC Unix(OSF/1) 3.x, 4.x &nbsp; &nbsp;DEC Alpha</div><div class="code_line">&nbsp;&nbsp; &nbsp;FreeBSD &nbsp; &nbsp; 2.x &nbsp; &nbsp; x86</div><div class="code_line">&nbsp;&nbsp; &nbsp;BSDI BSD/OS &nbsp; &nbsp; 2.x &nbsp; &nbsp; ?</div><div class="code_line">&nbsp;&nbsp; &nbsp;Linux ELF &nbsp; 1.2.x, 1.3.x &nbsp; &nbsp;x86</div><div class="code_line">&nbsp;&nbsp; &nbsp;SCO OpenServer &nbsp;5.x &nbsp; &nbsp; &nbsp; &nbsp; x86</div><div class="code_line">&nbsp;&nbsp; &nbsp;Max/OS SVR4 1.x &nbsp; &nbsp; Concurrent Maxion 9200 MP</div><div class="code_line">&nbsp;&nbsp; &nbsp;DG/UX &nbsp; &nbsp; &nbsp; 5.x &nbsp; &nbsp; Aviion</div><div class="code_line">&nbsp;&nbsp; &nbsp;OpenVMS &nbsp; &nbsp; 6.x &nbsp; &nbsp; DEC Alpha</div><div class="code_line">&nbsp;&nbsp; &nbsp;Windows NT &nbsp;4.x &nbsp; &nbsp; x86</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<strong class='tag-b'>Как работает.</strong><br>
Так же как и ODBC в &quot;чистом виде&quot;. Есть некий промежуточный слой, к которому обращается прикладная программа. <br>
Через этот слой идет обращение к &quot;драйверу БД&quot;, который транслирует SQL-запрос серверу БД. Сервер БД чего-то <br>
делает и возвращает результаты по обратной цепочке. Драйвера к той или иной БД представляют собой библиотеки.<br>
<br>
Все бы было хорошо, еслиб не было так плохо. Проблема в драйверах. Дело в том, что та &quot;контора&quot;, которая <br>
разработала все это дело, разрабатывает и драйвера для БД, причем, &quot;кросс-платформенные&quot;. И распространяет<br>
их на коммерческой основе. Хотя, в принципе, демо-версии дров получить можно и, вроде, даже во времени они<br>
не ограничены, но, по-моему, с функциональностью у них есть некоторые &quot;напряги&quot;. По крайней мере, драйвер<br>
для M&#036; Access слегка кривоват. Или мне просто показалось... Ничего не собираюсь утверждать.<br>
<br>
Дополнительные ссылки:<br>
- <a href='http://www.iodbc.org' target='_blank'>http://www.iodbc.org</a> -- сам по себе проект. <br>
- <a href='http://www.openlinksw.com' target='_blank'>http://www.openlinksw.com</a> -- драйвера, распространыемые на коммерческой основе.<br>
<br>
Минусы -- самый, пожалуй главный -- проблема с дровами. Второй &quot;минус&quot; -- рекомендуется править файл<br>
<em class='tag-i'>~/odbc.ini</em> &quot;врукопашную&quot;. Нет, не то, что бы я был против... Но... Есть вариант и по-лучше... <br>
Уж &quot;развлекаться&quot;, так по полной... :D<br>
<br>
<strong class='tag-b'>Вариант #2 -- unixODBC.</strong><br>
Поддерживается весь тот же ряд платформ, но, плюс еще и QNX.<br>
<br>
<strong class='tag-b'>Как работает.</strong><br>
Все точно так же, как и предыдущий вариант -- за исключением одного &quot;но&quot; -- для доступа к БД, расположенным<br>
под Windows, Вам понадобится &quot;мост&quot; ODBC-ODBC. Т.е. этот мост становится в unixODBC &quot;универсальным драйвером&quot;<br>
БД, к которому идет обращение со стороны &quot;промежуточного слоя ODBC&quot; за данными, о которых известно, что они<br>
расположены под Win32.<br>
<br>
Если данные расположены под UNIX, то unixODBC работает через свои драйверы. Т.е. unixODBC привносит в UNIX<br>
методику работы с БД из Win32. Этому уродству есть только одно объяснение. IMHO, если софтина должна<br>
работать с данными как под Win32, так и под UNIX, то проще в этой софтине использовать пусть и корявый, но<br>
единый интерфейс, нежели развлекаться с двумя вариантами. <br>
<br>
Дополнительные ссылки:<br>
- <a href='http://www.easysoft.com' target='_blank'>http://www.easysoft.com</a> -- менеджер для unixODBC и &quot;мост&quot; ODBC-ODBC. Последний -- trial 30-day edition.<br>
- <a href='http://sourceforge.net/projects/unixodbc/' target='_blank'>http://sourceforge.net/projects/unixodbc/</a> -- AS IS.<br>
- <a href='http://www.unixodbc.org/' target='_blank'>http://www.unixodbc.org/</a> <br>
<br>
Минусы -- все то же желание разработчиков получить с нас денежку, но это, IMHO, не всегда и плохо. Но здесь,<br>
IMHO, налицо случай явного и принудительного инфицирования разработчиков &quot;зеленой лихорадкой&quot; имени Гейтса.<br>
<br>
Плюсы -- б<em class='tag-i'>о</em>льшая открытость и продуманность как интерфейса и средств управления, так и драйверов, к примеру,<br>
есть драйвера для Internet News Server. Есть шаблон драйвера (для желающих). Видел драйвер для InterBase.<br>
К этой &quot;базе данных&quot; у меня особотрепетное отношение. Когда-то программисты в той конторе, где я работал <br>
админом, на голой груди все волосы голыми руками по-вырывали за этот IB. Дело кончилось переходом на M&#036; SQL.<br>
<br>
Далее. Есть, правда консольное, но средство построения sql-запросов к ресурсам, определенным в <em class='tag-i'>~/odbc.ini</em>. <br>
Позволяет довольно быстро и качественно конструировать запросы. Вполне возможно русифицировать &quot;конфигураторы&quot; <br>
&quot;источников данных&quot; -- я про DataManager&#39;ы и ODBCConfig. Они писаны на С++, с применением Qt (KDE).<br>
<br>
<strong class='tag-b'>Как выглядит прога, использующая *ODBC?</strong><br>
Да как почти обычное Win32 С-приложение, с ТакимЖеВотСинтаксисом. С теми же SQLExec(...), SQLAllocStmt(...),<br>
SQLFreeStmt(...) и т.д. и т.п., т.к. сами по себе средства *ODBC ничего не стараются менять в исходном тексте, <br>
портируемом из Win32. Библиотеки есть для С и С++. Так что, если есть опыт развлечений с ODBC в Windows и<br>
рука не дрогнет &quot;отслюнить&quot; какие-то деньги за софт <em class='tag-i'>под *NIX</em>, то... Вам виднее...<br>
<br>
Сейчас вот перечитал написаное -- может, все-таки WinE использовать? В любом случае, лично мне не очень<br>
понравились ни первый ни второй варианты. Буду пробовать. А пока, скажем так, &quot;затычка&quot; для задачи есть. IMHO,<br>
за тридцать-то дней чего-нибудь придумаю... Хотя, может, у кого какие идеи есть?]]></description>
        <author>the_Shadow</author>
        <category>*nix</category>
      </item>
	
      </channel>
      </rss>
	