设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: yzt880
打印 上一主题 下一主题

[Access本身] 记录企业erp软件编写点滴

[复制链接]
11#
 楼主| 发表于 2013-8-15 14:29:26 | 显示全部楼层
本帖最后由 yzt880 于 2013-8-15 14:41 编辑

这个着急呀。得不到她们的认可,那还怎么做软件?
干的事昏天地黑。这里忙的不行。那里一看,妈的,股市跌惨了,一会写程序的时间,跌去了10几万。这还做什么程序呀?早就说了做程序可不是为了钱。
看到别人使用你的软件工作,不用我说,你也能体会到我的那种感觉。
12#
 楼主| 发表于 2013-8-15 15:08:16 | 显示全部楼层
导入excel表和导出excel表没有什么难的,很快我就搞定了。她们使用的也顺手。问题是她们不时有些特殊要求,比如导入要按客户要求的顺序和记录数导入,数据库里面没有的也要导入,空行也要导入。据他们说其中有个做软件的就是这个问题没有解决好而落荒了。
我就讲其中的一个问题吧。
客户询价单里面厂子里不能加工的产品就不报价,空格是不合适的,就要求她们填写上0,可就是这个0出问题了。
excel表中0少了可以正常导入,0多了其他不是0的导进去也是null了。
我对她们说:数据库里面没有对应的记录吧。
她们说:我们把0删除后导入时正常的。
我反复检查导入语句,没有问题呀。奇怪,这是什么原因呢?
躺在床上,我突然恍然大悟,一定是数据类型的问题。我赶紧上网一查,有了就有一篇文章说到这个问题。
大意就是说sql数据类型是文本时,如果看到几个0的时候还把他们当文本处理,但是当0多了的时候就按数字类型处理了,那就使得excel中的文本格式的导入后null了。
那就让她们不要标记0了,都标记x吧。问题迎刃而解。
13#
 楼主| 发表于 2013-8-19 19:25:40 | 显示全部楼层
本帖最后由 yzt880 于 2013-8-19 19:27 编辑

谢谢各位回复。
我觉得access的界面不错,但是用它来做个网站后台了什么的还不错,但是真正用于企业erp系统,还是不能胜任。sql功能强大,是很好的后台数据库。我最开始做的一些程序先是全部使用access,这个大家知道的,对于巨量的数据和网络使用都是受限的。后来使用的是access迁移数据库或是链接表的方式,odbc中间件连接。速度受影响,调用数据限制大,但是比全部使用access是进步了。再后来我使用ado直接连接sql,无论速度还是调用方便都更上一层楼。尤其是通过互联网远程连接更是无法相比。调阅数据更加灵活快捷。感觉得心应手。
14#
 楼主| 发表于 2013-8-20 09:04:13 | 显示全部楼层
回复19楼
说的很对,一是我半路出家,入手时就是access,vba觉得习惯了,改为其他的现学习不是不可以,我觉得各种开发软件都是各有优劣。但是有一条,只要是成熟的开发软件和语言,都能编写出好的应用软件,只有想不到,没有做不到。
二是我本不专业,无法跟大项目开发的科班出身的人比。自然很大的项目人家也不会用我。前几年一中型企业跟我谈过几次,最后人家看我一个人搞软件,信不过我,他们当时是这样说的:你要是......?那个意思就是你要是死了怎么办。我心里想你这个企业能不能活过我还不一定呢,但嘴上还是说我可以把源代码给你们的。
三是开发速度问题。我自己一个人搞,开发速度肯定是上不去的。
我跟企业的做法就是在一个企业蹲下来,成为一个企业的职工,当然是个特殊职工,拿工资,不考勤,不受制约,每个月有几天到企业去解决远程解决不了的问题。软件根据企业需要开发,他们没有了要求了,我就不开发了。有的企业我已经干了10多年了,现在只是维护就可以了。
我看的很清楚,那些买erp软件的企业一是大企业,不上不行,上去了也不行。再就是一些小企业看着人家上也眼馋,花点钱 买个软件,基本无法应用。我做软件10几年了,我们当地企业当时什么水平,现在还是什么水平。我指的是工业企业。商业流通企业他们使用标准版就可以,自然进步要大一点。
请赐教。
15#
 楼主| 发表于 2013-8-20 14:23:36 | 显示全部楼层
