diff options
Diffstat (limited to 'src/interfaces/odbc/drvconn.c')
| -rw-r--r-- | src/interfaces/odbc/drvconn.c | 171 |
1 files changed, 69 insertions, 102 deletions
diff --git a/src/interfaces/odbc/drvconn.c b/src/interfaces/odbc/drvconn.c index ee0d8252d72..89cb23b1896 100644 --- a/src/interfaces/odbc/drvconn.c +++ b/src/interfaces/odbc/drvconn.c @@ -1,16 +1,16 @@ -
-/* Module: drvconn.c
- *
- * Description: This module contains only routines related to
- * implementing SQLDriverConnect.
- *
- * Classes: n/a
- *
- * API functions: SQLDriverConnect
- *
- * Comments: See "notice.txt" for copyright and license information.
- *
- */
+ +/* Module: drvconn.c + * + * Description: This module contains only routines related to + * implementing SQLDriverConnect. + * + * Classes: n/a + * + * API functions: SQLDriverConnect + * + * Comments: See "notice.txt" for copyright and license information. + * + */ #include <stdio.h> #include <stdlib.h> @@ -26,15 +26,17 @@ #include <odbcinst.h> #include "resource.h" +#include "dlg_specific.h" + /* prototypes */ BOOL FAR PASCAL dconn_FDriverConnectProc(HWND hdlg, UINT wMsg, WPARAM wParam, LPARAM lParam); RETCODE dconn_DoDialog(HWND hwnd, ConnInfo *ci); void dconn_get_connect_attributes(UCHAR FAR *connect_string, ConnInfo *ci); - extern HINSTANCE NEAR s_hModule; /* Saved module handle. */ extern GLOBAL_VALUES globals; + RETCODE SQL_API SQLDriverConnect( HDBC hdbc, HWND hwnd, @@ -67,10 +69,10 @@ char password_required = FALSE; // If the ConnInfo in the hdbc is missing anything, // this function will fill them in from the registry (assuming // of course there is a DSN given -- if not, it does nothing!) - CC_DSN_info(conn, CONN_DONT_OVERWRITE); + getDSNinfo(ci, CONN_DONT_OVERWRITE); // Fill in any default parameters if they are not there. - CC_set_defaults(conn); + getDSNdefaults(ci); dialog: ci->focus_password = password_required; @@ -102,14 +104,14 @@ dialog: break; } - /* Password is not a required parameter unless authentication asks for it.
- For now, I think its better to just let the application ask over and over until
- a password is entered (the user can always hit Cancel to get out)
- */
+ /* Password is not a required parameter unless authentication asks for it. + For now, I think its better to just let the application ask over and over until + a password is entered (the user can always hit Cancel to get out) + */ if( ci->username[0] == '\0' || ci->server[0] == '\0' || ci->database[0] == '\0' || - ci->port[0] == '\0') {
+ ci->port[0] == '\0') { // (password_required && ci->password[0] == '\0')) return SQL_NO_DATA_FOUND; @@ -119,19 +121,7 @@ dialog: // return the completed string to the caller. - char got_dsn = (ci->dsn[0] != '\0'); - - sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;READONLY=%s;PWD=%s;PROTOCOL=%s;CONNSETTINGS=%s", - got_dsn ? "DSN" : "DRIVER", - got_dsn ? ci->dsn : ci->driver, - ci->database, - ci->server, - ci->port, - ci->username, - ci->readonly, - ci->password,
- ci->protocol,
- ci->conn_settings); + makeConnectString(connect_string, ci); if(pcbConnStrOut) { *pcbConnStrOut = strlen(connect_string); @@ -169,7 +159,7 @@ int dialog_result; mylog("dconn_DoDialog: ci = %u\n", ci); if(hwnd) { - dialog_result = DialogBoxParam(s_hModule, MAKEINTRESOURCE(DRIVERCONNDIALOG), + dialog_result = DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_CONFIG), hwnd, dconn_FDriverConnectProc, (LPARAM) ci); if(!dialog_result || (dialog_result == -1)) { return SQL_NO_DATA_FOUND; @@ -188,34 +178,37 @@ BOOL FAR PASCAL dconn_FDriverConnectProc( WPARAM wParam, LPARAM lParam) { -static ConnInfo *ci; +ConnInfo *ci; switch (wMsg) { case WM_INITDIALOG: - ci = (ConnInfo *) lParam; // Save the ConnInfo for the "OK" - - SetDlgItemText(hdlg, SERVER_EDIT, ci->server); - SetDlgItemText(hdlg, DATABASE_EDIT, ci->database); - SetDlgItemText(hdlg, USERNAME_EDIT, ci->username); - SetDlgItemText(hdlg, PASSWORD_EDIT, ci->password); - SetDlgItemText(hdlg, PORT_EDIT, ci->port); - CheckDlgButton(hdlg, READONLY_EDIT, atoi(ci->readonly));
-
- CheckDlgButton(hdlg, PG62_EDIT, PROTOCOL_62(ci)); -
- /* The driver connect dialog box allows manipulating this global variable */
- CheckDlgButton(hdlg, COMMLOG_EDIT, globals.commlog);
+ ci = (ConnInfo *) lParam; + + /* Change the caption for the setup dialog */ + SetWindowText(hdlg, "PostgreSQL Connection"); + + SetWindowText(GetDlgItem(hdlg, IDC_DATASOURCE), "Connection"); + + /* Hide the DSN and description fields */ + ShowWindow(GetDlgItem(hdlg, IDC_DSNAMETEXT), SW_HIDE); + ShowWindow(GetDlgItem(hdlg, IDC_DSNAME), SW_HIDE); + ShowWindow(GetDlgItem(hdlg, IDC_DESCTEXT), SW_HIDE); + ShowWindow(GetDlgItem(hdlg, IDC_DESC), SW_HIDE); + + SetWindowLong(hdlg, DWL_USER, lParam);// Save the ConnInfo for the "OK" + + SetDlgStuff(hdlg, ci); if (ci->database[0] == '\0') ; /* default focus */ else if (ci->server[0] == '\0') - SetFocus(GetDlgItem(hdlg, SERVER_EDIT)); + SetFocus(GetDlgItem(hdlg, IDC_SERVER)); else if (ci->port[0] == '\0') - SetFocus(GetDlgItem(hdlg, PORT_EDIT)); + SetFocus(GetDlgItem(hdlg, IDC_PORT)); else if (ci->username[0] == '\0') - SetFocus(GetDlgItem(hdlg, USERNAME_EDIT)); + SetFocus(GetDlgItem(hdlg, IDC_USER)); else if (ci->focus_password) - SetFocus(GetDlgItem(hdlg, PASSWORD_EDIT)); + SetFocus(GetDlgItem(hdlg, IDC_PASSWORD)); break; @@ -223,26 +216,30 @@ static ConnInfo *ci; switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDOK: - GetDlgItemText(hdlg, SERVER_EDIT, ci->server, sizeof(ci->server)); - GetDlgItemText(hdlg, DATABASE_EDIT, ci->database, sizeof(ci->database)); - GetDlgItemText(hdlg, USERNAME_EDIT, ci->username, sizeof(ci->username)); - GetDlgItemText(hdlg, PASSWORD_EDIT, ci->password, sizeof(ci->password)); - GetDlgItemText(hdlg, PORT_EDIT, ci->port, sizeof(ci->port)); - - sprintf(ci->readonly, "%d", IsDlgButtonChecked(hdlg, READONLY_EDIT));
-
- if (IsDlgButtonChecked(hdlg, PG62_EDIT))
- strcpy(ci->protocol, PG62);
- else
- ci->protocol[0] = '\0'; -
- /* The driver connect dialog box allows manipulating this global variable */
- globals.commlog = IsDlgButtonChecked(hdlg, COMMLOG_EDIT);
- updateGlobals();
+ ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); + + GetDlgStuff(hdlg, ci); + case IDCANCEL: EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK); return TRUE; + + case IDC_DRIVER: + + DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DRV), + hdlg, driver_optionsProc, (LPARAM) NULL); + + + break; + + case IDC_DATASOURCE: + + ci = (ConnInfo *) GetWindowLong(hdlg, DWL_USER); + DialogBoxParam(s_hModule, MAKEINTRESOURCE(DLG_OPTIONS_DS), + hdlg, ds_optionsProc, (LPARAM) ci); + + break; } } @@ -286,42 +283,12 @@ char *strtok_arg; if( !attribute || !value) continue; - /*********************************************************/ - /* PARSE ATTRIBUTES */ - /*********************************************************/ - if(stricmp(attribute, "DSN") == 0) - strcpy(ci->dsn, value); - - else if(stricmp(attribute, "driver") == 0) - strcpy(ci->driver, value); + // Copy the appropriate value to the conninfo + copyAttributes(ci, attribute, value); - else if(stricmp(attribute, "uid") == 0) - strcpy(ci->username, value); - - else if(stricmp(attribute, "pwd") == 0) - strcpy(ci->password, value); - - else if ((stricmp(attribute, "server") == 0) || - (stricmp(attribute, "servername") == 0)) - strcpy(ci->server, value); - - else if(stricmp(attribute, "port") == 0) - strcpy(ci->port, value); - - else if(stricmp(attribute, "database") == 0) - strcpy(ci->database, value); - - else if (stricmp(attribute, "readonly") == 0) - strcpy(ci->readonly, value);
-
- else if (stricmp(attribute, "protocol") == 0)
- strcpy(ci->protocol, value);
- - else if (stricmp(attribute, "connsettings") == 0)
- strcpy(ci->conn_settings, value);
-
} free(our_connect_string); } + |
