È possibile utilizzare l'API ODBC SQLGetPrivateProfileString
per ottenere il contenuto di DSN creato.
int SQLGetPrivateProfileString(
LPCSTR lpszSection,
LPCSTR lpszEntry,
LPCSTR lpszDefault,
LPCSTR RetBuffer,
INT cbRetBuffer,
LPCSTR lpszFilename);
Qui,
lpszSection = sezione del registro che si desidera dettagli per. sarà il nome DSN nel tuo caso.
lpszEntry = chiave da cui si desidera estrarre il valore. si desidera ottenere le informazioni sul nome del database, quindi è necessario controllare la voce di registro HKEY_LOCAL_MACHINE \ Software \ ODBC \ ODBC.INI [YOUR_DSN_NAME] per sapere qual è il nome della chiave per memorizzare le informazioni sul nome del database. Questo perché un diverso driver può avere un nome chiave diverso per memorizzare il nome del database.
lpszDefault = Valore predefinito per la chiave specificata nell'ultimo argomento (lpszEntry) se la chiave non viene trovata.
RetBuffer = Pointer to Output buffer in cui viene ricevuto il valore per la chiave specificata.
cbRetBuffer = dimensione del buffer indicata da RetBuffer nei caratteri.
lpsz Nome file = Nome file in cui si cercano queste voci. Sarà odbc.ini nel tuo caso.
esempio Esempio
CHAR *dsn_name = "Your DSN name";
CHAR db_name[20];
char *odbcini = NULL;
odbcini = "odbc.ini";
SQLGetPrivateProfileString(dsn_name, (CHAR*)"DATABASE", (CHAR*)"", db_name,
sizeof(db_name), odbcini);
Si cercherà registro di entrata HKEY_CURRENT_USER o HKEY_LOCAL_MACHINE o entrambe a seconda del set modalità di configurazione (Può essere impostato utilizzando SQLSetConfigMode API ODBC). Se la modalità non è impostata in modo esplicito, cercherà sia HKEY_CURRENT_USER che HKEY_LOCAL_MACHINE. Per ulteriori informazioni, consultare https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetprivateprofilestring-function.
Non è possibile prendere il nome DSN tramite sql, poiché AFAIK il motore stesso non è a conoscenza dei meccanismi che si sta utilizzando per connettersi, ma si può sicuramente prenderlo dalla proprietà in cui si trova nell'oggetto di connessione che si sta utilizzando. Ad esempio, se si utilizza TSQLConnection, viene memorizzato nei parametri. – jachguate
Sfortunatamente l'oggetto di connessione sembra avere solo le tre proprietà: il nome del dsn e il nome utente e la password degli utenti. L'applicazione utilizza un oggetto TQuery e TDatabase (entrambi dalla vcl) se questo aiuta – ChargerIIC
@jachguate, è necessario fornire una risposta. –