老婆说你这也叫写软件?都是从网上七拼八凑搞起来的东西。
我说:老婆,你还别瞧不起我。网上的东西很多都是精华,能够拿过来为我所用,而且用的好,用的有创新,那才叫会做软件。
我们自己有什么?不都是学习前人的东西为自己的知识?
老婆笑了:就知道你歪理多。
16#
 楼主| 发表于 2013-8-20 14:30:43 | 显示全部楼层
本帖最后由 yzt880 于 2013-8-20 14:41 编辑

这个是树形菜单使用,点击一下查询按钮按日期,编号,客户等多种查询显示。特别是从一张报价单到反复几次报价直至合同,生产,交货都会一一记录,点击后就会展开,从开始至结束脉络清晰。

本帖子中包含更多资源

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

x
17#
 楼主| 发表于 2013-8-20 14:45:23 | 显示全部楼层
这是这个过程的部分代码,框架作为查询条件输入,直至展示10级树枝。
Sub sx()
  Dim stRecQL As String
    Dim Item As Integer
    Dim i As Integer
    Dim nodindex As Node
    Dim lianjie As String
    Dim lianjie_a As String
'* -----------------------------------------------------------------
'* 定义各类
'* -----------------------------------------------------------------
Select Case Forms![khgl_z]![框架5]
  Case 1
     lianjie = "and (convert(datetime,right(left(报价编号,9),8),102)>='" & Forms![khgl_z]!Text171 & "'and " & _
       "convert(datetime,right(left(报价编号,9),8),102)<='" & Forms![khgl_z]!Text173 & "')   and 报价编号 like '%" & Trim(Forms![khgl_z]!Combo184) & "%'"

  Case 2
       lianjie = "and (convert(datetime,right(left(报价编号,9),8),102)>='" & Forms![khgl_z]!Text171 & "'and " & _
       "convert(datetime,right(left(报价编号,9),8),102)<='" & Forms![khgl_z]!Text173 & "')  and 助记码 like '%" & Trim(Forms![khgl_z]!Combo184) & "%'"
    Case 3
          lianjie = "and (convert(datetime,right(left(报价编号,9),8),102)>='" & Forms![khgl_z]!Text171 & "'and " & _
       "convert(datetime,right(left(报价编号,9),8),102)<='" & Forms![khgl_z]!Text173 & "')   and 询单单号 like '%" & Trim(Forms![khgl_z]!Combo184) & "%'"
        Case 4
          lianjie = "and (convert(datetime,right(left(报价编号,9),8),102)>='" & Forms![khgl_z]!Text171 & "'and " & _
       "convert(datetime,right(left(报价编号,9),8),102)<='" & Forms![khgl_z]!Text173 & "')   and 操作员 like '%" & Trim(Forms![khgl_z]!Combo184) & "%'"
        Case 5
          lianjie = "and (convert(datetime,right(left(报价编号,9),8),102)>='" & Forms![khgl_z]!Text171 & "'and " & _
       "convert(datetime,right(left(报价编号,9),8),102)<='" & Forms![khgl_z]!Text173 & "')  and 报价员 like '%" & Trim(Forms![khgl_z]!Combo184) & "%'"


      End Select
    lianjie_a = "select id from baojia_sx where id1 in (select id from baojia_sx where id1 is null " & lianjie & ""

    '设置最顶级的"爷"
'* ---------------------------
    Set nodindex = TreeView.Nodes.Add(, , "爷", "报价单列表", "K1", "K2")
    nodindex.Sorted = False '*这个是排序,true升序false降序
'* -----------------------------------------------------------------
'*这里的设置跟第一小时里基本是一样的
'*但最后多了一个"K2"的参数,"K1"代表的是未被选中时的图标,"K2"代表是被选中后的图标
'*仔细观察一下,你会发现选中和没选中的图标是不一样的,一个是一个文件夹,一个是一个打开的文件夹
'* -----------------------------------------------------------------

    '设置第二级"父"
'* ---------------------------
     OpenRS1 "select * from baojia_sx where id1 is null " & lianjie & "ORDER BY id desc", rs
    For i = 0 To rs.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("爷", tvwChild, "父" & rs("id"), rs("编号"), "K1", "K2")
        nodindex.Sorted = True
        rs.MoveNext
    Next
  rs.Close
'* -----------------------------------------------------------------
'*第一行意思是打开一个表去寻找数据(查询也是可以的)
'*关键在与Add参数的变化
'*大家看第三个参数,在第一小时里,这里是"父1",这里用Rec.Fields("大区ID")来代替"1",意思是用表的编号来代替手工编号
'*第四个参数也是一样,直接用表中的名称字段来取代原来我们手工的命名
'* -----------------------------------------------------------------

    '设置第三级"子"
'* ---------------------------
OpenRS1 "select * from baojia_sx where id1 in (select id from baojia_sx where id1 is null " & lianjie & ") ", Rs1
    For i = 0 To Rs1.RecordCount - 1
        Set nodindex = TreeView.Nodes.Add("父" & Rs1("id1"), tvwChild, "子" & Rs1("id"), Rs1("编号"), "K1", "K2")
        nodindex.Sorted = True
        Rs1.MoveNext
    Next
    Rs1.Close

18#
 楼主| 发表于 2013-8-20 16:41:55 | 显示全部楼层
chaosheng 发表于 2013-8-20 16:30
微软的数据访问组件的发展历程是: DAO, RDO, ODBCDirect, ADO, ADO.net 。

DAO的设计目的是用来与基于 ...

学习了。我原来也想使用adp,但是我还是觉得没有ado连接sql来的便捷和速度。我现在使用adp连接sql,做一些视图和存储过程设计。还有触发器的设计也比在sql中来的简洁、直接、实用。
19#
 楼主| 发表于 2013-8-20 17:06:22 | 显示全部楼层
chaosheng 发表于 2013-8-20 16:49
是的,你这样也可以,就是麻烦点,但可充分发挥sql server功能,触发器,存储过程。。。

我使用access只使用窗体以后的部分,表和查询在access是没有的。链接表也没有。我在使用过程中感觉到那些链接表很麻烦,一旦更换了原来的网络环境,那些链接表就要重新连接。那个我做了一个专门连接程序。先建立dobc数据源,然后刷新连接:[ODBC]
DRIVER=SQL Server
UID=sa
PWD=123456
Trusted_Connection=no
DATABASE=ddb
WSID=192.168.1.3
APP=Microsoft Data Access Components
SERVER=192.168.0.6
这个是数据源,放在程序文件夹下面。这样很不安全,懂行打开一看就知道服务器全部信息。进入服务器很容易的。下面是创建数据源的代码:
Function Creat_SDSN()


    ' 查看我们要的系统数据源(DSN)是否存在。
    ' 如果存在,正好;否则,我们就创建一个。
         
    Dim lngKeyHandle As Long
    Dim lngResult As Long
    Dim lngCurIdx As Long
    Dim strvalue As String
    Dim classvalue As String
    Dim timevalue As String
    Dim lngvalueLen As Long
    Dim classlngvalueLen As Long
    Dim lngData As Long
    Dim lngDataLen As Long
    Dim strResult As String
    Dim DSNfound As Long
    Dim syscmdresult As Long


    syscmdresult = SysCmd(acSysCmdSetStatus, "查找系统DSN: " & JDS_DSN_name & " ...")
         
    ' 打开包含系统数据源(DSN)的注册表主键。
         
    lngResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _
                             "SOFTWARE\ODBC\ODBC.INI", _
                             0&, _
                             KEY_READ, _
                             lngKeyHandle)


    If lngResult <> ERROR_SUCCESS Then
        MsgBox "错误: 不能打开注册键 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI." & _
               vbCrLf & vbCrLf & _
               "请安装SQL Server的ODBC驱动程序用以调用MDTS系统数据源。" & _
               vbCrLf & _
               "要获得更多的信息,请与管理员联系。"
        syscmdresult = SysCmd(acSysCmdClearStatus)
        Check_SDSN = -1
    End If
         
    ' 现在这个注册键是打开的,我们在这个查找看是否我们需要的。


    lngCurIdx = 0
    DSNfound = False
         
    Do
        lngvalueLen = 512
        classlngvalueLen = 512
        strvalue = String(lngvalueLen, 0)
        classvalue = String(classlngvalueLen, 0)
        timevalue = String(lngvalueLen, 0)
        lngDataLen = 512


        lngResult = RegEnumKeyEx(lngKeyHandle, _
                                 lngCurIdx, _
                                 strvalue, _
                                 lngvalueLen, _
                                 0&, _
                                 classvalue, _
                                 classlngvalueLen, _
                                 timevalue)
        lngCurIdx = lngCurIdx + 1


        If lngResult = ERROR_SUCCESS Then
         
            ' 是我们要的系统数据源吗?
         
            If strvalue = JDS_DSN_name Then
           
                ' 是! 那就不需要我们再做什么了。
            
                DSNfound = True
                syscmdresult = SysCmd(acSysCmdClearStatus)
               
            End If
           
        End If


    Loop While lngResult = ERROR_SUCCESS And Not DSNfound
         
    Call RegCloseKey(lngKeyHandle)


    If Not DSNfound Then
         
        ' 我们所需的系统数据源不存在,因此,我们试着创建一个。
         
        syscmdresult = SysCmd(acSysCmdSetStatus, "创建系统数据源DSN: " & JDS_DSN_name & "...")
         
        lngResult = SQLConfigDataSource(0, _
                                        ODBC_ADD_SYS_DSN, _
                                        "SQL Server", _
                                        "DSN=" & JDS_DSN_name & Chr(0) & _
                                        "Server=" & JDS_Server_name & Chr(0) & _
                                        "Database=ddb" & Chr(0) & _
                                        "UseProcForPrepare=Yes" & Chr(0) & _
                                        "Description=MDTS Database" & Chr(0) & Chr(0))
                       
        If lngResult = False Then
           
            MsgBox "错误: 不能创建系统数据源DSN: " & JDS_DSN_name & "." & _
                    vbCrLf & vbCrLf & _
                    "请确认已安装了SQL Server的ODBC驱动程序。" & _
                    vbCrLf & _
                    "需要更的有关MDTS的信息,请与系统管理员联系。"
                    
            syscmdresult = SysCmd(acSysCmdClearStatus)
            Check_SDSN = -1


        End If
           
    End If
         
    syscmdresult = SysCmd(acSysCmdClearStatus)
    Creat_SDSN = 0


