首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
SQL数据类型及操作符,AdvStringGrid使用技巧
发布时间:2019-12-25 16:23
浏览次数:

SQL简介

Oracle中可以配多个数据库,并只需要开启一个侦听器就可以了,对多个数据库只要配置相应的服务命名就可以连接了。

标量(scalar)数据类型 标量(scalar)数据类型没有内部组件,他们大致可分为以下四类: . number . character . date/time . boolean 表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。 表1 Scalar Types:NumericDatatypeRangeSubtypesdescriptionBINARY_INTEGER-214748-2147483647NATURALNATURALNPOSITIVEPOSITIVENSIGNTYPE 用于存储单字节整数。要求存储长度低于NUMBER值。用于限制范围的子类型(SUBTYPE): NATURAL:用于非负数 POSITIVE:只用于正数 NATURALN:只用于非负数和非NULL值 POSITIVEN:只用于正数,不能用于NULL值 SIGNTYPE:只有值:-1、0或1.NUMBER1.0E-130-9.99E125DECDECIMALDOUBLE PRECISIONFLOAT INTEGERICINTNUMERICREALSMALLINT

原理就是先声明常量,包括列数,行数,各列的属性,然后在程序的其它过程用这些常量来控制Cells。非常方便,便于修改和移植! 以下为窗体整体代码,中间有说明。此段代码不光有动态AdvStringGrid的完美示例,还有一般窗体的常用的过程,比较窗体初始化,刷新过程。 此窗体,只需要简单准备如下,即可运行: 1,添加一个TAdvStringGrid,并命名为strGrid1。 2,设置:TAdvStringGrid--option--goEditing=true TAdvStringGrid--enableGraphics=true 3,修改Form名称为form1,或替换以下代码中的form1为当前窗体的名字。 4,将以下代码覆盖原来的代码。 5,关联以下过程(只需要在窗体和strGrid1控件属性-事件页中双击相关项即可完成关联。) FormCreate FormShow strGrid1CanEditCell strGrid1GetAlignment strGrid1GetCellColor strGrid1GetEditorType 代码如下:unit ENMA0101; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, AdvGrid; const cUnit_ID='ENMA0101'; //声明常量,保存单元名称 //声明常量,用于保存Cells的列数 cColQty1=8; //声明常量数组,保存Cells的各种属性,各种属性含义如下: {0-显示 1-编辑 2-必输 3-类型 4-对齐 5-颜色 6-宽度 7-标题 8-是否从数据库中读取 9-数据表名称 10-字段名 11-字段长度 12-文本中读取 13-文本中位置 } cColProp1: array[0..cColQty1-1] of array[0..13] of string=( //列属性 //显示编辑必输类型对齐 颜色 宽度 标题 // 0 1 2 3 4 5 6 7 8 9 10 11 ('Y','N','N','E','R','clBtnFace','25','NO.','N','','','0','N','0'), // 0 ('Y','N','N','E','L','clInfoBk','150','Part No','Y','POJBSUB','PART_NO','30','Y','2'), // 1 ('Y','Y','N','E','R','clWindow','60','Qty','Y','POJBSUB','ORDER_QUANTITY','9','Y','3'), // 2 ('Y','N','N','E','C','clMoneyGreen','40','U/M','Y','POJBSUB','UNIT_OF_MEASURE','2','Y','4'), // 3 ('Y','Y','N','C','C','clWindow','60','Dept','Y','POJBSUB','DELIVERY_TO_DEPT','3','Y','5'), // 4 ('Y','Y','N','C','C','clWindow','50','Grp','Y','POJBSUB','GROUP_A','3','Y','7'), // 5 ('Y','N','N','E','L','clSkyBlue','160','Part Name','Y','POJBSUB','PART_NAME_C','70','Y','8'), // 6 ('Y','Y','N','M','L','clWindow','50','DF','Y','POJBSUB','VENDOR_NO','5','Y','6') // 7 ); //声明常量,定义列号,便于修改与引用 cC1NO=0; cC1PART_NO=1; cC1ORDER_QUANTITY=2; cC1UNIT_OF_MEASURE=3; cC1DELIVERY_TO_DEPT=4; cC1GROUP_A=5; cC1PART_NAME_C=6; cC1Data_Flag=7; type TForm1 = class(TForm) strGrid1: TAdvStringGrid; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure strGrid1CanEditCell(Sender: TObject; ARow, ACol: Integer; var CanEdit: Boolean); procedure strGrid1GetAlignment(Sender: TObject; ARow, ACol: Integer; var AAlignment: TAlignment); procedure strGrid1GetCellColor(Sender: TObject; ARow, ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont); procedure strGrid1GetEditorType(Sender: TObject; ACol, ARow: Integer; var AEditor: TEditorType); private { Private declarations } procedure prClear(pMode:byte); procedure prRefresh(pMode: byte); procedure prStgInitialize1; procedure prStg1Clear; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //窗体创建时执行代码 procedure TForm1.FormCreate(Sender: TObject); Var i,j:integer; begin //设定行数最大值,用于设置CheckedBox strGrid1.RowCount:=1000; //设置cColProp1[3,J]='C'的单元格为CheckedBox格式 for i:=1 to strGrid1.rowcount-1 do begin //通过以下属性数组设置未通过,当两列checkbox时,只能设置一列。 {for j:=0 to cColQty1-1 do begin if cColProp1[3,J]='C' then strGrid1.AddCheckBox(j,i,false,false); end;} //改为以下方式直接定义。 strGrid1.AddCheckBox(4,i,false,false); strGrid1.AddCheckBox(5,i,false,false); end; end; //窗体显示时执行代码 procedure TForm1.FormShow(Sender: TObject); begin form1.caption:= cUnit_ID + ' ' + form1.caption; prClear(0); end; //窗体清空代码 procedure TForm1.prClear(pMode:byte); begin case pMode of 0:begin prStgInitialize1; end; 1:begin prStg1Clear; end; end; //其它清空内容 end; //窗体刷新代码 procedure Tform1.prRefresh(pMode: byte); begin //窗体刷新内容 end; //AdvStringGrid初始化过程 procedure TForm1.prStgInitialize1; Var I:Integer; begin //设定零件表初始行数和列数 strGrid1.RowCount:=2; strGrid1.ColCount:=cColQty1; strGrid1.FixedRows:=1; strGrid1.FixedCols:=1; //设定列宽度和列标题 for I:=0 to cColQty1-1 do begin strGrid1.Cells[I,0]:=cColProp1[I,7]; //标题 if cColProp1[I,0]='Y' then strGrid1.ColWidths[I]:=strToInt(cColProp1[I,6]) //列宽 else strGrid1.ColWidths[I]:=0; //列宽 end; end; //AdvStringGrid清空过程 procedure TForm1.prStg1Clear; Var I:integer; J:integer; begin for I:=1 to strGrid1.RowCount-1 do begin for J:=0 to cColQty1-1 do begin strGrid1.Cells[J,I]:=''; strGrid1.SetCheckBoxState(J,I,false); end; end; strGrid1.RowCount:=2; end; //设定单元表各列是否可以编辑 procedure TForm1.strGrid1CanEditCell(Sender: TObject; ARow, ACol: Integer; var CanEdit: Boolean); Var I:integer; begin //直接定义 {if stgPList.Cells[cNCols1[3]-2,ARow]='1' then CanEdit:=false else begin if ACol=cNCols1[2]-2 then CanEdit:=true else CanEdit:=false; end;} {if aRow=0 then CanEdit:=false else if} //用属性数组定义 for I:=0 to cColQty1 do begin if ACol=I then begin if cColProp1[I,1]='Y' then CanEdit:=true; if cColProp1[I,1]='N' then CanEdit:=False; end; end; //以下代码首先根据列cC1Data_Flag的值设定一行是否可以编辑,然后再根据属性数组设定。 {if (strGrid1.cells[cC1Data_Flag,ARow]='') or (strGrid1.cells[cC1Data_Flag,ARow]='C') then begin canEdit:=false; exit; end else begin for I:=0 to cColQty1 do begin if ACol=I then begin if strGrid1.cells[cC1Data_Flag,aRow]='C' then CanEdit:=false else begin if cColProp1[I,1]='Y' then CanEdit:=true; if cColProp1[I,1]='N' then CanEdit:=False; end; end; end; end;} end; //设定单元表各列对齐方式 procedure TForm1.strGrid1GetAlignment(Sender: TObject; ARow, ACol: Integer; var AAlignment: TAlignment); Var I:integer; begin //直接定义 {if ARow=0 then AAlignment:=tacenter else begin case ACol of 0: AAlignment:=taRightJustify; 1: AAlignment:=taCenter; 2: AAlignment:=taCenter; 3: AAlignment:=taRightJustify; 4: AAlignment:=taCenter; 6: AAlignment:=taCenter; 8: AAlignment:=taCenter; 9: AAlignment:=taCenter; else AAlignment:=taLeftJustify; end; end; } //用属性数组定义 if ARow=0 then AAlignment:=taCenter else begin for I:=0 to cColQty1-1 do begin if ACol=I then begin //case strToInt(cColProp1[I,4]) if cColProp1[I,4]='C' then AAlignment:=taCenter; if cColProp1[I,4]='L' then AAlignment:=taLeftJustify; if cColProp1[I,4]='R' then AAlignment:=taRightJustify; end; end; end; end; //设定单元表各列颜色 procedure TForm1.strGrid1GetCellColor(Sender: TObject; ARow, ACol: Integer; AState: TGridDrawState; ABrush: TBrush; AFont: TFont); Var I:integer; begin //直接定义 {if ARow0 then begin Case ACol of 1: ABrush.Color:=RGB(227,249,248); 2: ABrush.Color:=RGB(250,232,193); 3: ABrush.Color:=RGB(227,249,248); 4: ABrush.Color:=RGB(250,232,193); 12: ABrush.Color:=RGB(227,249,248); 14: ABrush.Color:=RGB(250,232,193); 24: ABrush.Color:=RGB(227,249,248); 48: ABrush.Color:=RGB(250,232,193); 51: ABrush.Color:=RGB(227,249,248); End; end;} //用属性数组定义 if ARow=0 then abrush.Color:=clBtnFace // 首行为灰色 else begin for I:=0 to cColQty1 do begin // 非首行按属性数组设置颜色 if ACol=I then abrush.Color:=StringToColor(cColProp1[I,5]); end; end; end; //设定单元表各列控件类型 procedure TForm1.strGrid1GetEditorType(Sender: TObject; ACol, ARow: Integer; var AEditor: TEditorType); Var I:integer; begin for I:=0 to cColQty1 do begin if ACol=I then begin if cColProp1[I,3]='M' then begin AEditor:=edComBoEdit; strGrid1.ClearComboString; strGrid1.AddComboString('Y : 同意'); strGrid1.AddComboString('N : 拒绝'); end; end; end; end; end. (以上过程在Delphi6中测试通过。) 这样,如果修改Cells相关的属性,只需要修改数组cColProp1相关的值就可以实现了,很方便的。 关于修改cColProp1,你可以直接在上面的代码窗口中修改,但如果列相当多的话,这样改起来也是相当麻烦的,而且容易改错,也是不方便的! 对此,我做了一个excel模板:动态Cells设定工具表,如附件。 通过这个模板,可以自动生成静态数组cColProp1和静态列号,修改起来也很直观,很方便。 修改后,将生成的静态数组cColProp1和静态列号复制到代码里即可。 动态Cells设定工具表 _Setting.xls


