📄 uu1.pas.~2~
字号:
+'[XH3] [tinyint] DEFAULT 255 NULL ,'
+'[cJZ] [tinyint] DEFAULT 255 NULL ,' //当前基站ID
+'[cXH] [tinyint] DEFAULT 255 NULL ,' //当前信号强度
+'[JZo] [tinyint] DEFAULT 255 NULL ,' //上一基站ID
+'[XHo] [tinyint] DEFAULT 255 NULL ,' //上一信号强度
+'[Vol] [tinyint] DEFAULT 0 NULL ,' //当前卡的电压
+'[wd] [tinyint] DEFAULT 0 NULL ,' //当前卡的温度
+'[tT] [datetime] NOT NULL ,' //接收时间
+'[基站状态] [tinyint] DEFAULT 255 NULL ,'
+'[卡状态] [tinyint] DEFAULT 0 NULL ,' //$80 $40 $20 $10 $08 $04 $02 $01
+'[iDU] [tinyint] DEFAULT 1 NULL ,' //下上井标识 //盲区 卡警 软警 超时 超人数 限制区域 补采 井下(若为0表示状态不明)
+'PRIMARY KEY([卡ID],[tT]) )';
adoQury.SQL.Add(sql);
sql :='if not exists (select [name] from sysobjects where [name] = ''_历史基站数据表'+toInt_xs(i,2)+''')'
+'CREATE TABLE [_历史基站数据表'+toInt_xs(i,2)+'] ('
+'[id] [bigint] IDENTITY(-2000000000, 1) NOT NULL ,'
+'[基站ID] [tinyint] NOT NULL ,'
+'[基站类型ID] [tinyint] NOT NULL ,'
+'[当前人数] [smallint] NULL ,' //直接收到的人数
+'[过滤人数] [smallint] NULL ,' //重复采集后经处理的人数
+'[基站状态] [tinyint] NULL ,'
+'[接收时间] [datetime] NOT NULL ,'
+'PRIMARY KEY([基站ID],[接收时间]) )';
adoQury.SQL.Add(sql);
sql :='if not exists (select [name] from sysobjects where [name] = ''故障表'')'
+'CREATE TABLE [故障表] ('
+'[sbNo] [int] NOT NULL ,' //故障设备号
+'[iTime] [int] NOT NULL ,' //开始时间
+'[sbLX] [tinyint] NOT NULL ,' //设备类型 9代表分站
+'[fTim] [datetime] NOT NULL ,' //开始时间
+'[lTim] [datetime] NOT NULL ,' //结束时间
+'[cntC] [int] DEFAULT 0 NOT NULL ,' //统计次
+'[cntS] [int] DEFAULT 0 NOT NULL ,' //统计秒
+'[sCS] [nvarchar] (20) NULL ,'
+'PRIMARY KEY([sbNo],[iTime],[sbLX]) )';
adoQury.SQL.Add(sql);
sql :='if not exists (select [name] from sysobjects where [name] = ''_历史数据'+toInt_xs(i,2)+''')'
+'CREATE TABLE [_历史数据'+toInt_xs(i,2)+'] ('
+'[cd] [int] NOT NULL ,' //测点号
+'[lx] [tinyint] NULL ,' //类型
+'[cgq] [tinyint] NULL ,' //传感器号
+'[val] [real] NULL ,' //监测值
+'[sta] [smallint] NULL ,' //状态
+'[tim] [datetime] Not NULL ,' //时间
+'PRIMARY KEY([cd],[tim]) )';
adoQury.SQL.Add(sql);
sql :='if not exists (select [name] from sysobjects where [name] = ''_小时数据'+toInt_xs(i,2)+''')'
+'CREATE TABLE [_小时数据'+toInt_xs(i,2)+'] ('
+'[id] [int] IDENTITY(-2000000000, 1) NOT NULL ,'
+'[cd] [int] NOT NULL ,'
+'[mbs] [tinyint] Not NULL ,'
+'[miV] [real] NULL ,'
+'[agV] [real] NULL ,'
+'[maV] [real] NULL ,'
+'[tim] [datetime] Not NULL ,'
+'PRIMARY KEY([cd],[tim]) )';
adoQury.SQL.Add(sql);
end;
end; //if flag then begin //seei库
try try
adoQury.ExecSQL; //隐含了事务处理,当字段数不正确时全不写入,当关键字重复时仅跳过重复行
rtn :=true; //不管是否创建表,都为True(隐含了事务处理)
except end finally
adoQury.Close;
end;
//函数
//与 Cmp按位与后是否等于 cmp 相等返回1 不等返回0
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE FUNCTION funCmp( @iData tinyint, @iCmp tinyint ) ');
adoQury.SQL.Add('RETURNS bit AS');
adoQury.SQL.Add('begin');
adoQury.SQL.Add(' declare @rtn bit');
adoQury.SQL.Add(' if (@iData & @iCmp)=@iCmp begin ');
adoQury.SQL.Add(' set @rtn=1 ');
adoQury.SQL.Add(' end else begin');
adoQury.SQL.Add(' set @rtn=0 ');
adoQury.SQL.Add(' end');
adoQury.SQL.Add(' return @rtn');
adoQury.SQL.Add('end');
adoQury.ExecSQL;
//与 Cmp按位与后是否等于 0 不等于0返回1 等于0返回0
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE FUNCTION funCmpZero( @iData tinyint, @iCmp tinyint ) ');
adoQury.SQL.Add('RETURNS bit AS');
adoQury.SQL.Add('begin');
adoQury.SQL.Add(' declare @rtn bit');
adoQury.SQL.Add(' if (@iData & @iCmp)<>0 begin ');
adoQury.SQL.Add(' set @rtn=1 ');
adoQury.SQL.Add(' end else begin');
adoQury.SQL.Add(' set @rtn=0 ');
adoQury.SQL.Add(' end');
adoQury.SQL.Add(' return @rtn');
adoQury.SQL.Add('end');
adoQury.ExecSQL;
{
adoQury.SQL.Clear;
adoQury.SQL.Add('/*查找一个煤矿一个测点(关联传感器)一天的最大值*/');
adoQury.SQL.Add('/*煤矿号,测点号,传感器号,天*/ ');
adoQury.SQL.Add('CREATE FUNCTION fun1( ');
adoQury.SQL.Add(' @sMK nvarchar(10), @sCD varchar(8), ');
adoQury.SQL.Add(' @iNo int,@yyyyMMdd char(8) ) ');
adoQury.SQL.Add('RETURNS float AS');
adoQury.SQL.Add('begin');
adoQury.SQL.Add(' declare @rtn float');
adoQury.SQL.Add(' set @rtn=(select Max(最大值) from 小时数据');
adoQury.SQL.Add(' where 煤矿号=@sMK and 测点号=@sCD and 传感器号=@iNo ');
adoQury.SQL.Add(' and (iTime Between @yyyyMMdd+''00'' and @yyyyMMdd+''23'') ) ');
adoQury.SQL.Add(' if @rtn is null begin set @rtn=-999998.5 end');
adoQury.SQL.Add(' return @rtn');
adoQury.SQL.Add('end');
adoQury.ExecSQL;
}
//返回一月的天数,取一月的最后一天
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE function mthDays(@tT DateTime) returns int');
adoQury.SQL.Add('AS');
adoQury.SQL.Add('begin');
adoQury.SQL.Add(' declare @rtn int,@Y int,@M int');
adoQury.SQL.Add(' set @Y=Cast(DATEPART(year, @tT) AS int)');
adoQury.SQL.Add(' set @M=Cast(DATEPART(month, @tT) AS int)');
adoQury.SQL.Add(' if (@M=1)or(@M=3)or(@M=5)or(@M=7)or(@M=8)or(@M=10)or(@M=12)');
adoQury.SQL.Add(' set @rtn=31');
adoQury.SQL.Add(' else if (@M=4)or(@M=6)or(@M=9)or(@M=11)');
adoQury.SQL.Add(' set @rtn=30');
adoQury.SQL.Add(' else if (@M=2)');
adoQury.SQL.Add(' if (@Y%400=0) or (@Y%4=0 and @Y%100<>0) set @rtn=29');
adoQury.SQL.Add(' else set @rtn=28');
adoQury.SQL.Add(' else set @rtn=-1');
adoQury.SQL.Add(' return @rtn');
adoQury.SQL.Add('end');
adoQury.ExecSQL;
// /*因涉及跨表查数据,故要根据一个时间推出合适的上月时间(从12点算)*/
// /*是1月或不是当月的1号,返回原传入的时间, 否则返回上月最后一天的后12小时*/
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE function preTime(@tT DateTime) returns DateTime ');
adoQury.SQL.Add('AS');
adoQury.SQL.Add('begin');
adoQury.SQL.Add(' declare @rtn DateTime, @Y int, @M int, @D int ');
adoQury.SQL.Add(' declare @oldM int, @olds int ');
adoQury.SQL.Add(' set @Y=Cast(DATEPART(year, @tT) AS int) ');
adoQury.SQL.Add(' set @M=Cast(DATEPART(month, @tT) AS int) ');
adoQury.SQL.Add(' set @D=Cast(DATEPART(day, @tT) AS int) ');
adoQury.SQL.Add(' if (@M<>1)and(@D=1) begin ');
adoQury.SQL.Add(' set @oldM=@M-1 ');
adoQury.SQL.Add(' if (@oldM=4)or(@oldM=6)or(@oldM=9)or(@oldM=11) ');
adoQury.SQL.Add(' set @olds=30 ');
adoQury.SQL.Add(' else if (@oldM=2) ');
adoQury.SQL.Add(' if (@Y%400=0) or (@Y%4=0 and @Y%100<>0) set @olds=29 ');
adoQury.SQL.Add(' else set @olds=28 ');
adoQury.SQL.Add(' else set @olds=31 ');
adoQury.SQL.Add(' set @rtn=Cast(Cast(@Y as varchar)+''-''+Cast(@oldM as varchar) ');
adoQury.SQL.Add(' +''-''+Cast(@olds as varchar)+'' 12:00:00'' As DateTime) ');
adoQury.SQL.Add(' end else begin ');
adoQury.SQL.Add(' set @rtn=@tT ');// /*是1月或不是当月的1号,返回原传入的时间*/
adoQury.SQL.Add(' end ');
adoQury.SQL.Add('return @rtn ');
adoQury.SQL.Add('end ');
adoQury.ExecSQL;
// /*因涉及跨表查数据,故要根据一个时间推出合适的后一月时间*/
// /*若是12月返回原传入的时间*/
// /*若是31号23点59分59秒返回后一月1号的前10小时*/
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE function aftTime(@tT DateTime) returns DateTime ');
adoQury.SQL.Add('AS ');
adoQury.SQL.Add('begin ');
adoQury.SQL.Add(' declare @rtn DateTime, @Y int, @M int, @D int, @H int, @F int ');
adoQury.SQL.Add(' declare @lstM int, @iMthDays int ');
adoQury.SQL.Add(' set @Y=Cast(DATEPART(year, @tT) AS int) ');
adoQury.SQL.Add(' set @M=Cast(DATEPART(month, @tT) AS int) ');
adoQury.SQL.Add(' set @D=Cast(DATEPART(day, @tT) AS int) ');
adoQury.SQL.Add(' set @H=Cast(DATEPART(Hour, @tT) AS int) ');
adoQury.SQL.Add(' set @F=Cast(DATEPART(minute, @tT) AS int) ');
adoQury.SQL.Add(' if (@M=4)or(@M=6)or(@M=9)or(@M=11) ');
adoQury.SQL.Add(' set @iMthDays=30 ');
adoQury.SQL.Add(' else if (@M=2) ');
adoQury.SQL.Add(' if (@Y%400=0) or (@Y%4=0 and @Y%100<>0) set @iMthDays=29 ');
adoQury.SQL.Add(' else set @iMthDays=28 ');
adoQury.SQL.Add(' else set @iMthDays=31 ');
adoQury.SQL.Add(' if (@M<>12)and(@D=@iMthDays)and(@H=23)and(@F=59) begin ');
adoQury.SQL.Add(' set @lstM=@M+1 ');
adoQury.SQL.Add(' set @rtn=Cast(Cast(@Y as varchar)+''-''+Cast(@lstM as varchar)+''-01 12:00:00'' As DateTime) ');
adoQury.SQL.Add(' end else begin ');
adoQury.SQL.Add(' set @rtn=@tT ');
adoQury.SQL.Add(' end ');
adoQury.SQL.Add('return @rtn ');
adoQury.SQL.Add('end ');
//存储过程
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPartMents');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' select 部门ID,部门名,等级=1,上级号=0 from 部门表1');
adoQury.SQL.Add(' union');
adoQury.SQL.Add(' select 部门ID,部门名,等级=2,上级号=部门ID1 from 部门表2');
adoQury.SQL.Add(' union');
adoQury.SQL.Add(' select 部门ID,部门名,等级=3,上级号=部门ID2 from 部门表3');
adoQury.SQL.Add(' order by 等级,上级号,部门ID');
adoQury.ExecSQL;
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPartMentView2');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' SELECT dbo.部门表2.部门ID, dbo.部门表2.部门名, dbo.部门表2.部门ID1, ');
adoQury.SQL.Add(' dbo.部门表2.负责人, dbo.部门表2.负责人ID, dbo.部门表2.联系电话1, ');
adoQury.SQL.Add(' dbo.部门表2.联系电话2, dbo.部门表1.部门名 AS 部门名1');
adoQury.SQL.Add(' FROM dbo.部门表2 LEFT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表1 ON dbo.部门表2.部门ID1 = dbo.部门表1.部门ID');
adoQury.ExecSQL;
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPartMentView3');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' SELECT dbo.部门表3.部门ID, dbo.部门表3.部门名, dbo.部门表3.部门ID2, ');
adoQury.SQL.Add(' dbo.部门表3.负责人, dbo.部门表3.负责人ID, dbo.部门表3.联系电话1, ');
adoQury.SQL.Add(' dbo.部门表3.联系电话2, dbo.部门表2.部门名 AS 部门名2, dbo.部门表2.部门ID1, ');
adoQury.SQL.Add(' dbo.部门表1.部门名 AS 部门名1');
adoQury.SQL.Add(' FROM dbo.部门表2 LEFT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表1 ON dbo.部门表2.部门ID1 = dbo.部门表1.部门ID RIGHT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表3 ON dbo.部门表2.部门ID = dbo.部门表3.部门ID2');
adoQury.ExecSQL;
/////////////////
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPartMentSimply2');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' SELECT dbo.部门表2.部门ID AS 部门ID2, dbo.部门表2.部门名 AS 部门名2, ');
adoQury.SQL.Add(' dbo.部门表1.部门ID AS 部门ID1, dbo.部门表1.部门名 AS 部门名1');
adoQury.SQL.Add(' FROM dbo.部门表2 LEFT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表1 ON dbo.部门表2.部门ID1 = dbo.部门表1.部门ID');
adoQury.ExecSQL;
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPartMentSimply3');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' SELECT dbo.部门表3.部门ID AS 部门ID3, dbo.部门表3.部门名 AS 部门名3, ');
adoQury.SQL.Add(' dbo.部门表2.部门ID AS 部门ID2, dbo.部门表2.部门名 AS 部门名2, ');
adoQury.SQL.Add(' dbo.部门表1.部门ID AS 部门ID1, dbo.部门表1.部门名 AS 部门名1');
adoQury.SQL.Add(' FROM dbo.部门表2 LEFT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表1 ON dbo.部门表2.部门ID1 = dbo.部门表1.部门ID RIGHT OUTER JOIN');
adoQury.SQL.Add(' dbo.部门表3 ON dbo.部门表2.部门ID = dbo.部门表3.部门ID2');
adoQury.ExecSQL;
{
adoQury.SQL.Clear;
adoQury.SQL.Add('CREATE Procedure wpgPerson');
adoQury.SQL.Add('AS');
adoQury.SQL.Add(' SELECT dbo.人员表.人员ID, dbo.人员表.iTime, dbo.人员表.卡ID, dbo.人员表.姓名,');
adoQury.SQL.Add(' dbo.人员表.身份证, dbo.人员表.性别, dbo.人员表.出生日期, dbo.人员表.部门1, ');
adoQury.SQL.Add(' dbo.人员表.部门2, dbo.人员表.部门3, dbo.人员表.工种, dbo.人员表.职务, ');
adoQury.SQL.Add(' dbo.人员表.联系电话, dbo.人员表.主要工作地点, dbo.人员表.日下井时间, ');
adoQury.SQL.Add(' dbo.人员表.月下井次, dbo.人员表.班次, dbo.部门表3.部门名 AS 部门名3, ');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -