Sie können die SQLGetPrivateProfileString
ODBC-API verwenden, um den Inhalt von DSN zu erstellen. Hier
int SQLGetPrivateProfileString(
LPCSTR lpszSection,
LPCSTR lpszEntry,
LPCSTR lpszDefault,
LPCSTR RetBuffer,
INT cbRetBuffer,
LPCSTR lpszFilename);
,
lpszSection = Registry-Abschnitt möchten Sie Informationen zu. In Ihrem Fall wird es DSN-Name sein.
lpszEntry = Schlüssel, aus dem der Wert extrahiert werden soll. Wenn Sie Informationen zum Datenbanknamen abrufen möchten, müssen Sie den Registrierungseintrag HKEY_LOCAL_MACHINE \ Software \ ODBC \ ODBC.INI [YOUR_DSN_NAME] überprüfen, um zu wissen, welcher Schlüsselname zum Speichern von Datenbanknamensinformationen dient. Dies liegt daran, dass unterschiedliche Treiber unterschiedliche Schlüsselnamen zum Speichern des Datenbanknamens haben können.
lpszDefault = Standardwert für den im letzten Argument angegebenen Schlüssel (lpszEntry), wenn der Schlüssel nicht gefunden wird.
RetBuffer = Zeiger auf Ausgabepuffer, in dem der Wert für den angegebenen Schlüssel empfangen wird.
cbRetBuffer = Größe des Puffers, auf den RetBuffer in Zeichen zeigt.
lpszDateiname = Dateiname, in dem Sie diese Einträge suchen. In Ihrem Fall wird es odbc.ini sein.
Musterbeispiel
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);
Es wird Registrierungseintrag HKEY_CURRENT_USER oder HKEY_LOCAL_MACHINE oder beide in Abhängigkeit von dem Config Mode-Set suchen (Es kann mit SQLSetConfigMode ODBC-API festgelegt werden). Wenn der Modus nicht explizit festgelegt ist, wird sowohl nach HKEY_CURRENT_USER als auch nach HKEY_LOCAL_MACHINE gesucht. Weitere Informationen finden Sie unter https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetprivateprofilestring-function.
Sie können den DSN-Namen nicht über sql annehmen, da AFAIK der Engine selbst nicht die Mechanismen bekannt ist, die Sie zum Herstellen einer Verbindung verwenden, aber Sie können sie sicher aus der Eigenschaft übernehmen, in der sie sich im Verbindungsobjekt befinden verwenden. Wenn Sie beispielsweise TSQLConnection verwenden, wird dies in den Parametern gespeichert. – jachguate
Leider scheint das Verbindungsobjekt nur die drei Eigenschaften zu haben - den Namen des DSN und den Benutzernamen und das Passwort des Benutzers. Die Anwendung verwendet ein TQuery und TDatabase-Objekt (beide aus dem vcl), wenn das hilft – ChargerIIC
@jachguate sollten Sie das eine Antwort machen. –