它看起來像「默認」路徑設置不正確。
我敢肯定你已經在做了,因爲它是在不同的地方被提及,但我要提醒你應該設置正確的環境變量,如以下鏈接描述:
http://www.raosoft.com/ezsurvey/help/2007/odbc_in_unix.html http://gemfirexd.docs.pivotal.io/1.3.0/userguide/developers_guide/topics/odbc/install_config_odbc.html
這意味着在你的情況下,你可以添加幾行到你的.bashrc
或.bash_profile
或類似的文件,以便程序每次打開你的shell時指向正確的位置。
增加會然後行:
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
在的unixODBC-2.2的源代碼看確實如此。14-P2包,調用odbcinst -j
時它會經過下面的分支中的代碼
case 'j':
PrintConfigInfo();
exit(0);
和PrintConfigInfo()
將做印刷一堆信息的工作,特別是你所看到的
void PrintConfigInfo()
{
char szFileName[ODBC_FILENAME_MAX+1];
char b1[ 256 ], b2[ 256 ];
printf("unixODBC " VERSION "\n");
*szFileName = '\0';
sprintf(szFileName, "%s/odbcinst.ini", odbcinst_system_file_path(b1), odbcinst_system_file_name(b2));
printf("DRIVERS............: %s\n", szFileName);
*szFileName = '\0';
_odbcinst_SystemINI(szFileName, FALSE);
printf("SYSTEM DATA SOURCES: %s\n", szFileName);
*szFileName = '\0';
_odbcinst_FileINI(szFileName);
printf("FILE DATA SOURCES..: %s\n", szFileName);
*szFileName = '\0';
_odbcinst_UserINI(szFileName, FALSE);
printf("USER DATA SOURCES..: %s\n", szFileName);
printf("SQLULEN Size.......: %d\n", sizeof(SQLULEN));
printf("SQLLEN Size........: %d\n", sizeof(SQLLEN));
printf("SQLSETPOSIROW Size.: %d\n", sizeof(SQLSETPOSIROW));
}
現在讓我們來看看打印報告之一,以瞭解它從哪裏獲得路徑,讓我們以行爲爲例
printf("SYSTEM DATA SOURCES: %s\n", szFileName);
其中szFileName
由下面的呼叫建立:
_odbcinst_SystemINI(szFileName, FALSE);
它是文件odbcinst/_odbcinst_SystemINI.c
中定義:
BOOL _odbcinst_SystemINI(char *pszFileName, BOOL bVerify)
{
FILE *hFile;
char b1[ 256 ];
sprintf(pszFileName, "%s/odbc.ini", odbcinst_system_file_path(b1));
if (bVerify)
{
/* try opening for read */
hFile = uo_fopen(pszFileName, "r");
if (hFile)
uo_fclose(hFile);
else
{
/* does not exist so try creating it */
hFile = uo_fopen(pszFileName, "w");
if (hFile)
uo_fclose(hFile);
else
return FALSE;
}
}
return TRUE;
}
在那裏設置字符串在下面的行
sprintf(pszFileName, "%s/odbc.ini", odbcinst_system_file_path(b1));
被打印
要了解如何odbcinst_system_file_path(b1)
套這條道路,我們看看源和一個發現
char *odbcinst_system_file_path(char *buffer)
{
char *path;
static char save_path[ 512 ];
static int saved = 0;
if (saved) {
return save_path;
}
if ((path = getenv("ODBCSYSINI"))) {
strcpy(buffer, path);
strcpy(save_path, buffer);
saved = 1;
return buffer;
}
#ifdef SYSTEM_FILE_PATH
else {
strcpy(save_path, SYSTEM_FILE_PATH);
saved = 1;
return SYSTEM_FILE_PATH;
}
#else
else {
strcpy(save_path, "/etc");
saved = 1;
return "/etc";
}
#endif
}
你可以看到通過getenv("ODBCSYSINI")
閱讀環境變量。與其他類似。現在,原始代碼有另一個分支,但最終使用自定義函數做類似的事情。
是這個職位有幫助嗎? http://denverpsmith.com/posts/connecting-to-mssql-database-from-linuxmac – denvaar
我爲你想連接到的數據庫困惑,可以請你確認:您已經標記了這個問題作爲SQL的服務器,但你的驅動程序設置看起來是使用MySQL。我記得,對於sql-server的驅動程序被命名爲libtdsodbc.so而不是libodbcmyS.so。也許這是你的問題? – gregory
我不知道你是問有關產品,但你說:「但有沒有位置/etc/unixODBC/odbcinst.ini的實際位置是/etc/odbcinst.ini所以我需要改變位置。 「。如果這是你想做的事,我只想補充一個符號鏈接: 如果該目錄不存在,那麼: $ MKDIR的/ etc/unixODBC的 $ CD 的/ etc/unixODBC的 $ PWD 的/ etc/unixODBC的 $ ln -s /etc/odbcinst.ini。 $ ls -l命令 lrwxrwxrwx ... ODBCINST.INI - > /etc/unixODBC/odbcinst.ini –