在access中增加农历支持模块

新建模块,复制下面两个函数. glgetnl(),strnl()

在查询中使用: select glgetnl(born) as nlborn from empolyee where glgetnl(born)>"05012" order by glgetnl(born)

上面的查询返回农历生日大于五月十二员工列表,并按农历生日排序.

(声明:这两个函数不是从零开始写的,是修改了网上不知道谁的程序代码而来的.
到google输入关键字vb 农历可以找到这篇文章的多处引用

本来是想在ASP中直接调用的,后来想到放到数据库中,但在Access中可以使用,在ASP中使用ADO无法调用.在调试中发现原数据中的1998农历闰月为小月而不是原代码中的大月,另修改了求干支算法.也没去和原作者联系,见谅.)

       


'输入date, 返回"mmlddyyyy" mm: 月份; l: 1,闰月,0,平常月; dd: 日; yyyy年份
Function glgetnl(ByVal gldate) 
    
    Dim daList(111)
    '1900 to 1909
    daList(0) = "010010110110180131"
    daList(1) = "010010101110000219"
    daList(2) = "101001010111000208"
    daList(3) = "010100100110150129"
    daList(4) = "110100100110000216"
    daList(5) = "110110010101000204"
    daList(6) = "011010101010140125"
    daList(7) = "010101101010000213"
    daList(8) = "100110101101000202"
    daList(9) = "010010101110120122"
    daList(10) = "010010101110000210"
    daList(11) = "101001001101160130"
    daList(12) = "101001001101000218"
    daList(13) = "110100100101000206"
    daList(14) = "110101010100150126"
    daList(15) = "101101010101000214"
    daList(16) = "010101101010000204"
    daList(17) = "100101101101020123"
    daList(18) = "100101011011000211"
    daList(19) = "010010011011170201"
    daList(20) = "010010011011000220"
    daList(21) = "101001001011000208"
    daList(22) = "101100100101150128"
    daList(23) = "011010100101000216"
    daList(24) = "011011010100000205"
    daList(25) = "101011011010140124"
    daList(26) = "001010110110000213"
    daList(27) = "100101010111000202"
    daList(28) = "010010010111120123"
    daList(29) = "010010010111000210"
    daList(30) = "011001001011060130"
    daList(31) = "110101001010000217"
    daList(32) = "111010100101000206"
    daList(33) = "011011010100150126"
    daList(34) = "010110101101000214"
    daList(35) = "001010110110000204"
    daList(36) = "100100110111030124"
    daList(37) = "100100101110000211"
    daList(38) = "110010010110170131"
    daList(39) = "110010010101000219"
    daList(40) = "110101001010000208"
    daList(41) = "110110100101060127"
    daList(42) = "101101010101000215"
    daList(43) = "010101101010000205"
    daList(44) = "101010101101140125"
    daList(45) = "001001011101000213"
    daList(46) = "100100101101000202"
    daList(47) = "110010010101120122"
    daList(48) = "101010010101000210"
    daList(49) = "101101001010170129"
    daList(50) = "011011001010000217"
    daList(51) = "101101010101000206"
    daList(52) = "010101011010150127"
    daList(53) = "010011011010000214"
    daList(54) = "101001011011000203"
    daList(55) = "010100101011130124"
    daList(56) = "010100101011000212"
    daList(57) = "101010010101080131"
    daList(58) = "111010010101000218"
    daList(59) = "011010101010000208"
    daList(60) = "101011010101060128"
    daList(61) = "101010110101000215"
    daList(62) = "010010110110000205"
    daList(63) = "101001010111040125"
    daList(64) = "101001010111000213"
    daList(65) = "010100100110000202"
    daList(66) = "111010010011030121"
    daList(67) = "110110010101000209"
    daList(68) = "010110101010170130"
    daList(69) = "010101101010000217"
    daList(70) = "100101101101000206"
    daList(71) = "010010101110150127"
    daList(72) = "010010101101000215"
    daList(73) = "101001001101000203"
    daList(74) = "110100100110140123"
    daList(75) = "110100100101000211"
    daList(76) = "110101010010180131"
    daList(77) = "101101010100000218"
    daList(78) = "101101101010000207"
    daList(79) = "100101101101060128"
    daList(80) = "100101011011000216"
    daList(81) = "010010011011000205"
    daList(82) = "101001001011140125"
    daList(83) = "101001001011000213"
    daList(84) = "1011001001011A0202"
    daList(85) = "011010100101000220"
    daList(86) = "011011010100000209"
    daList(87) = "101011011010060129"
    daList(88) = "101010110110000217"
    daList(89) = "100100110111000206"
    daList(90) = "010010010111150127"
    daList(91) = "010010010111000215"
    daList(92) = "011001001011000204"
    daList(93) = "011010100101030123"
    daList(94) = "111010100101000210"
    daList(95) = "011010110010180131"
    daList(96) = "010110101100000219"
    daList(97) = "101010110110000207"
    daList(98) = "100100110110050128"
    daList(99) = "100100101110000216"
    daList(100) = "110010010110000205"
    daList(101) = "110101001010140124"
    daList(102) = "110101001010000212"
    daList(103) = "110110100101000201"
    daList(104) = "010110101010120122"
    daList(105) = "010101101010000209"
    daList(106) = "101010101101170129"
    daList(107) = "001001011101000218"
    daList(108) = "100100101101000207"
    daList(109) = "110010010101150126"
    daList(110) = "101010010101000214"
    daList(111) = "101101001010000214"
   
    On Error Resume Next
    Dim conDate As Date
    Dim tYear, AddMonth, AddDay, AddYear, getDay, i As Integer
    Dim RunYue As Boolean
   
    tYear = Year(gldate)
   
    If tYear > 2010 Or tYear < 1901 Then
      glgetnl = "    "
      Exit Function   '如果不是有效有日期,退出
    End If
   
    RunYue = False
    AddYear = tYear
   
    Do
    AddMonth = CInt(Mid(daList(AddYear - 1900), 15, 2))
    AddDay = CInt(Mid(daList(AddYear - 1900), 17, 2))
    conDate = DateSerial(AddYear, AddMonth, AddDay)
    getDay = DateDiff("d", conDate, gldate)
    If getDay < 0 Then AddYear = AddYear - 1
    Loop While getDay < 0
   
   AddDay = 1
   AddMonth = 1
    For i = 1 To getDay
        AddDay = AddDay + 1
        If AddDay = 30 + CInt(Mid(daList(AddYear - 1900), AddMonth, 1)) Or (RunYue And AddDay = 30 + CInt(Mid(daList(AddYear - 1900), 13, 1))) Then
            If RunYue = False And AddMonth = CInt("&H" & Mid(daList(AddYear - 1900), 14, 1)) Then
                RunYue = True
            Else
                RunYue = False
                AddMonth = AddMonth + 1
            End If
            AddDay = 1
        End If
       
    Next
 
    glgetnl = IIf(AddMonth > 9, CStr(AddMonth), "0" + CStr(AddMonth)) + IIf(RunYue, "1", "0") + IIf(AddDay > 9, CStr(AddDay), "0" + CStr(AddDay)) + CStr(AddYear)
End Function

' 输入sNl="mmlddyyyy" mm: 月份; l: 1,闰月,0,平常月; dd: 日; yyyy年份
' 函数返回"XX月XX", 属相存入sShuXinag, 干支记年存入sYear

Function strnl(ByVal sNl, ByRef sShuXiang, ByRef sYear)
   
    Dim lnl_md, lnl_cm, lnl_tiangan, lnl_dizhi, lnl_shu
    lnl_md = "初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十"
    lnl_cm = "正二三四五六七八九十寒腊"
    lnl_tiangan = "甲乙丙丁戊已庚辛壬癸"
    lnl_dizhi = "子丑寅卯辰巳午未申酉戌亥"
    lnl_shu = "鼠牛虎兔龙蛇马羊猴鸡狗猪"
   
    On Error Resume Next
    Dim iy, im, id, isLeap
    im = CInt(Left(sNl, 2))
    isLeap = CInt(Mid(sNl, 3, 1))
    id = CInt(Mid(sNl, 4, 2))
    iy = CInt(Right(sNl, 4))
    strnl = Mid(lnl_cm, im, 1) & "月" & Mid(lnl_md, (id - 1) * 2 + 1, 2)
    If isLeap > 0 Then strnl = "闰" & strnl
    iy = iy - 4
    sShuXiang = Mid(lnl_shu, (iy Mod 12) + 1, 1)
    sYear = Mid(lnl_tiangan, (iy Mod 10) + 1, 1) & Mid(lnl_dizhi, (iy Mod 12) + 1, 1)
End Function

时间: 2024-12-02 23:36:09

在access中增加农历支持模块的相关文章

在附件管理模块中增加对FTP 上传和预览的支持

在之前介绍的附件管理模块里面<Winform开发框架之通用附件管理模块>以及<Winform开发框架之附件管理应用>,介绍了附件的管理功能,通过对数据库记录的处理和文件的管理,实现了附件文件和记录的整合管理,可以运用在单机版的WInform框架,也可以使用在分布式的混合式开发框架中,随着一些开发场景的丰富,我们需要以FTP方式上传文件,因此对这个附件管理模块进行扩展,以便适合更多的实际项目需求. 1.FTP上传.HTTP文件预览实现思路 我们设想的附件管理,底层都是需要在Winfo

Mesosphere在其数据中心操作系统中增加了对Kubernetes的支持

本文讲的是Mesosphere在其数据中心操作系统中增加了对Kubernetes的支持[译者的话]本文介绍了Mesosphere引入Kubernetes的动机,即为用户提供更多样的选择,阐述了Mesosphere和Kubernetes生态未来发展的趋势. 毋庸置疑,最近这段时间,Kubernetes是容器编排编排方面的翘楚.Mesosphere是较早采用容器的公司,致力于让企业在云中运行大数据和分析工作负载.就在今天,它宣布现在还支持Kubernetes在其DC/OS平台上运行云中的大数据应用程

苹果将在App Store的支付中增加对中国银联的支持

摘要: 今天早上苹果官方宣布,将在App Store的支付中增加对中国银联的支持.银联用户可以在App Store绑定借记卡或者信用卡.但是截至发稿时为止,中国区的App Store还没有做出相应的更新,使 今天早上苹果官方宣布,将在App Store的支付中增加对中国银联的支持.银联用户可以在App Store绑定借记卡或者信用卡.但是截至发稿时为止,中国区的App Store还没有做出相应的更新,使用银联卡仍然要通过各个银行的通道进行充值. 注意,这只是App Store,还不是Apple

《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.3. LFS 系统中的设备和模块管理

 在 第六章, 我们通过 systemd 的源码包安装好了 udev.在开始了解它是如何工作之前,我们先来简要的回顾下以前处理设备的方法. 传统的 Linux 不管硬件是否真实存在,都以创建静态设备的方法来处理硬件,因此需要在 /dev 目录下创建大量的设备节点文件(有时会有上千个).这通常由 MAKEDEV 脚本完成,它通过大量调用 mknod 程序为这个世界上可能存在的每一个设备建立对应的主设备号和次设备号. 而使用 udev 方法,只有当内核检测到硬件接入,才会建立对应的节点文件.因为需要

ACCESS中使用SQL语句应注意的地方及几点技巧

access|技巧|语句 ACCESS中使用SQL语句应注意的地方及几点技巧引用:Fred 以下SQL语句在ACCESS XP的查询中测试通过 建表:    Create Table Tab1 (        ID Counter,        Name string,        Age integer,        [Date] DateTime); 技巧:    自增字段用 Counter 声明.    字段名为关键字的字段用方括号[]括起来,数字作为字段名也可行. 建立索引:  

Java中的基础构建模块(第五章)

Java中的基础构建模块 Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类. 1.同步容器类 同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作.常见的复合操作包括:迭代.跳转(在容器内元素之间).条件运算(例如"若没有则添加"). 隐式迭代:某些情况下迭代操作会隐藏起来.如下代码中println调用Set的toString方法,然后对Set中的对象进行迭代调用toString方法: pu

执行计划中各字段各模块描述

      在SQL语句的执行计划中,包含很多字段项和很多模块,其不同字段代表了不同的含义且在不同的情形下某些字段.模块显示或不显示,下面的描述给出了执行计划中各字段的含义以及各模块的描述.        有关执行计划中各字段模块的描述请参考: 执行计划中各字段各模块描述        有关由SQL语句来获取执行计划请参考:     使用 EXPLAIN PLAN 获取SQL语句执行计划        有关使用autotrace来获取执行计划请参考:启用 AUTOTRACE 功能       有

全志平台boot框架中增加设备驱动过程分析

全志平台boot框架中增加设备驱动过程分析          在boot启动阶段,大家都知道他的主要目的就是引导uboot,uboot在引导内核,从而让整个系统运作起来.全志的boot阶段,对应平板这一块,它会驱动LCD,显示一些开机LOGO,这个过程很快,也就1-2秒钟的时间.然而对于车载行业应用来说,可能需要再boot阶段做一些事情.比如,机器冷启动,大家都知道android启动时间还是比较长的,那么怎么使得客户能快速的用上倒车影像的功能呢?这就需要动脑筋了. /**************

《Access 2007开发指南(修订版)》一一1.2 Access中可开发的应用程序类型

1.2 Access中可开发的应用程序类型 Access 2007开发指南(修订版)对于用Access可以开发什么类型的应用程序这个问题,笔者已经解答过很多次了.Access提供了大量的功能,它可以满足不同的数据库要求.它可以用于开发以下6种类型的应用程序: 个人应用程序:小型商务应用程序:部门级应用程序:公司级应用程序:作为企业级客户/服务器应用程序的前端程序:Intranet/Internet应用程序. 1.2.1 Access作为个人应用程序开发平台 Access可以用于开发简单的个人数据