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

📄 i_sql.ec

📁 在SCO UNIX制定界面程序 可根据文件配制菜单,而不必修改源程序,非常方便
💻 EC
📖 第 1 页 / 共 3 页
字号:
				errcall( ERROR, "sql_name:[%s][%s]", col->sqlname, col->sqldata );
				return( -1 );
			}
		}
	}
	return(0);
}


int disp_screen_direct(int item_no)
{
	int i;

	i = disp_table_screen(item_no);
	
	if (i < 0) return(i);
	
	i = sql_query_direct(0);
	
	return(i);
}

int	sql_query_direct(item_no)
int	item_no;
{
	int i;
	long pos;
	char tmp[80];
	struct sqlvar_struct *col;

	do_query = 1;
	clear_wline(sql_win, 16);
	clear_fields(scr.fields);
	disp_screen(sql_win, &scr);

	if (make_que_str(&scr, sql_str, scr.tablename, 1)) {
		beep();
		h_prompt(LINES-1, 1, "构造查询串失败,按任意键继续... ", 1, 2);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return(-1);
	}

	if ((all_rows = query_count(sql_str)) == 0) {
		h_winprompt(sql_win, 16, 1, "没有满足条件的记录... ", 0, 0);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return(-1);
	}

	if (make_que_str(&scr, sql_str, scr.tablename, 0)) {
		beep();
		h_prompt(LINES-1, 1, "构造查询串失败,按任意键继续... ", 1, 2);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return(-1);
	}

	/* 预处理 select 语句 */

	EXEC SQL PREPARE usqlobj1 FROM $sql_str;
	if ( SQLCODE ) {
		errcall(ERROR, "Prepare Query Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		beep();
		h_prompt( LINES-1, 1, "查询失败,按任意键继续... ", 1, 2 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return( -1 );
	}

	EXEC SQL DESCRIBE usqlobj1 INTO udesc;
	if ( SQLCODE ) {
		errcall(ERROR, "Describe Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		beep();
		h_prompt( LINES-1, 1, "查询失败,按任意键继续... ", 1, 2 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return( -1 );
	}

	pos = compute_size( udesc );
	if (buffer) free(buffer);
	buffer = (char *)malloc( pos );
	if ( buffer == NULL ) {
		beep();
		h_prompt( LINES-1, 1, "内存不足,按任意键继续... ", 1, 2 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return( -1 );
	}

	/* 给每个 sqlda 结构 udesc 赋地址 */

	pos = 0;
	for ( col = udesc->sqlvar, i = 0; i < udesc->sqld; col++, i++ ) {
		pos = rtypalign( pos, col->sqltype );
		col->sqldata = buffer + pos;
		pos += col->sqllen;
		if ( col->sqltype != CDECIMALTYPE ) pos++;
	}

	/* Fetch 每一记录行, 把各类型的数据转换成ASCII格式 */

	EXEC SQL DECLARE usqlcurs1 SCROLL CURSOR FOR usqlobj1 ;
	EXEC SQL OPEN usqlcurs1;

	if ( SQLCODE ) {
		errcall(ERROR, "Query Open Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		beep();
		h_prompt( LINES-1, 1, "查询失败,按任意键继续... ", 1, 2 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		do_query = 0;
		return( -1 );
	}

	EXEC SQL FETCH usqlcurs1 USING DESCRIPTOR udesc;
	if ( SQLCODE != 0 ) {
		errcall(ERROR, "Fetch Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		beep();
		h_prompt( LINES-1, 1, "查询失败,按任意键继续... ", 1, 2 );
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		EXEC SQL CLOSE usqlcurs1;
		do_query = 0;
		return( -1 );
	}
	use_cursor_1 = 1;

	get_data_from_sqlda(udesc, rowid, &scr);

	que_row = 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(0);
}

/*
int  card_t_batch_in(int item_no)
{
	char src_file[41];
	int ret;

	clear_wline(sql_win, 16);
	h_prompt(LINES-1, 1, "                                                                              ", 0, 0);
	clear_fields(scr.fields);
	disp_screen(sql_win, &scr);
	do_query = 0;
	if (use_cursor) {
		if (re_query)
			EXEC SQL CLOSE usqlcurs2;
		EXEC SQL CLOSE usqlcurs;
		re_query = 0;
		use_cursor = 0;
	}

	set_prompt(PROMPT_OFF);
	strcpy(src_file, "/tmp/nas_acct.txt");	
	h_winprompt(sql_win, 15, 0, " 请输入卡帐户转入的源文件名 [                                        ]", 0, 0);
	ret = in_item(sql_win, "", 15, 29, src_file, 40, NULL, NULL, 0, 0);
	set_prompt(PROMPT_ON);
	if (ret != ENTER) {
		clear_wline(sql_win, 15);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		return(-1);
	}
	if (yorn(sql_win, 16, 
	    " 是否继续:", "1:是", "0:否", 0, 0)) {
		clear_wline(sql_win, 15);
		h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
		h_prompt(LINES-1, 1, tip, 0, 0);
		return(-1);
	}
	rm_tail_space(src_file);
	if (new_batch_in(sql_win, src_file)) {
		beep();
		h_prompt(LINES-1, 1, "卡帐户转入失败,按任意键继续... ", 1, 2);
	} else
		h_prompt(LINES-1, 1, "卡帐户转入成功,按任意键继续... ", 1, 2);

	clear_wline(sql_win, 15);
	clear_wline(sql_win, 16);
	h_prompt(LINES-1, 1, "                                                                 < ESC 退出 > ", 0, 0);
	h_prompt(LINES-1, 1, tip, 0, 0);
	return(0);
}
*/


/*
 * 增加系统角色菜单项
 */
int	sys_role_add(item_no)
int	item_no;
{
	struct field_st *pt;
	$char short_power[80], father[7], oper_no[7];
	$char role_code[4], role_name[11];
	char tmp[200], long_power[ITEMS];
	int  i, k;

	clear_wline( sql_win, 16 );
	clear_fields( scr.fields );
	disp_screen( sql_win, &scr );
	do_insert = 1;
	do_query = 0;
	if (use_cursor) {
		EXEC SQL CLOSE usqlcurs;
		use_cursor = 0;
	}
AGAIN5:
	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 ) ;


	pt = scr.fields;
	while (pt != NULL && strcmp(pt->field_name, "role_purview"))
		pt++;
	if (pt == NULL) {
		errcall(ERROR, "sys_role_add:no field \"role_purview\".");
		return(-1);
	}

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

	set_prompt(PROMPT_OFF);
	while (1) {
		strcpy(role_code, "   ");
		h_winprompt(sql_win, 15, 0, " 请输入拥有所需权限模板的角色码: [   ] [          ]", 0, 0);
		in_item(sql_win, "", 15, 34, role_code, 3, NULL, NULL, 0, 0);
		
		strcpy(tmp, "0.重新输入"); k = strlen(tmp) + 1;
		strcpy(tmp + k, "1.新增模板"); k += strlen(tmp + k) + 1;
		strcpy(tmp + k, "2.取消"); 

		$select role_name, role_purview, update_oper
		into :role_name, :short_power, :oper_no
		from sys_role
		where role_code = :role_code;

		if (SQLCODE)
			k = multi_select(sql_win, 16,
			" 不存在此系统角色! 请选择:", tmp, 3, 0, 0, 0);
		else {
			DelSpace(role_name);
			DelSpace(short_power);
			DelSpace(oper_no);

			h_winprompt(sql_win, 15, 40, role_name, 0, 0);
			if (strcmp(oper_no, G_oper_no) && strcmp(G_oper_no, "00")) {
			    strcpy(father, oper_no);
			    while (strcmp(father, G_oper_no) && !SQLCODE) {
				DelSpace(father);
				$select father into :father
				from center_oper
				where oper_no = :father;
			    }
			    if (SQLCODE) {
				k = multi_select(sql_win, 16,
				" 无权访问此系统角色! 请选择:", tmp, 3, 0, 0, 0);
			    }
			}
		}

		if (SQLCODE) {
			if (k == 0) continue;
			clear_wline(sql_win, 15);
			if (k == 2) {
				beep();
				h_prompt(LINES-1, 1, "增加失败,按任意键继续... ",
					 1, 2);
				goto AGAIN5;
			}
			if (k == 1) {
				long_power[0] = -1;
				OperAccess(long_power);
				beep();
				if (yorn(sql_win, 16, " 所添加的角色将拥有此权限模板, 请确认:", "1:是", "0:否", 0, 0)) continue;
				break;
			}
		} else {
			strcpy(tmp, "0.是"); k = strlen(tmp) + 1;
			strcpy(tmp + k, "1.重新输入"); k += strlen(tmp + k) + 1;
			strcpy(tmp + k, "2.修改模板"); k += strlen(tmp + k) + 1;
			strcpy(tmp + k, "3.取消"); 
			k = multi_select(sql_win, 16, " 所添加的角色将拥有此权限模板, 请确认:", tmp, 4, 0, 0, 0);
			if (k == 1) continue;
			clear_wline(sql_win, 15);
			if (k == 3) {
				beep();
				h_prompt(LINES-1, 1, "增加失败,按任意键继续... ",
					 1, 2);
				goto AGAIN5;
			}
			get_long_power(short_power, long_power);
			if (k == 0) break;
			if (k == 2) {
				OperAccess(long_power);
				beep();
				if (yorn(sql_win, 16, " 所添加的角色将拥有此权限模板, 请确认:", "1:是", "0:否", 0, 0)) continue;
				break;
			}
		}
	}
	set_prompt(PROMPT_ON);

	get_short_power(pt->field, long_power);

	if (make_ins_str(&scr, sql_str, 0)) {
		beep();
		h_prompt( LINES-1, 1, "构造插入串失败,按任意键继续... ", 1, 2 );
		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 );
	}
 	errcall(ERROR,"SQL_STR = [%s]",sql_str); 
	begin_tran();
	EXEC SQL PREPARE prep_ins_role FROM :sql_str;
	if ( SQLCODE ) {
		errcall(ERROR, "Prepare Insert Error : SQLCODE[%d] SQLERRD[%d]",
			SQLCODE, sqlca.sqlerrd[1]);
		rollback_tran();
		beep();
		h_prompt( LINES-1, 1, "增加失败,按任意键继续... ", 1, 2 );
		goto AGAIN5;
	}

	EXEC SQL EXECUTE prep_ins_role;
	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 AGAIN5;
	}

	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 AGAIN5;
	}
	do_insert = 0;
	return(0);
}

/*
 * 更新系统角色菜单项权限
 */
int	sys_role_upd(item_no)
int	item_no;
{
	struct	field_st *pt;
	char	*p, *q, long_power[ITEMS];
	char	str[20], tmp[200];
	$char	father[7];
	int	k;

	
	if (strcmp(G_oper_no, "00")) {
		/*
		 * 若不为“00”操作员,则不可以修改系统角色
		 */
		beep();
		h_winprompt( sql_win, 16, 1, "00... ", 0, 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;
	}

AGAIN6:
	pt = scr.fields;

	do {
		h_prompt(LINES-1, 1, "                      CTRL-W : 帮助   CTRL-U : 放弃当前操作                   ", 0, 0);
		k = get_screen(sql_win, &scr, 1);
		switch (k) {
		    case 0:
			continue;
		    case -2:
			k = !yorn(sql_win, 16, " 是否修改该角色的权限模板?", "1:是", "0:否", 0, 0);
			if (k)
			    continue;
			else {
			    do_update = 0;
			    do_query = 1;
			}
			break;
		    case -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 );
			break;
		}
		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);

	pt = scr.fields;
	while (strcmp(pt->field_name, "role_purview")) pt++;
	get_long_power(pt->field, long_power);
	if (k || !yorn(sql_win, 16, " 是否修改该角色的权限模板?", "1:是", "0:否", 0, 0)) {
		OperAccess(long_power);
		beep();
		if (yorn(sql_win, 16, " 请确认对权限模板所作的修改:", "1:是", "0:否", 0, 0)) goto AGAIN6;
		get_short_power(pt->field, long_power);
	}
		
	if (make_upd_str(&scr, sql_str, rowid)) {
		beep();
		h_prompt( LINES-1, 1, "构造修改串失败,按任意键继续... ", 1, 2 );

		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_role 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 AGAIN6;
	}

	EXEC SQL EXECUTE prep_upd_role;
	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 AGAIN6;
	}

	if ( scr.upd_func ) k = scr.upd_func( scr );
	else k = SUCC;
	if ( k == SUCC ) {
		commit_tran();
		h_prompt( LINES-1, 1, "修改成功,按任意键继续... ", 1, 2 );
		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 AGAIN6;
	}
	if (use_cursor) {
		EXEC SQL CLOSE usqlcurs;
		use_cursor = 0;
	}
	do_update = 0;
	return(0);
}

int sys_role_del(int item_no)
{
	if (!do_query) {
		beep();
		clear_wline(sql_win, 16);
		h_winprompt(sql_win, 16, 1, "请先查询... ", 0, 0);
		return(-1);
	}
	if (strcmp(G_oper_no, "00")) {
		beep();
		return(-1);
	}

	return(sql_delete(item_no));
}

⌨️ 快捷键说明

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