我用的是Oracle 8.1.7 Enterprise Edition,OS是Windows 2000 Server,我把我的配置过程和情况图解说明一下,和大家共同探讨。

存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:number[]。缺省的精度是38,scale是0.

SQL 是用于访问和处理数据库的标准的计算机语言。

第一步:用Net8 Configuration Assistant工具配置监听器,一直点下一步,最后完成即可!监听地址一般配成默认的1521就可以了。

PLS_INTEGER-2147483647-2147483647与BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能 。


也可以用Net8 Assistant工具来验证或配置监听器,如下图,可以配置主机和端口。

NUMBER 数字型 能存放整数值和实数值,并且可以定义精度和取值范围 BINARY_INTEGER 数字型 可存储带符号整数,为整数计算优化性能 DEC 数字型 NUMBER的子类型,小数 DOUBLE PRECISION 数字型 NUMBER的子类型,高精度实数 INTEGER 数字型 NUMBER的子类型,整数 INT 数字型 NUMBER的子类型,整数 NUMERIC 数字型 NUMBER的子类型,与NUMBER等价 REAL 数字型 NUMBER的子类型,与NUMBER等价 SMALLINT 数字型 NUMBER的子类型,取值范围比INTEGER小 VARCHAR2 字符型 存放可变长字符串,有最大长度

