国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

UNIX系統下informix自制開發工具構思介紹

2024-07-21 02:08:55
字體:
來源:轉載
供稿:網友

            前     言

    當前windods 上的編程工具日新月異,推陳出新;然而因unix運用的局限性,其編程工
具十分貧乏。在unix上要做畫面、菜單、查詢、輸入,編程者往往要從底層入手,重復勞動
,效率極低。筆者為了解決這個問題而盡點力,將本系統介紹給您,如您能讀完本文,收獲
一定不少。
                             
      編者:王光紅

                   email:       [email protected]
                                [email protected]
 
軟件下載:  
http://www.csdn.net/cnshare/soft/16/16735.shtm
http://www.ccrun.com/program/down.asp?id=10


    一。系統介簡

(一)實現功能∶
    用于unix上做畫面、菜單、查詢、輸入、修改;可操作數據庫。

(二)設計思路∶
    將人機對話,可分為基本的輸入與輸出兩大類,在此前提下,為了不同的需要把域分作
    多種類型;對涉及數據庫的域指明有關的表名、字段名,以進行數據庫的讀寫。將這些
    不同功能的域有機的組合在一個form中,來實現一個功能模塊。將form編號,按一定的
    結構以二進制的形式存入文件,在使用時,系統按編號讀入form的數據,按步實現預定
    的功能。

(三)軟件環境∶
    1.操作系統sco unix openserver 5.0、sco unix openserver 3.0、sco unix 3.0。
    2.編程語言 c、informix/esql。
    說明∶筆者的工作條件僅限于以上環境,如能提供其他的unix、sql數據庫(如oracle、
          sybase等), 系統只需略加修改。
      

    二。系統的文件與庫

(一)集成開發器執行程序∶
    /usr/wform/bin/mkform        form的定制工具
    /usr/wform/bin/netform       form的定制工具(網絡版)
    /usr/wform/bin/net_server    form的數據服務器

(二)配置文件∶
    form的配置文件的路徑由環境變量configpath指定,缺省為/usr/wform/etc/form.cfg
    文本文件
    它規定unix編輯器、form參數文件的路徑;菜單的格式;存儲變量的多少;
    特殊鍵的鍵值。

(三)form參數文件∶
    form參數文件的路徑在配置文件中聲明。
    二進制文件
    存放dialog結構form的數據,系統讀此文件,按步執行。
    mkform(netform)的畫面的參數文件是 /usr/wform/etc/form.bin.sys

(四)幫助信息文件:
    幫助信息文件的路徑由環境變量msgpath指定,缺省為 /usr/wform/etc/form_msg.dat
    文本文件

(五)系統說明文件:
    系統說明文件 /usr/wform/etc/readme.frm

(六)程序庫:
    /usr/wform/lib/libsetform.a 在sco unix openserver 5.0上生成。
    /usr/wform/lib/libnetform.a 在sco unix openserver 5.0上生成(網絡版)。
(七)演示例程∶
   1.兩個form參數文件∶
   /usr/wform/data/demo.form
   /usr/wform/data/test.form
   2.菜單式演示程序∶
   /usr/wform/menu/menu
   /usr/wform/menu/menu.ec
   /usr/wform/menu/print.c
   /usr/wform/menu/errhandle.c
   /usr/wform/menu/makefile
   /usr/wform/menu/mknet  鏈接libnetform.a的makefile 
   3.交易式演示程序∶
   /usr/wform/trade/trade
   /usr/wform/trade/trade.ec
   /usr/wform/trade/makefile
   /usr/wform/trade/mknet  鏈接libnetform.a的makefile
   4.兩個數據庫∶
   /usr/wform/demo.exp
   /usr/wform/test.exp

 說明:演示程序menu、trade使用的數據庫是test,form參數文件是test.form。


    三。系統的基本概念及用途

(一)form的結構:

 typedef struct _item_st_ {
  char  flag;   //數據類型(或標志)
  char  len;   //數據長度
  char  seat_y;   //縱坐標
  short seat_x;   //橫坐標
  char  fun;   //form中嵌入的函數指針編號
  char  field[41];  //復合域
  }item;

 typedef struct tagofdialog {
  unsigned  long form_id;  //交易號
  unsigned  long link_form; //連接交易
  char  mode;   //驅動方式
  char  key;   //索引項
  short num;   //以下item的個數
  item  *f;   //form中域的結構
  }dialog;


