⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlg_specific.c

📁 关系型数据库 Postgresql 6.5.2
💻 C
📖 第 1 页 / 共 2 页
字号:
/* Module:          dlg_specific.c * * Description:     This module contains any specific code for handling *                  dialog boxes such as driver/datasource options.  Both the *                  ConfigDSN() and the SQLDriverConnect() functions use  *                  functions in this module.  If you were to add a new option *                  to any dialog box, you would most likely only have to change *                  things in here rather than in 2 separate places as before. * * Classes:         none * * API functions:   none * * Comments:        See "notice.txt" for copyright and license information. * */#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifndef WIN32#include <string.h>#include "gpps.h"#define SQLGetPrivateProfileString(a,b,c,d,e,f) GetPrivateProfileString(a,b,c,d,e,f)#define SQLWritePrivateProfileString(a,b,c,d) WritePrivateProfileString(a,b,c,d)#ifndef HAVE_STRICMP#define stricmp(s1,s2)	strcasecmp(s1,s2)#define strnicmp(s1,s2,n)	strncasecmp(s1,s2,n)#endif#endif#include "dlg_specific.h"#include "convert.h"#ifndef BOOL#define BOOL	int#endif#ifndef FALSE#define FALSE	(BOOL)0#endif#ifndef TRUE#define TRUE	(BOOL)1#endifextern GLOBAL_VALUES globals;#ifdef WIN32voidSetDlgStuff(HWND hdlg, ConnInfo *ci){	/*	If driver attribute NOT present, then set the datasource name and description */	if (ci->driver[0] == '\0') {		SetDlgItemText(hdlg, IDC_DSNAME, ci->dsn);		SetDlgItemText(hdlg, IDC_DESC, ci->desc);	}	SetDlgItemText(hdlg, IDC_DATABASE, ci->database);	SetDlgItemText(hdlg, IDC_SERVER, ci->server);	SetDlgItemText(hdlg, IDC_USER, ci->username);	SetDlgItemText(hdlg, IDC_PASSWORD, ci->password);	SetDlgItemText(hdlg, IDC_PORT, ci->port);}void GetDlgStuff(HWND hdlg, ConnInfo *ci){	GetDlgItemText(hdlg, IDC_DESC, ci->desc, sizeof(ci->desc));	GetDlgItemText(hdlg, IDC_DATABASE, ci->database, sizeof(ci->database));	GetDlgItemText(hdlg, IDC_SERVER, ci->server, sizeof(ci->server));	GetDlgItemText(hdlg, IDC_USER, ci->username, sizeof(ci->username));	GetDlgItemText(hdlg, IDC_PASSWORD, ci->password, sizeof(ci->password));	GetDlgItemText(hdlg, IDC_PORT, ci->port, sizeof(ci->port));}int CALLBACK driver_optionsProc(HWND   hdlg,                           WORD   wMsg,                           WPARAM wParam,                           LPARAM lParam){	switch (wMsg) {	case WM_INITDIALOG:		CheckDlgButton(hdlg, DRV_COMMLOG, globals.commlog);		CheckDlgButton(hdlg, DRV_OPTIMIZER, globals.disable_optimizer);		CheckDlgButton(hdlg, DRV_KSQO, globals.ksqo);		CheckDlgButton(hdlg, DRV_UNIQUEINDEX, globals.unique_index);		CheckDlgButton(hdlg, DRV_READONLY, globals.readonly);		CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, globals.use_declarefetch);		/*	Unknown (Default) Data Type sizes */		switch(globals.unknown_sizes) {		case UNKNOWNS_AS_DONTKNOW:			CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);			break;		case UNKNOWNS_AS_LONGEST:			CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);			break;		case UNKNOWNS_AS_MAX:		default:			CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);			break;		}		CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, globals.text_as_longvarchar);		CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, globals.unknowns_as_longvarchar);		CheckDlgButton(hdlg, DRV_BOOLS_CHAR, globals.bools_as_char);		CheckDlgButton(hdlg, DRV_PARSE, globals.parse);		CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, globals.cancel_as_freestmt);		SetDlgItemInt(hdlg, DRV_CACHE_SIZE, globals.fetch_max, FALSE);		SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, globals.max_varchar_size, FALSE);		SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, globals.max_longvarchar_size, TRUE);		SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes);		/*	Driver Connection Settings */		SetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings);		break; 	case WM_COMMAND:		switch (GET_WM_COMMAND_ID(wParam, lParam)) {		case IDOK:			globals.commlog = IsDlgButtonChecked(hdlg, DRV_COMMLOG);			globals.disable_optimizer = IsDlgButtonChecked(hdlg, DRV_OPTIMIZER);			globals.ksqo = IsDlgButtonChecked(hdlg, DRV_KSQO);			globals.unique_index = IsDlgButtonChecked(hdlg, DRV_UNIQUEINDEX);			globals.readonly = IsDlgButtonChecked(hdlg, DRV_READONLY);			globals.use_declarefetch = IsDlgButtonChecked(hdlg, DRV_USEDECLAREFETCH);			/*	Unknown (Default) Data Type sizes */			if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_MAX))				globals.unknown_sizes = UNKNOWNS_AS_MAX;			else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_DONTKNOW))				globals.unknown_sizes = UNKNOWNS_AS_DONTKNOW;			else if (IsDlgButtonChecked(hdlg, DRV_UNKNOWN_LONGEST))				globals.unknown_sizes = UNKNOWNS_AS_LONGEST;			else				globals.unknown_sizes = UNKNOWNS_AS_MAX;			globals.text_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_TEXT_LONGVARCHAR);			globals.unknowns_as_longvarchar = IsDlgButtonChecked(hdlg, DRV_UNKNOWNS_LONGVARCHAR);			globals.bools_as_char = IsDlgButtonChecked(hdlg, DRV_BOOLS_CHAR);			globals.parse = IsDlgButtonChecked(hdlg, DRV_PARSE);			globals.cancel_as_freestmt = IsDlgButtonChecked(hdlg, DRV_CANCELASFREESTMT);			globals.fetch_max = GetDlgItemInt(hdlg, DRV_CACHE_SIZE, NULL, FALSE);			globals.max_varchar_size = GetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, NULL, FALSE);			globals.max_longvarchar_size= GetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, NULL, TRUE);	// allows for SQL_NO_TOTAL			GetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, globals.extra_systable_prefixes, sizeof(globals.extra_systable_prefixes));			/*	Driver Connection Settings */			GetDlgItemText(hdlg, DRV_CONNSETTINGS, globals.conn_settings, sizeof(globals.conn_settings));			updateGlobals();			//	fall through		case IDCANCEL:			EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);			return TRUE;		case IDDEFAULTS:			CheckDlgButton(hdlg, DRV_COMMLOG, DEFAULT_COMMLOG);			CheckDlgButton(hdlg, DRV_OPTIMIZER, DEFAULT_OPTIMIZER);			CheckDlgButton(hdlg, DRV_KSQO, DEFAULT_KSQO);			CheckDlgButton(hdlg, DRV_UNIQUEINDEX, DEFAULT_UNIQUEINDEX);			CheckDlgButton(hdlg, DRV_READONLY, DEFAULT_READONLY);			CheckDlgButton(hdlg, DRV_USEDECLAREFETCH, DEFAULT_USEDECLAREFETCH);				CheckDlgButton(hdlg, DRV_PARSE, DEFAULT_PARSE);			CheckDlgButton(hdlg, DRV_CANCELASFREESTMT, DEFAULT_CANCELASFREESTMT);			/*	Unknown Sizes */			CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 0);			CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 0);			CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 0);			switch(DEFAULT_UNKNOWNSIZES) {			case UNKNOWNS_AS_DONTKNOW:				CheckDlgButton(hdlg, DRV_UNKNOWN_DONTKNOW, 1);				break;			case UNKNOWNS_AS_LONGEST:				CheckDlgButton(hdlg, DRV_UNKNOWN_LONGEST, 1);				break;			case UNKNOWNS_AS_MAX:				CheckDlgButton(hdlg, DRV_UNKNOWN_MAX, 1);				break;			}			CheckDlgButton(hdlg, DRV_TEXT_LONGVARCHAR, DEFAULT_TEXTASLONGVARCHAR);			CheckDlgButton(hdlg, DRV_UNKNOWNS_LONGVARCHAR, DEFAULT_UNKNOWNSASLONGVARCHAR);			CheckDlgButton(hdlg, DRV_BOOLS_CHAR, DEFAULT_BOOLSASCHAR);			SetDlgItemInt(hdlg, DRV_CACHE_SIZE, FETCH_MAX, FALSE);			SetDlgItemInt(hdlg, DRV_VARCHAR_SIZE, MAX_VARCHAR_SIZE, FALSE);			SetDlgItemInt(hdlg, DRV_LONGVARCHAR_SIZE, TEXT_FIELD_SIZE, TRUE);			SetDlgItemText(hdlg, DRV_EXTRASYSTABLEPREFIXES, DEFAULT_EXTRASYSTABLEPREFIXES);			/*	Driver Connection Settings */			SetDlgItemText(hdlg, DRV_CONNSETTINGS, "");			break;		}	}	return FALSE;}int CALLBACK ds_optionsProc(HWND   hdlg,                           WORD   wMsg,                           WPARAM wParam,                           LPARAM lParam){ConnInfo *ci;char buf[128];	switch (wMsg) {	case WM_INITDIALOG:		ci = (ConnInfo *) lParam;				SetWindowLong(hdlg, DWL_USER, lParam);	// save for OK		/*	Change window caption */		if (ci->driver[0])			SetWindowText(hdlg, "Advanced Options (Connection)");		else {			sprintf(buf, "Advanced Options (%s)", ci->dsn);			SetWindowText(hdlg, buf);		}		/*	Readonly */		CheckDlgButton(hdlg, DS_READONLY, atoi(ci->readonly));		/*	Protocol */		if (strncmp(ci->protocol, PG62, strlen(PG62)) == 0)			CheckDlgButton(hdlg, DS_PG62, 1);		else if (strncmp(ci->protocol, PG63, strlen(PG63)) == 0)			CheckDlgButton(hdlg, DS_PG63, 1);		else /* latest */			CheckDlgButton(hdlg, DS_PG64, 1);		CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));		CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));		CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));		CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));		EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));		/*	Datasource Connection Settings */		SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);		break; 	case WM_COMMAND:		switch (GET_WM_COMMAND_ID(wParam, lParam)) {		case DS_SHOWOIDCOLUMN:			mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");			EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));			return TRUE;		case IDOK: 			ci = (ConnInfo *)GetWindowLong(hdlg, DWL_USER);			mylog("IDOK: got ci = %u\n", ci);			/*	Readonly */			sprintf(ci->readonly, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));			/*	Protocol */			if ( IsDlgButtonChecked(hdlg, DS_PG62))				strcpy(ci->protocol, PG62);			else if ( IsDlgButtonChecked(hdlg, DS_PG63))				strcpy(ci->protocol, PG63);			else	/* latest */				strcpy(ci->protocol, PG64);			sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));			sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));			/*	OID Options*/			sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));			sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));			/*	Datasource Connection Settings */			GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));			//	fall through		case IDCANCEL:			EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);			return TRUE;		}	}	return FALSE;}#endif	/* WIN32 */voidmakeConnectString(char *connect_string, ConnInfo *ci){char got_dsn = (ci->dsn[0] != '\0');char encoded_conn_settings[LARGE_REGISTRY_LEN];	/*	fundamental info */	sprintf(connect_string, "%s=%s;DATABASE=%s;SERVER=%s;PORT=%s;UID=%s;PWD=%s",		got_dsn ? "DSN" : "DRIVER", 		got_dsn ? ci->dsn : ci->driver,		ci->database,		ci->server,		ci->port,		ci->username,		ci->password);	encode(ci->conn_settings, encoded_conn_settings);	/*	extra info */	sprintf(&connect_string[strlen(connect_string)], 		";READONLY=%s;PROTOCOL=%s;FAKEOIDINDEX=%s;SHOWOIDCOLUMN=%s;ROWVERSIONING=%s;SHOWSYSTEMTABLES=%s;CONNSETTINGS=%s", 		ci->readonly,		ci->protocol,		ci->fake_oid_index,		ci->show_oid_column,		ci->row_versioning,		ci->show_system_tables,		encoded_conn_settings);}voidcopyAttributes(ConnInfo *ci, char *attribute, char *value){	if(stricmp(attribute, "DSN") == 0)		strcpy(ci->dsn, value);	else if(stricmp(attribute, "driver") == 0)		strcpy(ci->driver, value);	else if(stricmp(attribute, INI_DATABASE) == 0)		strcpy(ci->database, value);	else if(stricmp(attribute, INI_SERVER) == 0 || stricmp(attribute, "server") == 0)		strcpy(ci->server, value);	else if(stricmp(attribute, INI_USER) == 0 || stricmp(attribute, "uid") == 0)		strcpy(ci->username, value);	else if(stricmp(attribute, INI_PASSWORD) == 0 || stricmp(attribute, "pwd") == 0)		strcpy(ci->password, value);	else if(stricmp(attribute, INI_PORT) == 0)		strcpy(ci->port, value);	else if (stricmp(attribute, INI_READONLY) == 0)		strcpy(ci->readonly, value);	else if (stricmp(attribute, INI_PROTOCOL) == 0)		strcpy(ci->protocol, value);	else if (stricmp(attribute, INI_SHOWOIDCOLUMN) == 0)		strcpy(ci->show_oid_column, value);	else if (stricmp(attribute, INI_FAKEOIDINDEX) == 0)		strcpy(ci->fake_oid_index, value);	else if (stricmp(attribute, INI_ROWVERSIONING) == 0)		strcpy(ci->row_versioning, value);	else if (stricmp(attribute, INI_SHOWSYSTEMTABLES) == 0)		strcpy(ci->show_system_tables, value);	else if (stricmp(attribute, INI_CONNSETTINGS) == 0) {		decode(value, ci->conn_settings);		// strcpy(ci->conn_settings, value);	}	mylog("copyAttributes: DSN='%s',server='%s',dbase='%s',user='%s',passwd='%s',port='%s',readonly='%s',protocol='%s', conn_settings='%s')\n", ci->dsn, ci->server,ci->database,ci->username,ci->password,ci->port,ci->readonly,ci->protocol,ci->conn_settings);}voidgetDSNdefaults(ConnInfo *ci){	if (ci->port[0] == '\0')		strcpy(ci->port, DEFAULT_PORT);	if (ci->readonly[0] == '\0')		sprintf(ci->readonly, "%d", globals.readonly);	if (ci->protocol[0] == '\0')		strcpy(ci->protocol, globals.protocol);	if (ci->fake_oid_index[0] == '\0')		sprintf(ci->fake_oid_index, "%d", DEFAULT_FAKEOIDINDEX);	if (ci->show_oid_column[0] == '\0')		sprintf(ci->show_oid_column, "%d", DEFAULT_SHOWOIDCOLUMN);	if (ci->show_system_tables[0] == '\0')		sprintf(ci->show_system_tables, "%d", DEFAULT_SHOWSYSTEMTABLES);	if (ci->row_versioning[0] == '\0')		sprintf(ci->row_versioning, "%d", DEFAULT_ROWVERSIONING);}void getDSNinfo(ConnInfo *ci, char overwrite){char *DSN = ci->dsn;char encoded_conn_settings[LARGE_REGISTRY_LEN];	//	If a driver keyword was present, then dont use a DSN and return.	//	If DSN is null and no driver, then use the default datasource.	if ( DSN[0] == '\0') {		if ( ci->driver[0] != '\0')

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -