?? i_sql.ec
字號(hào):
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 : 放棄當(dāng)前操作 ", 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, "構(gòu)造插入串失敗,按任意鍵繼續(xù)... ", 1, 2 );
errcall(DEBUG,"構(gòu)造修改串失敗[%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, "增加失敗,按任意鍵繼續(xù)... ", 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, "增加失敗,按任意鍵繼續(xù)... ", 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, "增加成功,按任意鍵繼續(xù)... ", 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, "增加失敗,按任意鍵繼續(xù)... ", 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, "請(qǐng)先查詢... ", 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 : 放棄當(dāng)前操作 ", 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, "構(gòu)造修改串失敗,按任意鍵繼續(xù)... ", 1, 2 );
errcall(DEBUG,"構(gòu)造修改串失敗[%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, "修改失敗,按任意鍵繼續(xù)... ", 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, "修改失敗,按任意鍵繼續(xù)... ", 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, "修改成功,按任意鍵繼續(xù)... ", 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, "修改失敗,按任意鍵繼續(xù)... ", 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, "請(qǐng)先查詢... ", 0, 0 );
return( -1 );
}
h_prompt( LINES-1, 1, " ", 0, 0);
beep();
if ( yorn( sql_win, 16,
" 以上資料將被刪除請(qǐng)確認(rèn):", "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, "構(gòu)造刪除串失敗,按任意鍵繼續(xù)... ", 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, "刪除失敗,按任意鍵繼續(xù)... ", 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, "刪除失敗,按任意鍵繼續(xù)... ", 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, "刪除成功,按任意鍵繼續(xù)... ", 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, "刪除失敗,按任意鍵繼續(xù)... ", 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() /* 退出并釋放緩沖區(qū) */
{
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; /* 每次查詢時(shí)將當(dāng)前流水表的20天以前的未結(jié)賬查詢標(biāo)志清零 */
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; /* 審計(jì) */
break;
case 26:
*table_ptr = dayacct_st; /* 臺(tái)帳 */
break;
default:
beep();
h_prompt(LINES-1, 1, "無(wú)對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu),按任意鍵繼續(xù)... ", 1, 2);
return(-1);
};
return(0);
}
/*
* 函 數(shù) 名: put_field
* 功 能: 將sqlda結(jié)構(gòu)中的值放入field_st中
* 輸 入: f_ptr 指向域結(jié)構(gòu) field_st
* decstr 是sqlda結(jié)構(gòu)中字段值的字符串表示
* 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 );
}
/*
* 函 數(shù) 名: compute_size
* 功 能: 計(jì)算給 sqlda 結(jié)構(gòu) udesc 分配內(nèi)存空間的尺寸
* 輸 入:
*/
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 );
}
/*
* 函 數(shù) 名: get_data_from_sqlda
* 功 能: 將sql的數(shù)據(jù)轉(zhuǎn)換成screen_st結(jié)構(gòu)的fields結(jié)構(gòu)中
* 輸 入: udesc
* rowid
* scr
* 輸 出: 0 成功 -1 失敗
* 調(diào)用函數(shù):
*/
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 ) {
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -