2011-10-11 63 views
2

我在OS X 10.6.8上使用iODBC从我正在编写的C程序中获取MySQL(mysql-connector-odbc-5.1.8),但跟踪所有ODBC库调用,应该被默认关闭,打开。关闭iODBC跟踪

我已经找到了一套odbc.iniodbcinst.ini文件/etc/Library/ODBC/,但他们都不包含“跟踪= YES”,并以“跟踪=无”到这些文件,不添加[ODBC]节似乎做任何事情。我也没有任何私人.odbc.ini.odbcinst.ini文件在工作目录中,也没有在我的家目录也没有任何其他地方。

我可以关闭跟踪的唯一方法是调用SQLSetConnectAttr()分配连接句柄后设置SQL_ATTR_TRACESQL_OPT_TRACE_OFF,但在这一点上,跟踪文件,sql.log,已经在工作目录中创建。

任何帮助跟踪打开跟踪的位置(它应该是默认关闭的),或者,如何关闭它以便日志文件永远不会被创建,将不胜感激。

+0

对于任何可能看到这个问题的人:我通过将ODBCINI环境变量设置为指向'$ HOME/.odbc.ini'解决了ODBC跟踪问题,其中我在'[ODBC]中设置了'TRACE = 0', '部分。这似乎按预期工作。当我不这样做时,我仍然不知道为什么或在哪里启用了跟踪。 – Kusalananda

回答

0

我不知道为什么你会使用odbc而不是标准连接器,但是您是否尝试过将TraceFile选项设置为odbc.ini中的/ dev/null。如果您无法使Trace = OFF自行工作,至少可以删除该文件。

[ODBC] 
Trace = OFF 
TraceFile = /dev/null 

在办公室没有我的Mac来测试这个,但似乎它应该工作。

+0

“标准连接器”是什么意思?你的意思是使用MySQL C API?我希望能够替换在我的代码下使用的数据库实现, PostgreSQL或SQLite代替MySQL在未来的某个时间点。这就是我使用ODBC的原因。将跟踪文件设置为'/ dev/null'对我来说可能会解决这个问题(还没有机会尝试它),但以最笨拙的方式进行。我想了解为什么默认设置(没有跟踪)应该是默认设置。 – Kusalananda

+0

ODBC不会规范化各种数据库供应商之间的SQL差异。你可能想看看使用某种类型的ORM,并处理你的数据库抽象。然后,您可以随意滑动您的品牌数据库的优化连接器。我同意上面的方法可能被认为是黑客攻击,但是你又说过,你至少希望关闭文​​件创建。 :-)干杯! –

+0

您有建议可以在UNIX C应用程序中使用的ORM吗?指针将受到欢迎。我会接受你的答案,因为它毫无例外。谢谢/ – Kusalananda

0

的ODBC在Mac OS X中的默认设置文件在被发现 -

/Library/ODBC/odbc.ini 
/Library/ODBC/odbcinst.ini 
/Users/*/Library/ODBC/odbc.ini 
/Users/*/Library/ODBC/odbcinst.ini 

前两个是系统级设置和DSN的;后者用于用户级别。

一些有缺陷的安装程序和库在创建文件 -

/Users/*/.odbc.ini 
/Users/*/.odbcinst.ini 
/etc[/*]/.odbc.ini 
/etc[/*]/.odbcinst.ini 
/etc[/*]/odbc.ini 
/etc[/*]/odbcinst.ini 

这可能导致麻烦。此命令将显示所有可能制造麻烦的文件 -

sudo find/\(-name '.odbc*.ini' -or -name 'odbc*.ini' \) -ls 

最好的是 -

  1. 融合现有的非默认的文件到默认位置的内容,并删除非默认文件
  2. 创建从手推车.odbc [研究所]的.ini位置符号连接到默认的文件
  3. 更新iODBC components on your Mac
  4. 享受无故障使用ODBC

(ObDisclaimer:我的OpenLink Software雇员,谁维护和支持iODBC project,这是苹果的Mac OS X选择ODBC驱动程序管理,因为捷豹(10.2.x中)捆绑)