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

📄 i_sql.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 3 页
字号:

	que_row = all_rows;
	sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
	h_winprompt( sql_win, 16, 1, tmp, 0, 0 );

	disp_fields( sql_win, scr.fields );
	return( 0 );
}

int	sql_add(item_no)
int	item_no;
{
int	k;
char			tmp_buf[10];


	clear_wline( sql_win, 16 );
	clear_fields( scr.fields );

	if (disp_screen( sql_win, &scr ) < 0) {
		errcall( ERROR, " this point 2" );
		return(-1);
	}

	do_insert = 1;
	do_query = 0;
	if (use_cursor) {
		if (re_query)
			EXEC SQL CLOSE usqlcurs2;
		re_query = 0;
		EXEC SQL CLOSE usqlcurs;
		use_cursor = 0;
	}
AGAIN1:
	do {
		h_prompt(LINES-1, 1, "                      CTRL-W : 帮助   CTRL-U : 放弃当前操作                   ", 0, 0);
		if ( get_screen( sql_win, &scr, 1 ) == -1 ) {
			do_insert = 0;
			clear_fields( scr.fields );
			disp_screen( sql_win, &scr );
			h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
			h_prompt(LINES-1, 1, tip, 0, 0);
			return( -1 );
		}
	} while ( check_data( sql_win, scr.fields ) != SUCC ) ;

	clear_wline( sql_win, 16 );
	h_prompt( LINES-1, 1, "                                                                              ", 0, 0);

	if (make_ins_str(&scr, sql_str, 0)) {
		beep();
		h_prompt( LINES-1, 1, "构造插入串失败,按任意键继续... ", 1, 2 );
		errcall(DEBUG,"构造修改串失败[%s]",sql_str);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_insert = 0;
		clear_fields( scr.fields );
		disp_screen( sql_win, &scr );
		return( -1 );
	}

	/* Begin - Modified by Liyao, 11/13/97 */

	begin_tran();
	EXEC SQL PREPARE prep_ins FROM :sql_str;
	if ( SQLCODE ) {
		errcall(ERROR, "Prepare Insert Error : SQLCODE[%d] SQLERRD[%d] SQL_STR[%s]",
			SQLCODE, sqlca.sqlerrd[1],sql_str);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "增加失败,按任意键继续... ", 1, 2 );
		goto AGAIN1;
	}

	EXEC SQL EXECUTE prep_ins;
	if ( SQLCODE ) {
		errcall(ERROR, "Execute Insert Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "增加失败,按任意键继续... ", 1, 2 );
		goto AGAIN1;
	}

	if ( scr.ins_func )
		k = scr.ins_func( scr );
	else
		k = SUCC;


	if ( k == SUCC ) {
		commit_tran();
		h_prompt(LINES-1, 1, "增加成功,按任意键继续... ", 1, 2);
		clear_wline(sql_win, 16);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
	} else {
		rollback_tran();
		beep();
		h_prompt(LINES-1, 1, "增加失败,按任意键继续... ", 1, 2);
		goto AGAIN1;
	}
	do_insert = 0;
	return(0);

	/* End - Modified by Liyao, 11/13/97 */

}

