Access小用之感

这两天在公司给一个客户做个服装类的排序功能,使用的是Access数据库,以前这数据库没怎么用过,

用的最多都是SQL SERVER和Mysql,这次接触觉得果然没SqlServer,但平台方便,绝对的轻量级的!!

项目  结构:C/S  语言:C# 数据库:Access 平台:.net Framewwork2.0

总结一下使用:

              1.常用函数

对语法掌控上不少方面都与SQL SERVER不一样,我项目中主要是个字符窜操作函数的控制

 

                                StrConv(string,conversion)  //string要转换的字符窜  conversion是一种内部转换类型常量

                              conversion:  1是将字符串文字转成大写、2是小写、3是每个字的开头字母转成大写。。。。还有不少

   StrComp(string1,string2[,compare]) 返回整型数值为字符串比较的结果
                           参数string1 与string2 都是必要的可以是任何有效
                         的字符串表达式而compare 是可选参数指定字符串比
                      Access 2000 VBA 一册通
                      较的类型Compare 的四个常数设置值是
                      vbUseCompareOption 默认为-1 意义是使用Option
Compare 语句设置执行一个比较VbBinaryCompare 默认
为0 意义是执行一个二进制比较VbTextCompare 默认
为1 执行一个按照原文的比较VbDatabaseCompare 默
认为2 注意仅适用于Microsoft Access 执行一个基于
数据库信息的比较如果string1 小于string2 返回
1 如果string1 等于string2 返回0 如果string1
大于string2 返回1 如果string1 或string2 为Null返回NULL

 StrReverse(expression):expression 是一个字符串调用此函数后它的字
符顺序要被反向如果expression 是一个长度为零的字
符串("") 则返回一个长度为零的字符串如果
expression 为Null 则产生一个错误

Left(string,length)两个必要的命名参数   length 表达式指出从左将返回多少个字符

Right(string,length)与Left类似

Mid(string,start,[length])字符窜截取  string要截取的字段  start开始位置  length截取的长度(可选)

InStr([start],string1, string2,[ compare])字符串查找返回integer位置

start开始子搜索的位置 string1是要搜索的字符窜  string2是被搜索的字符串

Len(string)  返回字符窜长度

设置默认日期值函数大全

年Year(Now())

季度DatePart("q",Now()) 

月Month(Now())

周数 DatePart("ww",Now())

日Day(Now())

星期几DatePart("w",Now(),2)

时Hour(Now())

分Minute(Now())

秒Second(Now())

当前时间Now()

当前日期Date()

 

              

        2.项目描述 

                其中最麻烦是显示排序,请看下表

性别型号衣长袖长胸围肩宽备注裤长腰围臀围裤脚裙腰马夹长
70A7059-110348
70A705910348
70A7059+110346
70A74-359103-147
70A74-359103-148
70A74-359103+246
70A74-359103+246
70A7474+210346
70A74+1591034699
70A74+259-3103-147
70A7658+110348
72A74-359-1.5103-246-1
72A74-359-1.5103-2469672100
72A74-259103-246100
72A7459+21034698
72A74+259+5103461037410823.5
72B74-25910746
72B74-15910747
72B7459107-247
72B7459107+247
72B745910747

都是进行升序排序的。
它是先按型号,然后按衣长,衣长它要先按前面的系数排序  然后在按后面的+或减后的值进行排序,然后是袖长(同一规格衣长,即根据前一项)进行类似衣长的排序,胸围和肩宽也是!

 

3.具体SQL代码:

    

 

SELECT id, name AS 姓名, sex AS 性别, haoxing AS 型号, yichang AS 衣长, xiuchang AS 袖长1, xiongwei AS 胸围1, jiankuai AS 肩宽1, remark1 AS 备注1, kuchang AS 裤长, yaowei AS 腰围, tunwei AS 臀围, kujiao AS 裤脚, remark2 AS 备注2, qunchang AS 裙长, qunyao AS 裙腰, remark3 AS 备注3, majiachang AS 马夹长, xiongwei1 AS 胸围2, remark4 AS 备注4, dayichang AS 大衣长, xiuchang1 AS 袖长2, xiongwei2 AS 胸围3, jiankuai1 AS 肩宽2, remark5 AS 备注5, cheyi AS 衬衣, remark6 AS 备注6
FROM [SELECT id,name,sex,haoxing,

IIf(yichang='' or yichang is null,0,
IIf(InStr(yichang,'+')=0 and InStr(yichang,'-')=0,CDbl(yichang),IIf(InStr(yichang,'+')>0, CDbl(Left(yichang,InStr(yichang,'+')-1))+CDbl(Right(yichang,len(yichang)-InStr(yichang,'+'))),
 CDbl(Left(yichang,InStr(yichang,'-')-1))-CDbl(Right(yichang,len(yichang)-InStr(yichang,'-')))))) AS yichang1,

 IIf(yichang='' or yichang is null,0,
 IIf(InStr(yichang,'+')=0 and InStr(yichang,'-')=0,CDbl(yichang),CDbl(IIf(InStr(yichang,'+')>0,mid(yichang,1,InStr(yichang,'+')-1),mid(yichang,1,InStr(yichang,'-')-1))))) AS yichang2,
yichang,

 IIf(xiuchang='' or xiuchang is null,0,
IIf(InStr(xiuchang,'+')=0 and InStr(xiuchang,'-')=0,CDbl(xiuchang),IIf(InStr(xiuchang,'+')>0, CDbl(Left(xiuchang,InStr(xiuchang,'+')-1))+CDbl(Right(xiuchang,len(xiuchang)-InStr(xiuchang,'+'))),
CDbl(Left(xiuchang,InStr(xiuchang,'-')-1))-CDbl(Right(xiuchang,len(xiuchang)-InStr(xiuchang,'-')))))) AS xiuchang1,xiuchang,

 IIf(xiuchang='' or xiuchang is null,0,
 IIf(InStr(xiuchang,'+')=0 and InStr(xiuchang,'-')=0,CDbl(xiuchang),CDbl(IIf(InStr(xiuchang,'+')>0,mid(xiuchang,1,InStr(xiuchang,'+')-1),mid(xiuchang,1,InStr(xiuchang,'-')-1))))) AS xiuchang2,

 IIf(xiongwei='' or xiongwei is null,'0',
IIf(InStr(xiongwei,'+')=0 and InStr(xiongwei,'-')=0,xiongwei,IIf(InStr(xiongwei,'+')>0, CDbl(Left(xiongwei,InStr(xiongwei,'+')-1))+CDbl(Right(xiongwei,len(xiongwei)-InStr(xiongwei,'+'))),
CDbl(Left(xiongwei,InStr(xiongwei,'-')-1))-CDbl(Right(xiongwei,len(xiongwei)-InStr(xiongwei,'-')))))) AS xiongwei1,xiongwei,

 IIf(xiongwei='' or xiongwei is null,0,
 IIf(InStr(xiongwei,'+')=0 and InStr(xiongwei,'-')=0,CDbl(xiongwei),CDbl(IIf(InStr(xiongwei,'+')>0,mid(xiongwei,1,InStr(xiongwei,'+')-1),mid(xiongwei,1,InStr(xiongwei,'-')-1)))))  AS xiongwei2,

 IIf(jiankuai='' or jiankuai is null,'0',
IIf(InStr(jiankuai,'+')=0 and InStr(jiankuai,'-')=0,jiankuai,IIf(InStr(jiankuai,'+')>0, CDbl(Left(jiankuai,InStr(jiankuai,'+')-1))+CDbl(Right(jiankuai,len(jiankuai)-InStr(jiankuai,'+'))),
CDbl(Left(jiankuai,InStr(jiankuai,'-')-1))-CDbl(Right(jiankuai,len(jiankuai)-InStr(jiankuai,'-')))))) AS jiankuai1,jiankuai,

 IIf(jiankuai='' or jiankuai is null,0,
 IIf(InStr(jiankuai,'+')=0 and InStr(jiankuai,'-')=0,CDbl(jiankuai),CDbl(IIf(InStr(jiankuai,'+')>0,mid(jiankuai,1,InStr(jiankuai,'+')-1),mid(jiankuai,1,InStr(jiankuai,'-')-1))))) AS jiankuai2,

remark1,kuchang,yaowei,tunwei,kujiao,remark2,qunyao,qunchang,remark3,majiachang,xiongwei1,remark4,dayichang,xiuchang1,xiongwei2,jiankuai1,remark5,cheyi,remark6
FROM main]. AS [%$##@_Alias]
ORDER BY haoxing, yichang2, yichang1, xiuchang2, xiuchang1, xiongwei2, xiongwei1, jiankuai2, jiankuai1;


 

看到了没有 几个要排序的字段都有两个临时字段  例如字段yichang而言有yichang1和yichang2,yichang2就是该字段的+或-之前的系数,而yichang1是有+或- 表达式值  所以可以看到order by 那里是先对yichang2排序再对yichang1排序,这样就达到了效果,其它的也类似!

IIf(condition,value1,value2)函数  有点类似于条件表达式,condition为真 显示value1 反之显示value2


 

 

转载于:https://www.cnblogs.com/zhangqifeng/archive/2009/06/06/1497768.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值