End Function


20#
 楼主| 发表于 2013-8-20 17:10:06 | 显示全部楼层
本帖最后由 yzt880 于 2013-8-20 17:30 编辑

这是调用代码,刷新链接表:
Function Check_SDSN1()
Dim lngKeyHandle As Long
    Dim lngResult As Long
    Dim lngCurIdx As Long
    Dim strvalue As String
    Dim classvalue As String
    Dim timevalue As String
    Dim lngvalueLen As Long
    Dim classlngvalueLen As Long
    Dim lngData As Long
    Dim lngDataLen As Long
    Dim strResult As String
    Dim DSNfound As Long
    Dim syscmdresult As Long



            
                DSNfound = True
                syscmdresult = SysCmd(acSysCmdClearStatus)
               
                Dim db As Database
                Dim tbl As TableDef
                Set db = CurrentDb
                    For Each tbl In db.TableDefs
                      If tbl.Attributes = 536870912 Then


   '=======================================


If Mid(ip_address, 9, 1) = 6 Then
RetVal = path & "\6.1.dsn"
Else
RetVal = path & "\jddb.dsn"
End If
Dim fwq1 As String
Dim sjk1 As String
Dim uid1 As String
Dim pwd1 As String
fwq1 = Forms![sqlconn]![fwq]
sjk1 = Forms![sqlconn]![sjk]
uid1 = Forms![sqlconn]![did]
pwd1 = Forms![sqlconn]![pwd]




     tbl.Connect = "FILEDSN=" & RetVal & ";UID=" & uid1 & "WD=" & pwd1 & ";LANGUAGE=us_english;" _
    & "DATABASE=" & sjk1 & ";"
                         tbl.RefreshLink
                      End If
                    Next
   Call RegCloseKey(lngKeyHandle)


    If Not DSNfound Then
         
        MsgBox "请先创建ODBC数据源!"
           
    End If
         
    syscmdresult = SysCmd(acSysCmdClearStatus)
    Check_SDSN1 = 0


End Function

连接完成后链接表中是这样显示的。











本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 19:24 , Processed in 0.210550 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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