int	sql_update(item_no)
int	item_no;
{
	char	tmp[200], *p, *q;
	char	bankid[BANKID_LEN+1], hostid[3], card_no[CARD_NO_LEN+1];
	struct	field_st *pt;
	S_sys_param sy;
	int	k;

/*
	select_sys_param(&sy);
	if (strcmp(sy.bank_id, BOC_CENTER4) != 0 && 
	    strcmp(scr.tablename, "adm_bank_ctrl") == 0) return(-1);
*/
		
	clear_wline( sql_win, 16 );
	if ( !do_query ) {
		beep();
		h_winprompt( sql_win, 16, 1, "请先查询... ", 0, 0 );
		return( -1 );
	}
	do_query = 0;
	do_update = 1;

	p = mstr;
	for (pt = scr.fields; ; pt++) {
		fieldtostr(pt, p);
		p = p + strlen(p) + 1;
		if (MV_END(pt->option)) break;
	}

AGAIN2:
	do {
		h_prompt(LINES-1, 1, "                      CTRL-W : 帮助   CTRL-U : 放弃当前操作                   ", 0, 0);
		k = get_screen( sql_win, &scr, 1 );
		if (k) {
			if (k == -1) {
				p = mstr;
				for ( pt = scr.fields; ; pt++ ) {
					q = p;
					p = p + strlen( p ) + 1;
					strtofield( q, pt );
					if ( MV_END( pt->option ) ) break;
				}
				do_update = 0;
				do_query = 1;
				disp_fields( sql_win, scr.fields );
			} else {
				do_update = 0;
				do_query = 1;
			}
			sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
			h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
			h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
			h_prompt(LINES-1, 1, tip, 0, 0);
			return( -1 );
		}
	} while ( check_data( sql_win, scr.fields ) != SUCC ) ;

	clear_wline(sql_win, 16);
	h_prompt( LINES-1, 1, "                                                                              ", 0, 0);

	/* Begin - Modified by Liyao, 11/13/97 */

	if (make_upd_str(&scr, sql_str, rowid)) {
		beep();
		h_prompt( LINES-1, 1, "构造修改串失败,按任意键继续... ", 1, 2 );
		errcall(DEBUG,"构造修改串失败[%s]",sql_str);
		p = mstr;
		for ( pt = scr.fields; ; pt++ ) {
			q = p;
			p = p + strlen( p ) + 1;
			strtofield( q, pt );
			if ( MV_END( pt->option ) ) break;
		}
		do_update = 0;
		do_query = 1;
		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		disp_fields( sql_win, scr.fields );
		return( -1 );
	}

	begin_tran();

	EXEC SQL PREPARE prep_upd FROM :sql_str;
	if ( SQLCODE ) {
		errcall(ERROR, "Prepare Update Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "修改失败,按任意键继续... ", 1, 2 );
		goto AGAIN2;
	}

	EXEC SQL EXECUTE prep_upd;
	if ( SQLCODE ) {
		errcall(ERROR, "Execute Update Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "修改失败,按任意键继续... ", 1, 2 );
		goto AGAIN2;
	}

	if ( scr.upd_func ) k = scr.upd_func( scr );
	else k = SUCC;
	if ( k == SUCC ) {
		commit_tran();
		h_prompt( LINES-1, 1, "修改成功,按任意键继续... ", 1, 2 );
		if (!sql_requery(item_no, que_row)) {
			re_query = 1;
			do_query = 1;
		} else {
			re_query = 0;
			do_query = 0;
		}
		if (re_query == 0) {
			clear_wline(sql_win, 16);
			h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
			h_prompt(LINES-1, 1, tip, 0, 0);
		}
	} else {
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "修改失败,按任意键继续... ", 1, 2 );
		goto AGAIN2;
	}
	if (re_query == 0) {
		if (use_cursor) {
			EXEC SQL CLOSE usqlcurs;
			use_cursor = 0;
		}
	}
	do_update = 0;
	return(0);

	/* End - Modified by Liyao, 11/13/97 */

}


int	sql_delete(item_no)
int	item_no;
{
	char tmp[200];
	char	bankid[BANKID_LEN+1], hostid[3], card_no[CARD_NO_LEN+1];
	struct	field_st *pt;
	S_sys_param sy;
	int k;
	$S_edc_tran_stat	edc_tr_stat;
	$S_poskey_base		poskey_bas;
	$S_edc_card			edc_crd;
	$S_merchant_card	merchant_card_del;

/*
	select_sys_param(&sy);
	if (strcmp(sy.bank_id, BOC_CENTER4) != 0 && 
	    strcmp(scr.tablename, "adm_bank_ctrl") == 0) return(-1);
*/

	clear_wline( sql_win, 16 );
	if ( !do_query ) {
		beep();
		h_winprompt( sql_win, 16, 1, "请先查询... ", 0, 0 );
		return( -1 );
	}
	h_prompt( LINES-1, 1, "                                                                              ", 0, 0);
	beep();
	if ( yorn( sql_win, 16, 
	    " 以上资料将被删除请确认:", "1:是", "0:否", 0, 0 ) ) {

		/* Begin - Added by Liyao, 11/13/97 */

		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);

		/* End - Added by Liyao, 11/13/97 */

		return( -1 );
	}

	/* Begin - Modified by Liyao, 11/13/97 */

	if (make_del_str(&scr, sql_str, rowid)) {
		beep();
		h_prompt( LINES-1, 1, "构造删除串失败,按任意键继续... ", 1, 2 );

		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		return( -1 );
	}

	do_delete = 1;
	do_query = 0;

	begin_tran();


	EXEC SQL PREPARE prep_del FROM :sql_str;
	if ( SQLCODE ) {
		errcall(ERROR, "Prepare Delete Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "删除失败,按任意键继续... ", 1, 2 );

		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_delete = 0;
		do_query = 1;
		return( -1 );
	}

	EXEC SQL EXECUTE prep_del;
	if ( SQLCODE ) {
		errcall(ERROR, "Execute Delete Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "删除失败,按任意键继续... ", 1, 2 );

		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_delete = 0;
		do_query = 1;
		return( -1 );
	}

	if ( scr.del_func )  k = scr.del_func( scr );
	else k = SUCC;

	if ( k == SUCC ) {
		commit_tran();
		h_prompt( LINES-1, 1, "删除成功,按任意键继续... ", 1, 2 );
		if (use_cursor) {
			if (re_query)
				EXEC SQL CLOSE usqlcurs2;
			EXEC SQL CLOSE usqlcurs;
			use_cursor = 0;
		}
		clear_wline(sql_win, 16);
		clear_fields( scr.fields );
		disp_screen( sql_win, &scr );
		if (!sql_requery(item_no, que_row)) {
			re_query = 1;
			do_query = 1;
		} else {
			re_query = 0;
			do_query = 0;
		}
		if (re_query == 0) {
			clear_wline(sql_win, 16);
			h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
			h_prompt(LINES-1, 1, tip, 0, 0);
		}
	} else {
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "删除失败,按任意键继续... ", 1, 2 );
		clear_wline(sql_win, 16);
		do_query = 1;
		sprintf( tmp, "第 %d/%d 条记录", que_row, all_rows );
		h_winprompt( sql_win, 16, 1, tmp, 0, 0 );
	}
	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, tip, 0, 0);
	do_delete = 0;
	return( 0 );

	/* End - Modified by Liyao, 11/13/97 */

}


