2011-10-11 64 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中)捆綁)