SQL 是什么?

第二步:用Net8 Assistant工具来配置命名服务,如下图:

表2 字符数据类型

SQL,指结构化查询语言,全称是 Structured Query Language。

注意服务名是数据库名,主机名和端口号一定要和监听器的一样!

datatyperangsubtypedescriptionCHAR最大长度32767字节 CHARACTER存储定长字符串,如果长度没有确定,缺省是1LONG最大长度2147483647字节存储可变长度字符串RAW 最大长度32767字节用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。LONGRAW最大长度2147483647与LONG数据类型相似,同样他也不能在字符集之间进行转换。ROWID18个字节与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。VARCHAR2最大长度32767字节STRINGVARCHAR与VARCHAR数据类型相似,存储可变长度的字符串。声明方法与VARCHAR相同

SQL 让您可以访问和处理数据库。

测试一下,连接成功,OK!

CHAR 字符型 定长字符串 LONG 字符型 变长字符串,最大长度可达32,767 DATE 日期型 以数据库相同的格式存放日期值 BOOLEAN 布尔型 TRUE OR FALSE ROWID ROWID 存放数据库的行号

SQL 是一种 ANSI标准的计算机语言。

好,再配第二个库的服务命名,如下图:

表3 DATE和BOOLEAN


注意服务名要对应到第二个数据库名!

