仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 852|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL编程:UNIX体系下informix便宜开辟东西构想介...

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。unix
前言

以后WINDODS上的编程工具一日千里,新陈代谢;但是因UNIX使用的范围性,其编程工
具非常枯窘。在UNIX上要做画面、菜单、查询、输出,编程者常常要从底层动手,反复休息
,效力极低。笔者为懂得决这个成绩而尽点力,将本体系先容给您,如您能读完本文,劳绩
必定很多。

编者:王光红

EMAIL:wgh166@hotmail.com
wghsoftware@hotmail.com

软件下载:
http://www.csdn.net/cnshare/soft/16/16735.shtm
http://www.ccrun.com/program/down.asp?id=10


一。体系介简

(一)完成功效∶
用于UNIX上做画面、菜单、查询、输出、修正;可操纵数据库。

(二)计划思绪∶
将人机对话,可分为基础的输出与输入两年夜类,在此条件下,为了分歧的必要把域分作
多品种型;对触及数据库的域指明有关的表名、字段名,以举行数据库的读写。将这些
分歧功效的域无机的组合在一个FORM中,来完成一个功效模块。将FORM编号,按必定的
布局以二进制的情势存进文件,在利用时,体系按编号读进FORM的数据,按步完成预定
的功效。

(三)软件情况∶
1.操纵体系SCOUNIXOpenServer5.0、SCOUNIXOpenServer3.0、SCOUNIX3.0。
2.编程言语C、INFORMIX/ESQL。
申明∶笔者的事情前提仅限于以上情况,如能供应其他的UNIX、SQL数据库(如ORACLE、
SYBASE等),体系只需略加修正。


二。体系的文件与库

(一)集成开辟器实行程序∶
/usr/wform/bin/mkformFORM的定制工具
/usr/wform/bin/netformFORM的定制工具(收集版)
/usr/wform/bin/net_serverFORM的数据服务器

(二)设置文件∶
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在SCOUNIXOpenServer5.0上天生。
/usr/wform/lib/libnetform.a在SCOUNIXOpenServer5.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的布局:

typedefstruct_item_st_{
charflag;//数据范例(或标记)
charlen;//数据长度
charseat_y;//纵坐标
shortseat_x;//横坐标
charfun;//FORM中嵌进的函数指针编号
charfield[41];//复合域
}Item;

