Bạn có thể sử dụng SQLGetPrivateProfileString
ODBC API để lấy nội dung của DSN được tạo.
int SQLGetPrivateProfileString(
LPCSTR lpszSection,
LPCSTR lpszEntry,
LPCSTR lpszDefault,
LPCSTR RetBuffer,
INT cbRetBuffer,
LPCSTR lpszFilename);
Ở đây,
lpszSection = phần registry bạn muốn chi tiết cho. nó sẽ là tên DSN trong trường hợp của bạn.
lpszEntry = khóa mà bạn muốn trích xuất giá trị. bạn muốn lấy thông tin tên cơ sở dữ liệu, do đó bạn cần kiểm tra mục đăng ký HKEY_LOCAL_MACHINE \ Software \ ODBC \ ODBC.INI [YOUR_DSN_NAME] để biết tên khóa để lưu trữ thông tin tên cơ sở dữ liệu là gì. Điều này là do trình điều khiển khác nhau có thể có tên khóa khác nhau để lưu trữ tên cơ sở dữ liệu.
lpszDefault = Giá trị mặc định cho khóa được chỉ định trong đối số cuối cùng (lpszEntry) nếu không tìm thấy khóa.
RetBuffer = Con trỏ tới bộ đệm đầu ra trong đó giá trị cho khóa được chỉ định được nhận.
cbRetBuffer = kích thước bộ đệm được trỏ bởi RetBuffer trong ký tự.
lpszFilename = Tên tệp nơi bạn tìm kiếm các mục nhập này. Nó sẽ là odbc.ini trong trường hợp của bạn.
dụ mẫu
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);
Nó sẽ tìm kiếm registry entry HKEY_CURRENT_USER hoặc HKEY_LOCAL_MACHINE hoặc cả hai tùy thuộc vào các thiết lập chế độ cấu hình (Nó có thể được thiết lập sử dụng SQLSetConfigMode ODBC API). Nếu chế độ không được thiết lập rõ ràng, nó sẽ tìm kiếm cả HKEY_CURRENT_USER và HKEY_LOCAL_MACHINE. Vui lòng tham khảo https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlgetprivateprofilestring-function để biết thêm thông tin.
Bạn không thể lấy tên DSN thông qua sql, vì AFAIK bản thân động cơ không biết các cơ chế bạn đang sử dụng để kết nối, nhưng bạn chắc chắn có thể lấy nó từ thuộc tính nơi nó nằm trong đối tượng kết nối bạn sử dụng. Ví dụ, nếu bạn sử dụng TSQLConnection, nó được lưu trữ trên các tham số. – jachguate
Thật không may là đối tượng kết nối dường như chỉ có ba thuộc tính - tên của dsn và tên người dùng và mật khẩu của người dùng. Ứng dụng đang sử dụng đối tượng TQuery và TDatabase (cả từ vcl) nếu điều đó giúp – ChargerIIC
@jachguate bạn nên làm cho câu trả lời đó. –