p; ┏━━━━━┓ SQL语句送后台 ┏━━━━━━━━━┓ ┃ ┃ ────────────→ ┃ ┃ ┃ 前 台 ┃ ........TCP/IP........... ┃ 后台(net_server) ┃ ┃ client ┃ ←──────────── ┃ server ┃ ┗━━━━━┛ 查询、更新结果返回前台 ┗━━━━━━━━━┛
------图16-----
查询的核心代码:
Select(int tag, char *command) { $char *sel, Str[128]; $short flag; $date Date; $long Number, b_count, j; $long prec; $long type; $long scale; $double money; $char result[128]; int ret, offset=0; int i=0; char fmt[32], Tag;
if(DisplayFlag) printf("tag=%c\nsql=%s\n", tag, command); RetPacket.txcode=SELECT;
if(tag=='M'){ //多项查询 sel=getfield(command, &offset); if(strlen(sel)<2) goto EXIT1; Tag=sel[0]; } else Tag=tag; sel=getfield(command, &offset); if(tag=='M') ChangeCmd(sel); if(strlen(sel)<10) goto EXIT1;
if((ret=ComposeBrowse(10, sel))<0){ SqlErrHandle(SQLCODE, SELECT); goto EXIT0; } RetPacket.txcode=SELECT;
$get descriptor 'browsdesc' :b_count=count; if(SQLCODE){ SqlErrHandle(SQLCODE, SELECT); goto EXIT0; }
$fetch BROWSE using sql descriptor 'browsdesc'; if(SQLCODE){ strcpy(RetPacket.data, "SELECT ERROR|"); SqlErrHandle(SQLCODE, SELECT); goto EXIT0; }
for(j=1;j<=b_count;j++){ $get descriptor 'browsdesc' value $j $prec=precision, /*money、decimal*/ $scale=scale, /*money、decimal*/ $type=type; if(SQLCODE){ strcpy(RetPacket.data, "SELECT ERROR|"); SqlErrHandle(SQLCODE, SELECT); goto EXIT0; } switch(type){ case SQLFLOAT: case SQLSMFLOAT: case SQLDECIMAL: case SQLMONEY: if(prec) sprintf(fmt, "%s%d.%df\0", "%",prec+1, scale); else strcpy(fmt, "%f"); $get descriptor 'browsdesc' value $j $money=data; sprintf(result, fmt, money);
if(SQLCODE==DATAISNULL) result[0]=0; break; default: $get descriptor 'browsdesc' value $j $result=data; }//switch
DelTailSpace(result);
if(SQLCODE==DATAISNULL) SQLCODE=0;
if(SQLCODE){ strcpy(RetPacket.data, "SELECT ERROR|"); SqlErrHandle(SQLCODE, SELECT); goto EXIT0; }
strcat(RetPacket.data, result); strcat(RetPacket.data, "|"); }//for if(DisplayFlag) puts(RetPacket.data);
EXIT0: $close BROWSE; $free BROWSE; $deallocate descriptor 'browsdesc'; EXIT1: return TRUE; }
(一)网络版的作用: 增强安全性。INFORMIX能访问远程数据库,但须建立对等关系,会造成不安全。 本版无须建立对等关系,克服了这个弱点。
(二)网络版的用法: 1. 网络通讯使用TCP/IP协议。 2. 前、后台程序也可在同台机器上. 3. FORM的定制、函数及功能不变. 4. 链接的程序库: /usr/wform/lib/libnetform.a。 5. 通讯的配置文件: $HOME/etc/sys.net的内容:
(1)数据库名:对后台而设 [Database] Database=mobile (2)后台机器名:前、后台须一致。/etc/hosts中存在,也可以直接写IP地址。 [ServerHost] ServerHost=save01
(3)端口号:前、后台须一致。 [NetForm Tcp Port] NetFormTcpPort=8168
(4)socket超时报警时间(秒),确省值60 [Socket Read & Write Time Out(s)] SocketTimeOut=35
(5)查询超时报警时间(秒),确省值60, 仅对前台而设。 [Wgetch Time Out(s)] WgetchTimeOut=30
(6)跟踪标志,仅对前台而设,0屏蔽,1开放。跟踪文件:$HOME/run/trace [Trace Flag] TraceFlag=0
(7)connect超时报警时间(秒) 仅对前台而设。 [Company Server Connect Time Out(s)] ConnectTimeOut=8
(8) fork()服务子进程同时存在的最大数, 仅对后台而设。 [Max User Number] UserNum=10
(9)显示部分服务程序接受和发送的数据。0屏蔽,1开放 [Display Server Data Flag] DisplayFlag=1
6. 地址簿文件: $HOME/etc/hosts.equ 设在后台 记录允许访问数据库的前台机器的IP地址,未记录的机器不能访问。 设置方法: (1)文件中加入all.hosts,对所有的客户开放。 (2)文件中加入网段地址(如13.7.5),对该网段开放。 (3)文件中加入完整的客户端IP地址(如12.17.23.76),对该客户机开放。
7. 服务器的启动:net_server
8. 服务器的停止:net_server stop
9. 返回值∶ 当sqlcode>-10时是本系统定义,含义如下∶
-1 收数据包出错: 如超时。 -2 拒绝服务∶ 地址簿无本机IP地址 -4 服务进程超过限定的数目。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [JAVA开发]Informix J/Foundation [SyBase]Informix Dynamic Server 中的分布式事务 [MySql]windows系统下jsp+mysql+tomcat的配置 [Sql Server]Informix SQL函数的详细用法
|