typedefstructtagOfDialog{
unsignedlongform_id;//买卖号
unsignedlonglink_form;//毗连买卖
charmode;//驱动体例
charkey;//索引项
shortnum;//以下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一般字符串charchar
H汉字charchar
R日期(对字符串举行日期正当性反省)charchar
A帐号(对字符串有复制功效)charchar
P暗码(不回显)charchar
G选项charchar
F匡助项charchar
D、d日期(自1899.12.31起至今的天数)longchar
M、m金额doublemoney,float
N、n数值longintger,smallint

以上年夜写的字符是输出项、小写的字符是输入项。
可在复合区指明表名和字段名,形如table.field

(2)杂项
t提醒
f菜单格局
B值域反省(对上一项值举行反省)
b数据库(指定远程数据库),情势database@host
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.菜单的挪用:intSetMenu(longid)
id是主菜单的编号。
前往值是反应程序实行到菜单第几层的第几项,祥见菜单制造.

2.FORM的挪用:intSetupForm(longid,shortwincode)
id是FORM的编号。
wincode是窗口的编号(0-9).
好像时用多个窗口,窗口编号须分歧,不然会掩盖。
前往值:
0作废(即按[ESCAPE]加入)
1一般(即按[ENTER]加入)
>1按热键或自界说键前往


对某些特别键和自界说键,即加入FORM,前往值以下∶

键名前往码

借方键DEBIT
贷方键CREDIT
向前键PREVIOES
向后键NEXT
热键HOTKEY
发送键FINISHKEY
自界说键键值+2000

3.其他函数∶
(1)intMsgBox(chartype,constchar*fmt,.../*args*/);
用处∶信息提醒。信息长度小于80在屏幕底线显现,不然在以后光标下构成BOX.
type∶MSGERR(0)毛病MSGPROM(1)提醒MSGWAIT(2)守候MSGWARN(3)告诫
用法同printf函数。

(2)voidSetFormPara(shortmode,shortpara);
用处∶设FORM参数。
mode:
宏数值作用
WINFRAME0para:1窗口画框0窗口无框缺省值0
F_COLOR1设定远景色缺省值COLOR_WHITE(红色)
B_COLOR2设定背景致缺省值COLOR_BLACK(玄色)
详细色采参数见<tinfo.h>

DISPLAYMODE3para:1预显现原值
0不显现
缺省值0

FIELDBOUND4para:1对输出项规定界符"[......]"
0不划
缺省值1
DISPLAYBOLD5para:1显现的字符为高亮
缺省值0
ENTERDEFAULT6para:1输出项只按[ENTER],复制成原值。
缺省值0
LINETYPE7para:1双线
0单线
缺省值1

PATTERNFRONT8para:1运转菜单时,输出的字符与菜单选项的
第一个字符不异,能选中并主动回车。
0不克不及主动回车。
缺省值1

(3)voidTouchForm(shortwincode)
用处∶重显被掩盖的FORM.

(4)intSqlMsg(shortsqlcode)
用处∶能供应毛病信息,反应程序实行到那边(谁人文件的那一行)。
一般用于SQL实行毛病前往。

(5)voidDelDlgwin(shortwincode)
用处∶删除FORM.

(6)intSkipDomain(shortstep)
用处∶跳过多少个域(step)。用于嵌进函数。

(7)voidRfmtdate(datei_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)voidRfmtdouble(doublemoney,char*fmt,char*result)
用处∶将double转成char.
例∶
doublea=-9030236.035;
Rfmtdate(a,"---,---,--9.999",result);
result="-9,030,236.035"

(9)char*DoubleToStr(doublemoney,constchar*fmt);
用处∶将double转成char前往(char*).

(10)voidPrintForm(shortwincode,shortlin,shortcol,char*fmt,...);
用处∶向FORM保送字符.

(11)intRunFunction(int(*fun)(),char*msg);
用处∶运转函数fun时,在屏幕底显现信息msg,隔一秒钟跳动字符>。
例∶
见menu.ec的280行。
RunFunction(DeleteDetail,"正在清算数据");
假如函数DeleteDetail()不在menu.ec中,
必需声明externintDeleteDEtail();

(12)intCallFunction(int(*fun)(),char*msg);
用处∶同RunFunction(),不跳动字符。

(13)char*PntName();
用处∶取得打印输入的设备名。
在主控台上失掉"/dev/lp0",在终端上失掉响应的终端号"/dev/tty???"
(14)voidDraws(WINDOW*w,intb_y,intb_x,inte_y,inte_x)
用处∶在指定的窗口画线。
出发点坐标(b_x,b_y)尽头坐标(e_x,e_y)
b_x=e_x画垂直线。
b_y=e_y画程度线。
b_x!=e_xb_y!=e_y画矩形。

(15)intFormPath(char*path);
用处∶
挪用该函数设置FORM的参数的路径,确省路径在设置文件中设定。
(16)InsetFun(n,fun);
用处∶
函数指针初始化。
n是函数指针的编号,fun是函数名.



(三)关于嵌进函数的利用:
感化∶当FORM实行到某一域时挪用的函数.
我们经由过程menu.ec这个程序来讲明嵌进函数的使用。

****注重∶以下是test.form中的110号form.

[命令]g[买卖号]110[毗连买卖]0[驱动体例]E[索引项]0
[序][范例][长度][坐标][嵌进函数][复合域]
0C312370bank.exchno
1c2013370bank.officename
2R815371
3t000日期须今天前一礼拜内
4A717370
5M1019370
6B000
7i00062.50
8i000999999.99
9C121370
10B000
11i000[1,4]
12l012262受理行
13l013260行名∶
14l015260凭据日期
15l017260号码
16l019260金额
17l021260联次
18l022240

第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.值的按次.

用下例来讲明∶

[序][范例][长度][坐标]对应的变量注解

0C31237Chars(0)C字符型第1次呈现
1c201337Chars(1)c字符型第2次呈现
2H81537Chars(2)H字符型第3次呈现
3A71737Chars(3)A字符型第4次呈现
4M101937Money[0]M金额型第1次呈现
5B00把持类与变量有关
6i00把持类与变量有关
7i00把持类与变量有关
8c112120Chars(4)c字符型第5次呈现
9B00把持类与变量有关
10i00把持类与变量有关
11m122126Money[1]m金额型第2次呈现
12F12146Chars(5)F字符型第6次呈现
13i00把持类与变量有关
14i00把持类与变量有关
15N62170Number[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)┃
;,┗━━━━━━━━━━━━┛

------------0--------------
(一)运转mkform(或netform)
mkform的用法∶mkform-ddatabase-ffilename
1.翻开数据库∶-ddatabase可省略(不会见数据库)。
2.指定FORM参数文件名∶-ffilename如省略则按体系设置文件中指定的路径。

mkform与netform的次要区分:mkform对远程数据库的会见是使用了informix本
身的功效,也就是由sqlexecd供应服务;netform会见数据库的服务程序(net_server)由
作者编写,在数据平安方面举行了把持,以是在运转netform的同时,必需启动net_server
服务程序。

(二)菜单功效

当你运转mkform时,就呈现0,上面就菜单的功效一一先容∶

1.V全屏幕编纂
进进FORM的编纂、定制程序。(祥见以下关于FORM编纂的一章)。

2.T买卖式演示程序
演示以买卖码驱动的程序。

3.M买卖式演示程序
演示以菜单驱动的程序。

4.D显现体系设置(1)
设置文件的路径由情况变量CONFIGPATH指定,缺省为/usr/wform/etc/form.cfg


┏━━━━━━━━━━━系统配置━━━━━━━━━━━┓
┃0.FORM参数路径:../data/demo.form┃
┃1.主笔命令:/usr/bin/vi┃
┃┃
┃2.字符型(char)个数:503.数值型(long)个数:10┃
┃4.金额型(double)个数:105.日期型(date)个数:8┃
┃┃
┃6.菜单最年夜项数:100┃
┃主菜单格局:(7.28.5)┃
┃子菜单格局:(9.1210.1)┃
┃┃
┃11.双零键:4612.四零键:47┃
┃13.五零键:4214.六零键:45┃
┃15.借方键:316.贷方键:4┃
┃17.向前键:9118.向后键:93┃
┃19.热键:2620.发送键:10┃
┃┃
┃选择:[](Esc取消)┃
┃┃
┃┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

------------1--------------


5.A调剂体系设置
只要root用户才干调剂体系设置。

主笔命令:编纂FORM所挪用的文本编纂程序。

主菜单格局:(7.28.5)
该项设置申明主菜单格局是2行,5列。
选择第7项修正行数,选择第8项修正列数。

子菜单格局:(9.1210.1)
该项设置申明主菜单格局是12行,1列。
选择第9项修正行数,选择第10项修正列数。

6.S清算FORM
对取消和删除的FORM按期清算。

7.P改动FORM参数路径
FORM参数路径在mkform启动时或体系设置文件中指定,假如你必要其他的FORM
参数文件可由此选项改动。

8.L挂号注册。
9.E加入体系。


(三)关于FORM编纂

在0中的菜单选第0项,就进进2。

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃[命令]┏━━━━━━━┓[毗连买卖]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┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
------------2------------

2中的命令菜单功效∶

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参数文件中。
移值办法∶catf???>>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

------------3------------

在$符后的字符是范例,范例后的数字是长度。
将该文本存盘加入后,即前往体系画面,体系依据文本内容及各个域的
坐标,在内存天生布局为Dialog的FORM,见4.

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃[命令]g[买卖号]88[毗连买卖]0[驱动体例][索引项]0┃
┃[序][范例][长度][坐标][嵌进函数][复合域]┃
┃0A127390&n线上或者测试环境经常出现的误操作总是让DBA同学那么闹心。
小魔女 该用户已被删除
沙发
发表于 2015-1-19 13:40:57 | 只看该作者
大家注意一点。如下面的例子:
分手快乐 该用户已被删除
板凳
发表于 2015-1-26 22:19:25 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-4 21:50:14 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
柔情似水 该用户已被删除
5#
发表于 2015-2-10 19:25:50 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
山那边是海 该用户已被删除
6#
发表于 2015-3-10 19:29:08 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
莫相离 该用户已被删除
7#
发表于 2015-3-17 09:11:07 | 只看该作者
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
谁可相欹 该用户已被删除
8#
发表于 2015-3-24 05:35:51 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 02:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表