?? i_sql.ec
字號:
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 + -