(二)基本概念及用途
 1.[交易號]  (dialog.form_id)
 form的編號,以此為索引。

 2.[連接交易] (dialog.link_form)
 form結束后調用的另一個form的交易號,此值=0,則不調用。

 3.[驅動方式] (dialog.mode)
 以確定form的性質。
  m∶菜單
  p∶打印
  b∶瀏覽
  e∶結束清域
  d∶結束刪除window
  s∶屏幕滾動
  c∶綜合查詢

 4.[索引項] (dialog.key)
 指定查詢條件的字段數, 其值是對應于[序],序號小于等于該值的字段為查詢條
        件。 僅對查詢類form有效。

 以下為form中域的結構(dialog.f),域的數量可變。
 5.[類型] (dialog.item->flag)

標志符       用    途 數據類型    sqldatetype

(1) 輸入輸出項
 c、c       普通字符串                            char  char
  h          漢字      char  char
  r          日期(對字符串進行日期合法性檢查)     char  char
  a          帳號(對字符串有復制功能)             char  char
  p          密碼(不回顯)                         char  char
  g          選項      char  char
  f          幫助項                               char  char
  d、d       日期(自1899.12.31起至今的天數)       long  char
  m、m       金額                                 double        money, float
  n、n       數值                                 long  intger, smallint

  以上大寫的字符是輸入項、小寫的字符是輸出項。
 可在復合區指明表名和字段名, 形如table.field

 (2) 雜項
  t          提示
  f          菜單格式
  b          值域檢查(對上一項值進行檢查)
  b          數據庫(指定遠程數據庫),形式[email protected]
  l          標題
  i          菜單條目
  x          執行 sql語句
  -          連接符
  |          劃線符
  #          畫背景符
  w

       當無需指定表和字段時, 復合區前四位存入坐標, 后面的字符可作標題
       類型為 'l', 坐標=0, 則作表頭用。

 6.[長度]
 對輸出輸出項而言是數據長度;對雜項'|','#'是代表顏色。
 字符串數據長度<=128。
 金額的長度 <=16∶長度是小數點前和小數點后位數總數,小數點后定為二位。
        例∶長度=14,
        小數點前12位,小數點后2位。
 金額的長度 >=20∶
        個位是小數點后位數, 個位前是小數點前的位數。
        例∶長度=125,
        小數點前12位,小數點后5位。
 金額的長度 >=17and<20非法.


 7.[坐標]
 對一般的form后二位是橫坐標。前面是縱坐標;縱坐標<24。
 對于瀏覽器的坐標有特別規定:
 當坐標值大于2499∶ 后三位是橫坐標,前面是縱坐標。
 橫坐標的最大值512.
 例∶坐標值5150表示∶ 橫坐標=150,縱坐標=5。

 8.[嵌入函數]
 form中嵌入的函數指針編號,當程序執行完該域后,調用一個特定的函數,函數
        指針須初始化符值。

 9.[復合域]
 是多用途的域,可用作寫標題、sql語句、數據庫表名、字段名等。

四。實例講解(略)


    五。本系統的函數及運用

(一) 系統的定義∶

 宏及form結構    wform.h
 變量定義 wvai.h
 嵌套函數指針 fun.h