int	sql_exit()         /* 退出并释放缓冲区 */
{
	free(sql_str);
	free(mstr);
	delwin(sql_win);
	clear_wline(stdscr, 20);
	clear_wline(stdscr, 21);

	DispBelow("");
	refresh();
	if (use_cursor) {
		if (re_query)
			EXEC SQL CLOSE usqlcurs2;
		EXEC SQL CLOSE usqlcurs;
		re_query = 0;
		use_cursor = 0;
	}
	if (init) {
		free((char *)tranls_ptr);
		init = 0;
	}
	special = 0;
	return(0);
}


int	what_table(table_no, table_ptr)
int	table_no;
struct	screen_st *table_ptr;
{
	his_query = 0;	/* 每次查询时将当前流水表的20天以前的未结账查询标志清零 */
	switch (table_no) {
	case 19:			/* 角色管理 */
		*table_ptr = sys_role_st;
		break;

	case 20:			/* 柜员管理 */
		*table_ptr = cen_oper_st;
		break;

	case 21:
		*table_ptr = card_type_st; /* 卡类管理 */
		break;

	case 22:
		*table_ptr = audit_st;		/* 审计 */
		break;

	case 26:
		*table_ptr = dayacct_st;	/* 台帐 */
		break;

	default:
		beep();
		h_prompt(LINES-1, 1, "无对应数据结构,按任意键继续... ", 1, 2);
		return(-1);
	};
	return(0);
}

/*
 * 函 数 名: put_field
 * 功    能: 将sqlda结构中的值放入field_st中
 * 输    入: f_ptr 指向域结构 field_st
 *           decstr 是sqlda结构中字段值的字符串表示
 *           sn 是表中字段名
 */

put_field( f_ptr, decstr, sn )
struct field_st *f_ptr;
char	*decstr, *sn;
{
	struct field_st *i;

	for ( i = f_ptr; ; i++ ) {
		if ( strcmp( i->field_name, sn ) == 0 ) {
			strtofield( decstr, i );
			return( 0 );
		}
		if ( MV_END( i->option ) )
			break;
	}
	return( -1 );
}

/*
 * 函 数 名: compute_size
 * 功    能: 计算给 sqlda 结构 udesc 分配内存空间的尺寸
 * 输    入: 
 */

long	compute_size( udesc )
struct sqlda *udesc;
{
	int pos, i;
	struct sqlvar_struct *col;

	pos = 0;
	for ( col = udesc->sqlvar, i = 0; i < udesc->sqld; col++, i++ ) {
		switch ( col->sqltype ) {
		case SQLMONEY:
		case SQLDECIMAL:
			pos = rtypalign( pos, CDECIMALTYPE );
			col->sqltype = CDECIMALTYPE;
			col->sqllen = rtypmsize( CDECIMALTYPE, 0 );
			pos += col->sqllen;
			break;
		default:
			pos = rtypalign( pos, CFIXCHARTYPE );
			col->sqllen = rtypwidth(col->sqltype, col->sqllen) + 1;
			col->sqltype = CFIXCHARTYPE;
			pos += col->sqllen + 1;
			break;
		}
	}
	return( pos );
}

/*
 * 函 数 名: get_data_from_sqlda
 * 功    能: 将sql的数据转换成screen_st结构的fields结构中
 * 输    入: udesc
 *           rowid
 *           scr
 * 输    出: 0 成功 -1 失败
 * 调用函数:
 */

int get_data_from_sqlda( udesc, rowid, scr )
struct sqlda *udesc;
char	*rowid;
struct screen_st *scr;
{
	register int	len, i;
	register char	*cp;
	struct sqlvar_struct *col;
	char	decstr[DSTRSZ];

	col = udesc->sqlvar;
	len = col->sqllen;
	cp = col->sqldata + len - 1;
	while ( len > 1 && *cp == ' ' )
		len--, cp--;
	*( ++cp ) = 0;
	strcpy( rowid, col->sqldata );
	for ( col = udesc->sqlvar+1, i = 1; i < udesc->sqld; col++, i++ ) {
		if ( col->sqltype == CDECIMALTYPE ) {
			dectoasc( (struct decimal *)col->sqldata, decstr, DSTRSZ, -1 );
			ldchar( decstr, DSTRSZ, decstr );
			put_field( scr->fields, decstr, col->sqlname );
		} else {
			len = col->sqllen;
			cp = col->sqldata + len - 1;
			while ( len > 1 && *cp == ' ' )
				len--, cp--;
			*( ++cp ) = 0;
			if ( put_field( scr->fields, 
			    col->sqldata, 
			    col->sqlname ) == -1 ) {

⌨️ 快捷键说明

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