Es sieht so aus, als wäre der "Standard" -Pfad nicht korrekt eingestellt.
Ich bin mir ziemlich sicher, dass Sie tun es bereits, wie es an verschiedenen Orten erwähnt wird, aber ich möchte daran erinnern, dass Sie die richtigen Umgebungsvariablen setzen sollte, wie in den folgenden Links beschrieben:
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
Es bedeutet, In diesem Fall könnten Sie ein paar Zeilen zu Ihrer .bashrc
oder .bash_profile
oder ähnlich hinzufügen, so dass das Programm jedes Mal auf die richtigen Stellen zeigt, wenn Sie Ihre Shell öffnen.
Die Linien dann wäre hinzuzufügen: auf den Quellcode von unixODBC-2,2
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
Blick in der Tat.14-p2 Paket, wenn odbcinst -j
Aufruf wird die folgende Verzweigung im Code
case 'j':
PrintConfigInfo();
exit(0);
und PrintConfigInfo()
wird den Job zu drucken ein paar Infos gehen, speziell, was Sie
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));
}
siehe
Lassen Sie uns nun eine der print-Anweisungen untersuchen, um zu verstehen, woher der Pfad kommt. Nehmen wir zum Beispiel die Zeile
printf("SYSTEM DATA SOURCES: %s\n", szFileName);
wo szFileName
durch folgenden Aufruf gesetzt ist:
_odbcinst_SystemINI(szFileName, FALSE);
, die in der Datei definiert ist 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;
}
wo es die Saitensätze
in der folgenden Zeile gedruckt werden
sprintf(pszFileName, "%s/odbc.ini", odbcinst_system_file_path(b1));
Um zu verstehen, wie odbcinst_system_file_path(b1)
diesen Pfad setzt, schauen wir uns die Quelle an und man findet
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
}
die wie Sie sehen können die Umgebungsvariable durch getenv("ODBCSYSINI")
lesen. Ähnlich für andere. Jetzt hat der ursprüngliche Code eine andere Verzweigung, aber endet mit einer ähnlichen Sache mit benutzerdefinierten Funktionen.
ist dieser Beitrag hilfreich? http://denverpsmith.com/posts/connecting-to-mssql-database-from-linuxmac – denvaar
Ich bin verwirrt, mit welcher Datenbank Sie verbinden möchten, können Sie bitte bestätigen: Sie haben diese Frage als sql- getaggt Server, aber Ihr Treiber-Setup scheint mit MySQL zu verwenden. Die Treiber, wie ich mich erinnere, für sql-Server sind so etwas wie libtdsodbc.so nicht libodbcmyS.so benannt. Vielleicht ist das dein Problem? – gregory
Ich kenne das Produkt nicht, über das du fragst, aber du hast geschrieben: "Aber es gibt keinen Ort /etc/unixODBC/odbcinst.ini. Der tatsächliche Ort ist /etc/odbcinst.ini, also muss ich den Ort ändern . " Wenn das alles, was Sie tun wollen, würde ich fügen Sie einfach einen symbolischen Link: Wenn das Verzeichnis nicht vorhanden ist, dann: $ mkdir/etc/unixODBC $ cd /etc/unixODBC pwd $ /etc/unixODBC $ ln -s /etc/odbcinst.ini. $ ls -l lrwxrwxrwx ... odbcinst.ini -> /etc/unixODBC/odbcinst.ini –