(二) 系統函數的調用:

    1. 菜單的調用: int setmenu(long id)
       id是主菜單的編號。
       返回值是反映程序執行到菜單第幾層的第幾項,祥見菜單制作.

    2. form的調用: int setupform(long id, short wincode)
       id是form的編號。
       wincode 是窗口的編號(0-9).
       如同時用多個窗口,窗口編號須不同,否則會覆蓋。
       返回值:
  0 取消 (即按[escape]退出)
  1 正常 (即按[enter] 退出)
  >1 按熱鍵或自定義鍵返回


                對某些特殊鍵和自定義鍵,即退出form,返回值如下∶

                鍵  名         返回碼

                借方鍵  debit 
                貸方鍵  credit
                向前鍵  previoes
                向后鍵  next
                熱鍵  hotkey
                發送鍵  finishkey
                自定義鍵        鍵值+2000

    3. 其他函數∶
 (1) int msgbox(char type, const char *fmt, .../* args */);
        用途∶信息提示。信息長度小于80在屏幕底線顯示,否則在當前光標下組成box.
        type∶msgerr(0) 錯誤 msgprom(1) 提示 msgwait(2) 等待 msgwarn(3) 警告
 用法同printf函數。

 (2) void setformpara(short mode, short para);
        用途∶設form參數。
        mode:
    宏          數值       作                    用
  winframe 0   para:1 窗口畫框  0 窗口無框  缺省值 0
  f_color         1   設定前景色   缺省值color_white(白色)
  b_color         2   設定背景色   缺省值color_black(黑色)
                                    具體色彩參數見 <tinfo.h>

  displaymode 3   para:1 預顯示原值
      0 不顯示
                                         缺省值 0

  fieldbound 4   para:1 對輸入項劃定界符 "[......]"
      0 不劃
      缺省值 1
  displaybold 5   para:1 顯示的字符為高亮
     缺省值 0
  enterdefault 6   para:1 輸入項只按[enter],復制成原值。
      缺省值 0
  linetype 7   para:1 雙線
      0 單線
      缺省值 1

  patternfront 8   para:1 運行菜單時,輸入的字符與菜單選項的
     第一個字符相同,能選中并自動回車。
             0 不能自動回車。
      缺省值 1
    
 (3) void touchform(short wincode)
        用途∶重顯被覆蓋的form.

        (4) int sqlmsg(short sqlcode)
        用途∶能提供錯誤信息,反映程序執行到何處(那個文件的那一行)。
       通常用于sql執行錯誤返回。
       
 (5) void deldlgwin(short wincode)
 用途∶刪除form.

 (6) int skipdomain(short step)
 用途∶跳過若干個域(step)。用于嵌入函數。

 (7) void rfmtdate(date i_date,  char *fmt,  char *result)
 用途∶將informix中的date轉成char.
 例∶
  1899.12.31至1999.12.4的天數是36132.
  rfmtdate(36132, "mm-dd-yyyy", result);
  result="12-04-1998"
  rfmtdate(36132, "mm-dd-yy", result);
  result="12-04-98"
  rfmtdate(36132, "日期: yyyy年mm月dd日", result);
  result="日期: 一九九八年十二月四日".

 (8) void rfmtdouble(double money, char *fmt, char *result)
 用途∶將double轉成char.
 例∶
  double a=-9030236.035;
  rfmtdate(a, "---,---,--9.999", result);
  result=" -9,030,236.035"

 (9) char *doubletostr(double money, const char *fmt);
 用途∶將double轉成char返回(char *).

 (10) void printform(short wincode, short lin, short col, char *fmt, ...);
 用途∶向form輸送字符.

 (11) int runfunction(int (*fun)(),  char *msg);
 用途∶運行函數fun時,在屏幕底顯示信息msg,隔一秒鐘跳動字符 '>'。 
 例∶
  見menu.ec的280行。
  runfunction(deletedetail, "正在清理數據");
  如果函數deletedetail()不在menu.ec中,
  必須聲明extern int deletedetail();

 (12) int callfunction(int (*fun)(),  char *msg);
 用途∶同runfunction(),不跳動字符。 

 (13) char *pntname();
 用途∶獲得打印輸出的設備名。
       在主控臺上得到"/dev/lp0",在終端上得到相應的終端號"/dev/tty???"  
 (14) void draws(window *w, int b_y, int b_x, int e_y, int e_x)
 用途∶在指定的窗口畫線。
       起點坐標(b_x, b_y)  終點坐標(e_x, e_y)  
       b_x=e_x  畫垂直線。  
       b_y=e_y  畫水平線。  
       b_x!=e_x b_y!=e_y  畫矩形。

        (15) int formpath(char *path);
 用途∶
              調用該函數設置form的參數的路徑, 確省路徑在配置文件中設定。
 (16) insetfun(n, fun);
 用途∶
      函數指針初始化。
             n 是函數指針的編號,fun是函數名.
          


(三) 關于嵌入函數的使用:
 作用∶當form執行到某一域時調用的函數.
 我們通過menu.ec這個程序來說明嵌入函數的運用。