datatyperange descriptionBOOLEANTRUE/FALSE存储逻辑值TRUE或FALSE,无参数DATE01/01/4712 BC 存储固定长的日期和时间值,日期值中包含时间 LOB数据类型 LOB(大对象,Large object) 数据类型用于存储类似图像,声音这样的大型数据对象,LOB数据对象可以是二进制数据也可以是字符数据,其最大长度不超过4G。LOB数据类型支持任意访问方式,LONG只支持顺序访问方式。LOB存储在一个单独的位置上,同时一个"LOB定位符"(LOB locator)存储在原始的表中,该定位符是一个指向实际数据的指针。在PL/SQL中操作LOB数据对象使用ORACLE提供的包DBMS_LOB.LOB数据类型可分为以下四类: . BFILE . BLOB . CLOB . NCLOB 操作符 与其他程序设计语言相同,PL/SQL有一系列操作符。操作符分为下面几类: . 算术操作符 . 关系操作符 . 比较操作符 . 逻辑操作符 算术操作符如表4所示operatoroperation+ 加- 减/ 除* 乘**乘方 关系操作符主要用于条件判断语句或用于where子串中,关系操作符检查条件和结果是否为true或false,表5是PL/SQL中的关系操作符operatoroperation 小于操作符= 小于或等于操作符 大于操作符=大于或等于操作符= 等于操作符 != 不等于操作符 不等于操作符:= 赋值操作符 表6 显示的是比较操作符operator operationIS NULL如果操作数为NULL返回TRUELIKE比较字符串值BETWEEN验证值是否在范围之内IN验证操作数在设定的一系列值中 表7.8显示的是逻辑操作符operatoroperationAND 两个条件都必须满足OR只要满足两个条件中的一个NOT取反

SQL 能做什么?

再测试一下第二个库的连接,连接成功,OK!

SQL 面向数据库执行查询

最后有几点注意:

SQL 可从数据库取回数据

1.对一般如果有多个应用程序用Oracle的数据库,一般只需要建立一个数据库就可以了,对不同的应用设立不同的用户就可以了。

SQL 可在数据库中插入新的记录

2.如果多个应用程序的字符集不一样,如既有BIG5又有GB2312,那一般就需要考虑配置多个服务器,或者建立多个数据库,或者转换到UTF-8之类的字符集。

SQL 可更新数据库中的数据

3.如果开发需要装多个版本的Oracle,如同时安装Oracle9i和Oracle8.1.7,则需要配置各自的监听端口,环境变量没有什么需要配置的,不会冲突;注册表都放在HKEY_LOCAL_MACHINESOFTWAREORACLE下,但是会分HOME0~HOME...不同的Key中存放,所以也不会有冲突。

SQL 可从数据库删除记录

4.配置命名服务和监听器还可以直接编辑如下2个文件:

SQL 可创建新数据库

监听器:$ORACLE_HOME$etworkADMINlistener.ora,一般文件如下:

SQL 可在数据库中创建新表

# LISTENER.ORA Network Configuration File: D:DATABASEOracle81etworkadminlistener.ora

SQL 可在数据库中创建存储过程

# Generated by Oracle configuration tools.

SQL 可在数据库中创建视图

LISTENER =

SQL 可以设置表、存储过程和视图的权限

(DESCRIPTION_LIST =


(DESCRIPTION =

SQL 是一种标准 - 但是...

(ADDRESS_LIST =

虽然 SQL 是一门 ANSI标准的计算机语言,但是仍然存在着多种不同版本的 SQL 语言。

(ADDRESS = (PROTOCOL = TCP)(HOST = HARRY)(PORT = 1521))

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有