****注意∶以下是test.form中的 110號form.

 [命令]  g [交易號]      110  [連接交易]       0 [驅動方式] e [索引項]  0  
 [序] [類型][長度][坐標][嵌入函數]   [      復         合          域      ]
   0    c       3  1237      0    bank.exchno                              
   1    c      20  1337      0    bank.officename                          
   2    r       8  1537      1                                             
   3    t       0     0      0    日期須本日前一星期內                     
   4    a       7  1737      0                                             
   5    m      10  1937      0                                             
   6    b       0     0      0                                             
   7    i       0     0      0    62.50                                    
   8    i       0     0      0    999999.99                                
   9    c       1  2137      0                                             
  10    b       0     0      0                                             
  11    i       0     0      0    [1,4]                                    
  12    l       0  1226      2    受 理 行                                 
  13    l       0  1326      0    行    名∶                               
  14    l       0  1526      0    憑證日期                                 
  15    l       0  1726      0    號    碼                                 
  16    l       0  1926      0    金    額                                 
  17    l       0  2126      0    聯    次                                 
  18    l       0  2224      0                                             

第 2、12域有嵌入函數∶1、2是函數指針的編號,分別代表函數checkdate()、pattern().
 函數指針初始化∶
   insetfun(1, checkdate);
   insetfun(2, pattern);
   見menu.ec中第217、218行。

 當程序執行完第 2域(即輸入日期),系統就調用函數checkdate(),以檢查日期
 是否本日至前一星期內,如日期正確函數返回 0,程序繼續執行; 如日期錯誤函
 數返回-1, 程序仍停止在第 2域。如函數返回-3程序退回到第 0域。
 設sn為程序執行的序號.
 ret=fun[n]();
 sn +=ret;
 你可根據需要函數返回值,如返回值為2,就會跳過2個域。

 當程序執行完第11域,系統就調用函數pattern(),進行憑證配對。

(四)關于form的值∶

 1.類型.

 類     型 變量名  宿主變量名 form編輯器的代名
 字符(char) chars(n)  $infstring[n]     $cn
 整型(long) number[n] $number[n]        $nn
 金額(double) money[n] $money[n]         $mn
 日期(long) date[n]  $date[n]          $dn
 
 注∶
            n是順序號
     chars(n)是宏,c語言中chars(n)、infstring[n]都可用;
     sql語言中只能用infstring[n],不能用宏chars(n);


 2.值的配置.

 系統根據配置動態申請內存,按你的需要調整系統配置(或修改form.cfg),
 確定值的個數.

 3.值的順序.

 用下例來說明∶

[序] [類型][長度][坐標]  對應的變量 注  解

  0    c       3  1237         chars(0) 'c'字符型第 1 次出現
  1    c      20  1337        chars(1) 'c'字符型第 2 次出現
  2    h       8  1537        chars(2) 'h'字符型第 3 次出現
  3    a       7  1737          chars(3) 'a'字符型第 4 次出現
  4    m      10  1937          money[0]        'm'金額型第 1 次出現
  5    b       0     0         控制類與變量無關  
  6    i       0     0         控制類與變量無關
  7    i       0     0         控制類與變量無關
  8    c      11  2120          chars(4) 'c'字符型第 5 次出現
  9    b       0     0         控制類與變量無關
 10    i       0     0         控制類與變量無關
 11    m      12  2126         money[1] 'm'金額型第 2 次出現
 12    f       1  2146          chars(5) 'f'字符型第 6 次出現
 13    i       0     0          控制類與變量無關
 14    i       0     0         控制類與變量無關
 15    n       6  2170          number[0] 'n'長整型第 1 次出現

 

   六。使用form的用戶環境

 用戶可設置以下環境變量
 (1)configpath: form的配置文件的路徑。缺省為 /usr/wform/etc/form.cfg
           form的參數的路徑在配置文件中設定。
        用戶的程序中可在啟動form前,調用formpath(char *path)設定路徑。

 (2)msgpath: 幫助項信息文件路徑。缺省為 /usr/wform/etc/form_msg.dat
 (3)netconfigfile:通訊的配置文件,適用于本系統網絡版,客戶及服務端都
          需要,缺省為 /usr/wform/etc/sys.net


   七。form生成器(mkform、netform)的使用

                          _.----..__.'
          _              /           -._
        __ ``-._ )      |   ||../// ./  /`-
      -'_ `-._ /( `-./ /   //            |/
    /-'' ``-._| /`-. .`.      / | |/ // | | /
    /_.---.__.|  `_/``' `-..-'_/_/ /_/ |///   /
       _..--'/  /' -._     .'"(@ `  @`/-._ /    /
      (     '  //  `-.`   `(|     _' ;`-. ` `_   `.
          /   /  ``-._    _.'|  _ ` ,' '_.-`    .'
         /   /-------- ``'-~-'   `;`~'``     . '
        '._                //     ` // / . '
            ```` --- ..  -.  //        //'
                       `/  /  //         //
                         `. |  ||  .     ||    ┏━━━━━選擇━━━━━┓
                           / . || .'  `-||     ┃  v 全屏幕編輯_______(0)┃
                            / `||'     ;||     ┃  t 交易式演示程序___(1)┃
                             ;||      '//      ┃  m 菜單式演示程序___(2)┃
                           _; ||      //    [ ]┃  d 顯示系統配置_____(3)┃
                          /.``||..__.-;        ┃  a 調整系統配置_____(3)┃
                       .'`  ``-._|_|.-|        ┃  s 清理form_________(5)┃
                      /               ;        ┃  p 改變form參數路徑_(6)┃
                     ;                ;        ┃  l 登記注冊_________(7)┃
                     ;               ;        ┃  e 退出_____________(8)┃
                    ;                ,'        ┗━━━━━━━━━━━━┛

                 ------------ 圖10 --------------
(一)運行mkform(或netform)
 mkform的用法∶mkform -d database -f filename
 1.打開數據庫∶ -d database 可省略(不訪問數據庫)。
 2.指定form參數文件名∶-f filename 如省略則按系統配置文件中指定的路徑。

 mkform與netform的主要區別:mkform對遠程數據庫的訪問是利用了informix本
身的功能,也就是由sqlexecd提供服務;netform訪問數據庫的服務程序(net_server)由
作者編寫,在數據安全方面進行了控制,所以在運行netform的同時,必須啟動net_server
服務程序。

(二)菜單功能

    當你運行mkform時,就出現圖10,下面就菜單的功能逐一介紹∶

 1. v 全屏幕編輯
           進入form的編輯、定制程序。(祥見以下關于form編輯的一章)。

 2. t 交易式演示程序
    演示以交易碼驅動的程序。

 3. m 交易式演示程序
    演示以菜單驅動的程序。

        4. d 顯示系統配置(圖11)
    配置文件的路徑由環境變量configpath指定,缺省為 /usr/wform/etc/form.cfg
   

┏━━━━━━━━━━━   系   統   配   置    ━━━━━━━━━━━┓
┃          0. form參數路徑: ../data/demo.form                        ┃
┃          1. 編緝命令:     /usr/bin/vi                              ┃
┃                                                                    ┃
┃          2. 字符型(char)個數:    50     3. 數值型(long)個數:  10   ┃
┃          4. 金額型(double)個數:  10     5. 日期型(date)個數:   8   ┃
┃                                                                    ┃
┃          6. 菜單最大項數: 100                                      ┃
┃             主菜單格式:  ( 7.  2    8.   5 )                       ┃
┃             子菜單格式:  ( 9. 12   10.   1 )                       ┃
┃                                                                    ┃
┃          11.雙零鍵:  46                12.四零鍵:  47              ┃
┃          13.五零鍵:  42                14.六零鍵:  45              ┃
┃          15.借方鍵:   3                16.貸方鍵:   4              ┃
┃          17.向前鍵:  91                18.向后鍵:  93              ┃
┃          19.熱  鍵:  26                20.發送鍵:  10              ┃
┃                                                                    ┃
┃                         選擇: [  ] (esc取銷)                       ┃
┃                                   ┃ 
┃                                                                    ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛     
                                                                   
                 ------------ 圖11 --------------


        5. a 調整系統配置
           只有root用戶才能調整系統配置。

           編緝命令: 編輯form所調用的文本編輯程序。

           主菜單格式:  ( 7.  2    8.   5 ) 
           該項配置說明主菜單格式是 2行, 5列。
           選擇第 7項修改行數,選擇第 8項修改列數。
         
           子菜單格式:  ( 9. 12   10.   1 )
           該項配置說明主菜單格式是12行, 1列。
           選擇第 9項修改行數,選擇第10項修改列數。

        6. s 清理form
           對作廢和刪除的form定期清理。 

        7. p 改變form參數路徑
           form參數路徑在mkform啟動時或系統配置文件中指定,如果你需要其他的form
           參數文件可由此選項改變。
           
        8. l 登記注冊。
        9. e 退出系統。


 (三)關于form編輯

 在圖10中的菜單選第 0項,就進入圖12。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [命令]    ┏━━━━━━━┓ [連接交易]       0 [驅動方式]   [索引項]      ┃
┃ [序] [類型┃a 進入___(00) ┃函數]   [      復         合          域      ]┃
┃   0       ┃e 退出___(01) ┃                                               ┃
┃   1       ┃g 取數___(02) ┃                                               ┃
┃   2       ┃h 幫助___(03) ┃                                               ┃
┃   3       ┃s 演示___(04) ┃                                               ┃
┃   4       ┃u 恢復___(05) ┃                                               ┃
┃   5       ┃d 設計___(06) ┃                                               ┃
┃   5       ┃v 編輯___(07) ┃                                               ┃
┃   6       ┃w 存盤___(08) ┃                                               ┃
┃   7       ┃f 單選___(09) ┃                                               ┃
┃   8       ┃d 刪除___(10) ┃                                               ┃
┃   9       ┗━━━━━━━┛                                               ┃
┃  10                                                                        ┃
┃  11                                                                        ┃
┃  12                                                                        ┃
┃  13                                                                        ┃
┃  14                                                                        ┃
┃  15                                                                        ┃
┃  16                                                                        ┃
┃  17                                                                        ┃
┃  18                                                                        ┃
┃  19                                                                        ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
                         ------------ 圖12 ------------

 圖12中的命令菜單功能∶

          1. a 進入本系統的form編輯器,編輯的窗口每屏是20項,共 5屏;
             當光標到最后一行,再按↓鍵,就可翻到下一屏。

          2. e 退出本編輯器。

          3. g 取數
             輸入交易號就可讀到此交易的form參數。

          4. h 幫助
             顯示文本/usr/wform/etc/readme.frm.

          5. s 演示form
             輸入交易號就可此交易的form框架,演示輸入、查詢的過程。

          6. u 恢復被誤刪除的form.

          7. d 設計
             利用unix編輯工具,對form進行初步的定制。具體的方法詳見form的定制。

          7. v 編緝
             利用unix編輯工具,對form的參數進行設定。具體的方法詳見form的編輯。
 
          9. w 存盤
             將編輯或修改完的form存入文件。原來同號的form被作廢,故需定期清理
             form。
          
         10. f 單選
             可單獨選出一個指定的form參數,文件名"./f????", ?表示form號。
             作用∶有些form的功能通用,可移到其他用戶的form參數文件中。
             移值方法∶ cat f??? >> other.form

         11. d 刪除
             對棄用的form進行刪除。


(四)form的定制:
        
          1. 利用unix編輯工具,對form進行初步的定制。
             (1) 選命令 v,輸入交易號,(假設交易號是88)。系統就調用unix編輯工具
                 (如vi),生成文本/tmp/form88,在文本在寫的內容如下∶

        序號            文         本        內         容
           1
           2
           3
           4
           5                          記       帳
           6
           7
           8                   帳  號∶ $a12
           9
          10                   憑證號∶ $n6
          11                 
          12                   摘  要∶ $c10
          13    
          14                   金  額∶ $m12

                         ------------ 圖13 ------------

                在'$'符后的字符是類型,類型后的數字是長度。  
                將該文本存盤退出后,即返回系統畫面,系統根據文本內容及各個域的
                坐標,在內存生成結構為dialog的form,見圖14.

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ [命令]  g [交易號]       88  [連接交易]       0 [驅動方式]   [索引項]  0   ┃
┃ [序] [類型][長度][坐標][嵌入函數]   [      復         合          域      ]┃
┃   0    a      12   739      0                                              ┃
┃   1    n       6   939      0                                              ┃
┃   2    c      10  1139      0                                              ┃
┃   3    m      12  1339      0                                              ┃
┃   4    l       0   437      0    記       帳                               ┃
┃   5    l       0   730      0    帳  號∶                                  ┃
┃   6    l       0   930      0    憑證號∶                                  ┃
┃   7    l       0  1130      0    摘  要∶                                  ┃
┃   8    l       0  1330      0    金  額∶                                  ┃
┃   9            0     0      0                                              ┃
┃  10            0     0      0                                              ┃
┃  11            0     0      0                                              ┃
┃  12            0     0      0                                              ┃
┃  13            0     0      0                                              ┃
┃  14            0     0      0                                              ┃
┃  15            0     0      0                                              ┃
┃  16            0     0      0                                              ┃
┃  17            0     0      0                                              ┃
┃  18            0     0      0                                              ┃
┃  19            0     0      0                                              ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
                         ------------ 圖14 ------------
                

       用命令 w存盤,再用命令 s進行演示,見圖15。如果對form不滿意,可通過對
       文本修改或直接修改form,直至滿意。

   ┏━━━━━━━━━━━━━━┓
   ┃       記       帳          ┃
   ┃                            ┃
   ┃                            ┃
   ┃帳  號∶[            ]      ┃
   ┃                            ┃
   ┃憑證號∶[      ]            ┃
   ┃                            ┃
   ┃摘  要∶[          ]        ┃
   ┃                            ┃
   ┃金  額∶[                 ] ┃
   ┗━━━━━━━━━━━━━━┛
                         ------------ 圖15 ------------
  
(五)form的編輯:
        用unix編輯只是form的初步定制,它只能對標題、數據的輸入、顯示域進行定義。
        而對[連接交易]、[驅動方式]、[索引項]、[嵌入函數]以及菜單、數據庫的表名、        字段名等等,需本系統提供的編輯功能或直接用vi編輯。

 方法一____系統提供的編輯功能:
        (1) 用命令 a進入,用光標鍵移到需改動的域。
        (2) 行的復制功能.
            把a 行開始的n 條復制到b 行上,方法如下∶
            將光標移至a 行按f2鍵,再按要復制的條數n,再將光標移到b行按 f2鍵。
            連續按兩次f2,可在原行下復制一行。
        (3) 行的插入功能.
            按[insert]鍵,可增加一行空行。
        (4) 行的刪除功能.
            將刪除行的類型改為空格,存盤時,會剔除該行。
        (5) 復合域的編輯功能。
            f1鍵向右移,[backspace]鍵向左移。
            命令切換鍵f3或[delete],x刪除字符,i插入字符,功能同vi.

 方法二___利用vi編輯功能:
 (1) 用命令 v進入、再輸入form號。
        (2) 如form是新建的,系統生成一個帶有說明和一定格式的文本(見圖16),由您
            填寫編輯。
            如form已存在,系統生成一個帶有原form參數的文本,由您修改。


 [交易號]    120 [連接交易]       0 [驅動方式] b  [索引項]     3
   [類型][長度][坐標][嵌入函數]   [      復         合          域      ]
~~提示:以下值的橫坐標必須在對應字段的區域內(以'[]'為界),否則無效!空缺值為零~~

                         ------------ 圖16 ------------


    九。演示程序

演示程序menu、trade的功能相同;共用數據庫test、form參數文件test.form.
你可閱讀menu.ec、trade.ec中是如何調用本系統函數的;
你還可參考./menu/makefile、mknet ./trade/makefile、mknet;

                                十。有關網絡版

所謂網絡版就是在原版的基礎上, 將程序分為前臺程序(界面控制程序)和后臺程序 (數據服
務器),  前臺把form中涉及數據數據庫的form, 組織成sql語句通過網絡傳給后臺,  后臺把
sql 的著執行結果返回前臺, 如圖16所示:

         
     ┏━━━━━┓       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 服務進程超過限定的數目。

 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 百色市| 陇南市| 宜春市| 永泰县| 虹口区| 山东省| 咸宁市| 乌审旗| 胶南市| 普定县| 平顺县| 津市市| 西畴县| 城市| 崇信县| 东丰县| 棋牌| 永吉县| 鄢陵县| 兴和县| 界首市| 扶风县| 手机| 乌拉特中旗| 蓬安县| 满城县| 大港区| 新疆| 揭东县| 陕西省| 英吉沙县| 精河县| 临湘市| 绥芬河市| 全椒县| 噶尔县| 津南区| 泾阳县| 安仁县| 新密市| 泉州市|