Office中国论坛/Access中国论坛

标题: 记录企业erp软件编写点滴 [打印本页]

作者: yzt880    时间: 2013-8-15 13:01
标题: 记录企业erp软件编写点滴
已经是三次见面了。企业的负责人还是那些话:价格太高了吧?
  我说:这个不是钱的问题。一个是你需要不需要的问题,如果你需要,花这点钱算什么?要是你不需要,一分钱都花瞎了。


  其实我没有要什么钱。我不是卖软件的。软件是我自己编写的,钱多钱少无所谓。只要企业愿意使用,而且是真心的使用,我就拿个工资就行了。可就这点钱,企业也不愿意出。那他们一定不是真心的要做这个erp系统了。



作者: yzt880    时间: 2013-8-15 13:01
本帖最后由 yzt880 于 2013-8-15 13:40 编辑

成交了。还是那句话,不是钱的问题。
  两个月了,我写的外销报价--合同部分企业已经开始使用。开始他们不断地提出意见。我尽量的满足他们的要求,合作还是愉快的。
由开始的怀疑不信任抵触,变得信任和友好了。

作者: yzt880    时间: 2013-8-15 13:02
这个erp系统是一个外销机械加工企业使用的。在编写过程中有很多是技术问题,至于和企业使用人员以及老板的沟通也是很重要的。
  就说今天这个问题吧。这个问题是技术问题,我自己发现的。
  就是在家使用vpn连接企业的的sql数据库的时候第一次连接老是连接不上。其实这个企业的使用者是不知道的,但是我却知道这个问题。做程序的,就是要完美的。
  我通过网络查询,有几篇文章涉及到这个问题,但是我看到其中一篇文章最有价值。
  这个文章是这样的:
  SQL Server Full text第一次使用会timeout的问题
  2012-04-20 13:05:56     我来说两句       收藏     我要投稿
  
  SQLServer Full text第一次使用会timeout的问题
  
  最近遇到一个比较奇怪的问题,为了提升一个Search Function的性能,为此建立了全文索引,然后用Contains语句来降低查询时间。   
  SELECT * FROM  TABLE_A WHERE CONTAINS(Field1,'ABC|DFD|FD')
  使用Contains查询确实比较很快。不过问题是每过约20分钟左右的时间;再次使用contains查询会很慢,甚至会超时,第2次,第3次..则又非常快。如此的重复着。 开始的时候我怀疑是因为SQLServer的 Data Cache问题,所以用WITH Recomplie Option等方式去解决不使用Cache的,但仍然没有任何效果,问题还是继续出现。且这个问题只是出现在某一个环境下。
  
  最后证实问题的罪魁祸首是一个SQLServer的一个配置(VerifySignature). 唯独在这个环境中VerifySignature属性被设为了1,其他的环境都是0.
  
  查询配置的语句:
  SELECT fulltextserviceproperty('VerifySignature')
  当VerifySignature被设置成1时。
  
  当第一次query的时候,SQLServer 会尝试连到Internet 上 验证word breaker证书. 接下来的第二次则不会再去验证。
  
  验证需要花一些时间,尤其当SQLServer没有网络连接的时候。
  
  如果在5分钟里并没有其他的Full text search被行的话, the word breaker会被Unload掉,然后再次执行证书验证。这就是为什么我会遇到这样奇怪的问题.
  
  解决办法:
  
  sp_fulltext_service 'verify_signature',0;


 我在企业的sql2005中运行查询  sp_fulltext_service 'verify_signature',0  这个是全文索引
  解决了问题。心情很舒畅的。学无止境。我相信一句话:只有想不到,没有做不到。
作者: yzt880    时间: 2013-8-15 13:04
本帖最后由 yzt880 于 2013-8-15 14:33 编辑

跟企业的人熟悉点了,他们告诉我,在我之前已经有三批做程序的人在这个企业做过程序。但是都没有完成任务离开了。据说还有水平挺高的。
  企业的要求有时候是很无理的,但是他们的管理就是这样。没有两家企业的管理是一样的,就像没有两片树叶是一样的。
  为什么我们经常听说的是:一个企业不上erp是死,上去erp也是死。原因就是每个企业有每个企业的独特需要。标准的erp软件是满足不了他们的需求的。如果没有人蹲在企业,为企业定制erp系统,自然他们上去的这个标准的erp系统就是死的了。

作者: yzt880    时间: 2013-8-15 13:04
本帖最后由 yzt880 于 2013-8-15 13:17 编辑

记得才开始见面的时候老板问:你们来几个人?
  我说:就我自己。
  老板吃惊地,有点不相信的说:就你自己?
  我说:是的。人多了没有用的。
  我就自己做软件。从企业调研,沟通,制定方案,找出控制点,编写程序,假设服务器,vpn,sql数据库,数据同步,我一个人足以。
  数据同步过程中,标识不能够自动分配了就要重新调整标识范围,今天就遇到了这个问题,在另一个企业的sql数据库。
  Transact-SQL 参考
  sp_adjustpublisheridentityrange
  
  调整发布上的标识范围,并基于发布上的阈值重新分配新的范围。此存储过程在发布服务器的发布数据库上执行。
  
  语法
  
  sp_adjustpublisheridentityrange [ @publication = ] 'publication'
  [ @table_name = ] 'table_name'
  [ @table_owner= ] 'table_owner'
  删除表中的check约束

  给企业做了vpn,便于在家连接sql数据库,也便于以后企业在外人员连接公司的数据库。
  在连接数据库过程中发现一个问题,win7系统拨号VPN可以顺利的连接到数据库,但是xp系统的计算机就连接不过去。
  百思不得其解。
  后来恍然大悟。我用的是使用路由器后的网络,网段和公司的网段一样都是192.168.1.1-255.win7可以自动的添加网关,而xp则不能自动添加。
  解决问题的办法一是改变公司或者我使用的局域网网关
  二是手动给xp添加网关 route add 192.168.1.0 mask 255.255.255.0 公司vpn拨号后分的ip地址


作者: yzt880    时间: 2013-8-15 13:11
本帖最后由 roych 于 2015-4-9 15:08 编辑

我的软件是使用access窗体。前面的查询和表都不使用。用ado连接后台sql数据库。
这是主要的连接代码,启动的时候先启动起来一个窗体,上面显示连接服务器ip sql数据库 以及登入账号和密码。每一次调用数据连接一次,不不用时关闭。
Option Compare Database
'创建ADO连接数据库对象
Public adoCon As ADODB.Connection
'创建ADO记录集对象

'创建ADO命令对象
Public adoCmd As ADODB.Command
'创建ADO参数对象
Public adoPara As ADODB.Parameter
Public proCon As String
Public Sub ConnectDB()
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]
'创建新的ADO连接对象

  Set adoCon = New ADODB.Connection
  strSQL = "Provider=SQLOLEDB;Server=" & fwq1 & ";User ID=" & uid1 & ";Password=" & pwd1 & ";Database=" & sjk1 & ";"
  adoCon.Open strSQL
adoCon.CommandTimeout = 10000

End Sub
作者: yzt880    时间: 2013-8-15 13:15
本帖最后由 yzt880 于 2013-8-15 13:18 编辑

经过多少次的实际使用实验,许多的连接方式中,我觉得只有这个连接最好,可以通过互联网直接连接sql数据库。
strSQL = "rovider=SQLOLEDB;Server=" & fwq1 & ";User ID=" & uid1 & "assword=" & pwd1 & ";Database=" & sjk1 & ";"
就是这个。不用时关闭连接。
Public Sub DisCnn1()
'*purpose: disconnect local sqlserver
'*NOTE:   在这里数据断开连接
On Error GoTo MYERR
   adoCon.Close

MYEXIT:
   Exit Sub
MYERR:
   GoTo MYEXIT
End Sub


作者: yzt880    时间: 2013-8-15 13:22
'全局变量,这个是通用函数,通过这个打开数据库记录集
Public dDateStart As Date, dDateEnd As Date, strCurAccountNo As String

'通用函数
Public Function Openrs(strSQL As String, rs As ADODB.Recordset)
'按strSql中的SQL语句打开一个ADO记录集。
    '为记录集rs分配空间
    Set rs = New ADODB.Recordset
     Call ConnectDB
    '使用本数据库的连接打开记录集,使用键集游标和乐观锁定方式。
    With rs
        .ActiveConnection = adoCon
        .LockType = adLockPessimistic
        .CursorLocation = adUseClient
        .Open strSQL
    End With
End Function

作者: yzt880    时间: 2013-8-15 13:26
一次构造好了连接和打开记录集的函数,以后调用就简单了。这个是设置全局变量。
Public rs As ADODB.Recordset, Rs1 As ADODB.Recordset, Rs2 As ADODB.Recordset, Rs3 As ADODB.Recordset, Rs4 As ADODB.Recordset



查询语句是这样的
openrs“select * from 表 where 限制条件”,rs           或rs1,rs2.。。。。。




作者: yzt880    时间: 2013-8-15 13:36
本帖最后由 yzt880 于 2013-8-15 14:24 编辑

外销企业的对外报价很频繁和重要,是全厂核心。
我开始以为是和医药批发企业的的输入一样,一个品种一个品种的输入,当我做好输入界面给他们使用的时候,才知道这样是不行的。他们需要在excel表进行整理客户询价,然后一次导入程序,而不是一笔一笔的输入。
他们需要的是批量导入。

作者: 5988143    时间: 2013-8-15 13:42
非常不错的创作经验及分享心得~期待着你更多的分享~
作者: yzt880    时间: 2013-8-15 14:29
本帖最后由 yzt880 于 2013-8-15 14:41 编辑

这个着急呀。得不到她们的认可,那还怎么做软件?
干的事昏天地黑。这里忙的不行。那里一看,妈的,股市跌惨了,一会写程序的时间,跌去了10几万。这还做什么程序呀?早就说了做程序可不是为了钱。
看到别人使用你的软件工作,不用我说,你也能体会到我的那种感觉。

作者: yzt880    时间: 2013-8-15 15:08
导入excel表和导出excel表没有什么难的,很快我就搞定了。她们使用的也顺手。问题是她们不时有些特殊要求,比如导入要按客户要求的顺序和记录数导入,数据库里面没有的也要导入,空行也要导入。据他们说其中有个做软件的就是这个问题没有解决好而落荒了。
我就讲其中的一个问题吧。
客户询价单里面厂子里不能加工的产品就不报价,空格是不合适的,就要求她们填写上0,可就是这个0出问题了。
excel表中0少了可以正常导入,0多了其他不是0的导进去也是null了。
我对她们说:数据库里面没有对应的记录吧。
她们说:我们把0删除后导入时正常的。
我反复检查导入语句,没有问题呀。奇怪,这是什么原因呢?
躺在床上,我突然恍然大悟,一定是数据类型的问题。我赶紧上网一查,有了就有一篇文章说到这个问题。
大意就是说sql数据类型是文本时,如果看到几个0的时候还把他们当文本处理,但是当0多了的时候就按数字类型处理了,那就使得excel中的文本格式的导入后null了。
那就让她们不要标记0了,都标记x吧。问题迎刃而解。

作者: gnoy    时间: 2013-8-15 15:49
不赚钱搞个屁,又不是生在朝鲜,天天讲口号就能填饱肚子,哈哈。。。
作者: todaynew    时间: 2013-8-15 17:59
邀请你到Access软件网发此文,地址:http://www.accessoft.com/index.asp
作者: t小宝    时间: 2013-8-18 10:48
非常好的经验分享!
作者: Benjamin_luk    时间: 2013-8-19 15:03
{:soso_e100:}
写得不错
其实在编写ERP的过程
对于企业来说也是一个流程优化的过程
对于一些特别的要求, 可以尝试用其他更好的方法去解决.

对于个人来说, 更重要的是将产品推出去
钱是后面的事情

作者: yzt880    时间: 2013-8-19 19:25
本帖最后由 yzt880 于 2013-8-19 19:27 编辑

谢谢各位回复。
我觉得access的界面不错,但是用它来做个网站后台了什么的还不错,但是真正用于企业erp系统,还是不能胜任。sql功能强大,是很好的后台数据库。我最开始做的一些程序先是全部使用access,这个大家知道的,对于巨量的数据和网络使用都是受限的。后来使用的是access迁移数据库或是链接表的方式,odbc中间件连接。速度受影响,调用数据限制大,但是比全部使用access是进步了。再后来我使用ado直接连接sql,无论速度还是调用方便都更上一层楼。尤其是通过互联网远程连接更是无法相比。调阅数据更加灵活快捷。感觉得心应手。

作者: chaosheng    时间: 2013-8-19 21:22
yzt880 发表于 2013-8-19 19:25
谢谢各位回复。
我觉得access的界面不错,但是用它来做个网站后台了什么的还不错,但是真正用于企业erp系 ...

请问为何不用ADP?

使用ado直接连接sql,控件都不是数据绑定的,很多Access的优势特性不能用,开发效率低啊。这样反而比用VB效率更低了。遇到比较大的项目,开发效率很重要啊。
作者: 软件下载    时间: 2013-8-19 21:41
挺不错。企业里如果有个能干活+会编程的员工,那绝对是天大的福气。


作者: yzt880    时间: 2013-8-20 09:04
回复19楼
说的很对,一是我半路出家,入手时就是access,vba觉得习惯了,改为其他的现学习不是不可以,我觉得各种开发软件都是各有优劣。但是有一条,只要是成熟的开发软件和语言,都能编写出好的应用软件,只有想不到,没有做不到。
二是我本不专业,无法跟大项目开发的科班出身的人比。自然很大的项目人家也不会用我。前几年一中型企业跟我谈过几次,最后人家看我一个人搞软件,信不过我,他们当时是这样说的:你要是......?那个意思就是你要是死了怎么办。我心里想你这个企业能不能活过我还不一定呢,但嘴上还是说我可以把源代码给你们的。
三是开发速度问题。我自己一个人搞,开发速度肯定是上不去的。
我跟企业的做法就是在一个企业蹲下来,成为一个企业的职工,当然是个特殊职工,拿工资,不考勤,不受制约,每个月有几天到企业去解决远程解决不了的问题。软件根据企业需要开发,他们没有了要求了,我就不开发了。有的企业我已经干了10多年了,现在只是维护就可以了。
我看的很清楚,那些买erp软件的企业一是大企业,不上不行,上去了也不行。再就是一些小企业看着人家上也眼馋,花点钱 买个软件,基本无法应用。我做软件10几年了,我们当地企业当时什么水平,现在还是什么水平。我指的是工业企业。商业流通企业他们使用标准版就可以,自然进步要大一点。
请赐教。

作者: gnoy    时间: 2013-8-20 13:28
yzt880 发表于 2013-8-19 19:25
谢谢各位回复。
我觉得access的界面不错,但是用它来做个网站后台了什么的还不错,但是真正用于企业erp系 ...

说dao速度慢纯粹是以讹传讹,其实ADP才是开销比较大要不怎么微软把ADP咔嚓了,因为同时有四个ADO链接打开。如果大家觉得DAO慢,大家可以测试一下附件看速度如何,服务器我已经配置好了,直接点登陆账套即可。这个账套就是虚拟空间提供的SQLSERVER。
[attach]52341[/attach]




作者: yzt880    时间: 2013-8-20 14:23
老婆说你这也叫写软件?都是从网上七拼八凑搞起来的东西。
我说:老婆,你还别瞧不起我。网上的东西很多都是精华,能够拿过来为我所用,而且用的好,用的有创新,那才叫会做软件。
我们自己有什么?不都是学习前人的东西为自己的知识?
老婆笑了:就知道你歪理多。

作者: yzt880    时间: 2013-8-20 14:30
本帖最后由 yzt880 于 2013-8-20 14:41 编辑

这个是树形菜单使用,点击一下查询按钮按日期,编号,客户等多种查询显示。特别是从一张报价单到反复几次报价直至合同,生产,交货都会一一记录,点击后就会展开,从开始至结束脉络清晰。
作者: yzt880    时间: 2013-8-20 14:45
这是这个过程的部分代码,框架作为查询条件输入,直至展示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


作者: chaosheng    时间: 2013-8-20 16:30
gnoy 发表于 2013-8-20 13:28
说dao速度慢纯粹是以讹传讹,其实ADP才是开销比较大要不怎么微软把ADP咔嚓了,因为同时有四个ADO链接打开 ...

微软的数据访问组件的发展历程是: DAO, RDO, ODBCDirect, ADO, ADO.net 。

DAO的设计目的是用来与基于文件的本地数据库进行通信的,随VB3一起发布。虽勉强可与sql server通信,但功能和性能不足。这个在大量数据和更多用户访问时更体现不足。

后来为了和sql server通信,发布了RDO,随VB4一起发布。

后来又随vb5和visual studio 97发布了ODBCDirect,在Rdo的功能上再加上DAO易用性的特性。

后来就是ADO了,随vb6和visual studio 6发布,背景是Internet到来,使可在服务器端脚本中更好的访问数据库,还能在服务器和客户端间传递数据结构。

后来就是随.net发布ADO.net,目的是有效的处理XML,适合于Internet和Intranet上使用的多层数据库应用程序而设计的。

这些数据访问组件是随着应用需求不断发展的。设计目的是最强的决定因素。我们开发应用要从所用技术的开发目的和应用环境和技术建议的开发方案出发来进行的,这样开发出来的应用才比较稳健,开发过程才比较顺利。

另外,在2013不支持ADP主要是微软想推share point,用share point来赚企业客户的钱,还有大趋势都是B/S应用了。又Office要向平板推进砍掉一些累赘的。

相反的,ADP基于ADO是C/S模式下成熟开发方案的轻便方式。


作者: gnoy    时间: 2013-8-20 16:39
chaosheng 发表于 2013-8-20 16:30
微软的数据访问组件的发展历程是: DAO, RDO, ODBCDirect, ADO, ADO.net 。

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

你好像发现新大陆似的 ,现在讨论这个太落伍了,ACCESS2007的时候网上就吵翻了,你接受这个现实吧。

结论不讨论:access操作SQLSERVER 使用MDB ODBC技术优于ADP。
作者: yzt880    时间: 2013-8-20 16:41
chaosheng 发表于 2013-8-20 16:30
微软的数据访问组件的发展历程是: DAO, RDO, ODBCDirect, ADO, ADO.net 。

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

学习了。我原来也想使用adp,但是我还是觉得没有ado连接sql来的便捷和速度。我现在使用adp连接sql,做一些视图和存储过程设计。还有触发器的设计也比在sql中来的简洁、直接、实用。
作者: chaosheng    时间: 2013-8-20 16:45
gnoy 发表于 2013-8-20 16:39
你好像发现新大陆似的 ,现在讨论这个太落伍了,ACCESS2007的时候网上就吵翻了,你接受这个现实吧。
...

你说的MDB ODBC技术就是链接表了,把大型数据库的全部数据搬到客户端来,根本不是C/S方案,无安全性可谈,可把数据全部搬下来,那就不是大型数据库了,数据量大根本适应不了,楼主的实践经验也不是说明了这点吗?
作者: chaosheng    时间: 2013-8-20 16:49
yzt880 发表于 2013-8-20 16:41
学习了。我原来也想使用adp,但是我还是觉得没有ado连接sql来的便捷和速度。我现在使用adp连接sql,做一 ...

是的,你这样也可以,就是麻烦点,但可充分发挥sql server功能,触发器,存储过程。。。
作者: gnoy    时间: 2013-8-20 16:59
chaosheng 发表于 2013-8-20 16:45
你说的MDB ODBC技术就是链接表了,把大型数据库的全部数据搬到客户端来,根本不是C/S方案,无安全性可谈 ...

,感觉你不清楚什么是MDB,什么是ADP.

ADP就是用ADO封装了的东西,这个东西没有什么神秘,事实已经证明这个玩意得不偿失丢掉了ACCESS许多优点,没有了本地表那还叫个屁的ACCESS. MDB中不管是用DAO+ODBC,还是ADO都是可以的。我要说的是ADP死掉了。


作者: chaosheng    时间: 2013-8-20 17:06
本帖最后由 chaosheng 于 2013-8-20 19:47 编辑
gnoy 发表于 2013-8-20 16:59
,感觉你不清楚什么是MDB,什么是ADP.

ADP就是用ADO封装了的东西,这个东西没有什么神秘,事实已 ...

不是封装, 我上面都说过了. 是: ADP是基于ADO技术的.  

你说的MDB+ODBC其实就是用ODBC链接表把sql server的整个表搬到MDB中,再用跟MDB本身的表的同样方法来操纵,即用DAO操纵.
本地数据就没了安全性,大量数据就不行了.
作者: yzt880    时间: 2013-8-20 17:06
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



作者: gnoy    时间: 2013-8-20 17:09
关于更多的ADP内容介绍,都是我收集的,还好还在,省的打字了。了解越多你就知道ADP死是应该的。 http://gnoysoft.haotui.com/forum ... r=type&typeid=1


作者: yzt880    时间: 2013-8-20 17:10
本帖最后由 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

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












作者: yzt880    时间: 2013-8-20 17:16
本帖最后由 yzt880 于 2013-8-20 17:20 编辑

最后经过实际使用,达到我今天的使用习惯。
使用mdb窗体开发界面。ado代码连接sql,vba代码sql查询语句调用后台sql数据至前端。adp连接sql做视图,存储过程,触发器。


中午老板请吃饭,带着6个美女,加上我8个人。


作者: XB2009    时间: 2013-8-20 17:18
学习学习!
作者: chaosheng    时间: 2013-8-20 17:24
楼主,你6楼的就是ADO,为何后来又要用ODBC了?
作者: gnoy    时间: 2013-8-20 17:31
本帖最后由 gnoy 于 2013-8-20 17:32 编辑

ACCESS操作SQLSERVER用ADO全部来替换掉DAO+ODBC不是一件很容易的事情。在我看来微软的ADP就是想替换掉,但没想到漏洞百出,不说速度就连安全性也是没有的。(这个方面可以搜网络,攻破常开链接的内存即可)而且还白白丢掉了许多MDB优点,比如 主子窗体啊,你会发现ADP的主子窗体就是没有MDB好用,比如主窗体引用子窗体合计字段值,这个在ADP中就不行的。

其实检验功底就看一个例子就可以,弄出一个前端没有任何表和查询的 一对多窗体(主子窗体) 例子来即可。对照螺丝纹的订单来做即可。

一对多窗体需要集新增,修改,查找为一身功能。


作者: yzt880    时间: 2013-8-20 17:35
chaosheng 发表于 2013-8-20 17:24
楼主,你6楼的就是ADO,为何后来又要用ODBC了?

他们在讨论adp,dao,ado 我是说我以前做的东西是使用链接表的。说的是以前的东西。你很注意看呀,6楼说的就是现在的。我现在就使用这个。
作者: gnoy    时间: 2013-8-20 17:36
chaosheng 发表于 2013-8-20 17:06
不是封装, 我上面都说过了. 是: ADP是基于ADO技术的.  本地数据就没了安全性,大量数据就不行了.

你这个错的离谱,ADO没出现之前,所有语言操作大型数据库都是ODBC,怎么可能是把数据全部搬下来啊 你不打开连接表何来的数据,连接表和本地表是一个概念?
作者: yzt880    时间: 2013-8-20 17:45
本帖最后由 yzt880 于 2013-8-20 20:55 编辑
gnoy 发表于 2013-8-20 17:31
ACCESS操作SQLSERVER用ADO全部来替换掉DAO+ODBC不是一件很容易的事情。在我看来微软的ADP就是想替换掉,但 ...

你好,我现在不使用主子窗体的模式。子窗体也是很蛮烦的。我习惯使用一个窗体,列表框作为数据显示,使用组合框选择输入,文本框写入输入。

写入使用语句

  OpenRS "INSERT INTO 系统纪录(操作员,离开系统时间,ip" & _
") values ( '" & yhsfm & "','" & Now() & "','" & ip_address & "')", rs

更新使用语句:
Openrs "update baojia set fff='" & Combo140.Column(0) & "' where 编号='" & Me.单据号 & "'", rs

删除使用语句:
OpenRS "DELETE FROM v" & dd & " where 序号='" & Forms!c凭证录入!List1.Column(0) & "'", rs


调阅数据语句:
openrs1”select * from 表 whehe .........“,rs

以后我会讲到同样都是写入,更新,删除,调阅语句,但是速度效率就差别大了。



作者: chaosheng    时间: 2013-8-20 17:47
这个是你不了解ADP,多好多快捷啊,去看看这本书吧.
http://www.office-cn.net/thread-98252-1-1.html

另外,虽说2013不支持ADP了,但以后的Office很有可能是Modern UI的,现在的mdb如果其中的代码有太多的特殊性,在新的Access 版本下也有得折腾的, 很多2003的MDB在2007,2010中也不是出现了很多问题吗. 只要人家企业用2010, ADP就可顺利使用, 即使有极个别用2013,但办公人员使用access的又很少,那装上access 2007/2010 runtime也没问题,其实有装access2013也可照样装access2010 runtime. 很少企业选用office2013的,激活麻烦点,存文件默认又要在云,安装又要微软的ID,功能又比2010没增强什么.
作者: gnoy    时间: 2013-8-20 17:47
yzt880 发表于 2013-8-20 17:45
你好,我现在不使用主子窗体的模式。子窗体也是很蛮烦的。我习惯使用一个窗体,列表框作为数据显示,使用 ...

,那你用ACCESS干嘛,直接用VB就好了。
作者: chaosheng    时间: 2013-8-20 17:49
本帖最后由 chaosheng 于 2013-8-20 20:02 编辑
gnoy 发表于 2013-8-20 17:36
你这个错的离谱,ADO没出现之前,所有语言操作大型数据库都是ODBC,怎么可能是把数据全部搬下来啊 你不打 ...
mdb,accdb链接表就是运行期间的本地表! 对于链接sql server就是把服务器上整个表搬下来.

"ADO没出现之前,所有语言操作大型数据库都是ODBC" 你这个本身就是错误的.


作者: gnoy    时间: 2013-8-20 17:52
chaosheng 发表于 2013-8-20 17:49
mdb,accdb链接表就是运行期间的本地表!

,下了,你们慢慢聊。。。
作者: yzt880    时间: 2013-8-20 17:55
本帖最后由 yzt880 于 2013-8-20 18:14 编辑
gnoy 发表于 2013-8-20 17:47
,那你用ACCESS干嘛,直接用VB就好了。

我前面说了,开始接触的是mdb这个东西,对他的窗体界面操作很顺手。

这就是我写软件的体会了。不要局限于什么固定的东西,哪些适合自己要拿来使用。我不管你什么adp还是ado,dao,还是c语言b语言,还是vb,vba,只要能做出好程序来,只要安全,速度,容量跟得上就可以。就像武术家一样,开始自然是学习些套路,但是真正用在实际搏击中,就看你自己哪一招能致敌于死地了。
在给企业做erp中我是企业有求必应,只要你提出问题来,我不管你管理上先进不先进,只要企业习惯这样使用,我就给你这样做。我经常给企业老板讲,你们有多高的水平,我就有多高的水平,软件也就有多高的水平。超越企业管理现实是个软件开发”左派“吧。



作者: chaosheng    时间: 2013-8-20 17:59
本帖最后由 chaosheng 于 2013-8-20 20:01 编辑

ADO可以按需查询搬下数据.
mdb,accdb链接表是用ODBC把服务器上整个表搬下来后再用DAO操纵. 程序涉及的表全部搬下来,人家可以随便查看复制数据,比如运行时再用另一个MDB来链接这个在运行的含链接表的MDB或MDE,这样全部表数据都可查看更新复制,什么权限都是虚设!
作者: yzt880    时间: 2013-8-21 08:26
本帖最后由 yzt880 于 2013-8-21 08:28 编辑

企业一直使用excel表格编写的一个程序做一些报价合同什么的工作。
这些员工使用excel表格很熟练,也形成了他们的操作习惯。对于数据库软件操作短时间很难理解。
比如说报价编号和合同编号问题。他们一直是手工编制。excel表的文件名子里面包含客户简称,日期,以及编制序号等。他们就要求我也这样给他们编制这样的编号。
我跟他们解释:你那是excel表格,因为你看不到更多的信息,所以你要在文件名上尽量的包含更多的信息。而数据库软件则不一样。编号只是这个标识,更丰富的信息是可以随时列出和调阅的。
但是他们就是不理解,那好我编我的号,给他们留出一个输入框,他们爱怎么输入就怎么输入。
这不,这个问题不就解决了?一个数据库还差一个两个的字段?
多年前学习美术,老师就说,我就愿意教那些没有学习过美术但又有美术天分的孩子。为什么?那些学过的孩子已经烙下了了别的老师的印,很难再接受与他们过去学习过的不同的东西。当然开始要是碰上个好老师则另当别论了。
计算机软件也是这样,那些没有使用过软件的人,你这么说他们就这么干,但是一旦他们使用过其他的软件,再来使用你的软件,那麻烦就大了。你这个东西再好,他们就是不认,你怎么办?

作者: chaosheng    时间: 2013-8-21 09:40
yzt880 发表于 2013-8-21 08:26
企业一直使用excel表格编写的一个程序做一些报价合同什么的工作。
这些员工使用excel表格很熟练,也形成了 ...

是的,跟用户纠缠这些无什么意义的小问题很麻烦. 要尽量避免.

我觉得从更高的一个应用需求层次,分析他们现状无法实现或做不好的而软件可解决的,让他们对比,推翻他们的一些无意义的做法,之后就引入软件的解决方法.这样就比较有说服力.避免纠缠小问题. 需求分析就是要着眼主要问题避免陷入细小无甚意义问题.


作者: chaosheng    时间: 2013-8-21 10:04
确实,有一些复杂编号是无意义的. 我曾碰过这样, 我跟他们说,这么复杂的规则这就只是你们自己识记,现在用软件了,这个事就让电脑为你记就行了.

同样的,有过客户要求用不同颜色标记不同类型记录,我说你那是要劳累你的眼睛呀,颜色又不能排序筛选,用一个字符标记不同类型就好了.他们接受了.
作者: yzt880    时间: 2013-8-21 10:09
chaosheng 发表于 2013-8-21 09:40
是的,跟用户纠缠这些无什么意义的小问题很麻烦. 要尽量避免.

我觉得从更高的一个应用需求层次,分析他 ...

说的很对。
10年前我在一个企业,那个老板的内弟很是瞧不起我,净给我出难题。我先是使用迂回战术,他说什么我就给做什么,要什么功能就添加什么功能。一年多之后就与成了好朋友,对我佩服的不得了。这时候,你的东西他自然就接受了,再也不难为我了。

作者: yzt880    时间: 2013-8-24 15:45
本帖最后由 yzt880 于 2013-8-24 15:49 编辑

今天到企业去,老板和我讨论了软件的一些问题。还是编号的问题,还是要坚持他们自己的手工的编号,说是以前他们延续下来的,一看编号就知道是什么材质的单子。我说了很多也没有说服老板。折中吧,我还是给他们加上合同编号字段,生产订单编号字段,让他们自己编写填进去吧。既然他们不怕每天的麻烦,我还怕一时的修改?按我的意见,我的一个计算机自动编号一直贯穿到从报价单到合同,到生产,到运输到结汇......,这样才便于以后检索。软件不是我自己使用,企业想怎么用是他们的事情。在企业erp开发过程中,这样的事情比比皆是,所以沟通是大事。

作者: yzt880    时间: 2013-8-29 23:45
已经到了生产下单的流程了。
作者: yzt880    时间: 2013-9-4 11:08
本帖最后由 yzt880 于 2013-9-4 11:10 编辑

CODIFER S.A.S.
NIT: 860.501.682-3
CRA. 26 No. 12B -44
TEL: (57 1) 360 7088
FAX: (57 1) 360 3756
BOGOTA, COLOMBIA



今天遇到一个问题。在客户资料中添加上面这段资料,sql中字段nvarchar(200),文本框输入。
可是复制进去不显示。我仔细的检查了一遍,问题出在
CODIFER S.A.S.  NIT: 860.501.682-3  CRA. 26 No. 12B -44   TEL: (57 1) 360 7088  FAX: (57 1) 360 (就是这个地方空格有了问题)3756 BOGOTA, COLOMBIA
最后清除这个空格,重新空格后好了。问题出在什么地方呢?难道是空格的格式问题?


作者: yzt880    时间: 2013-9-5 11:44
本帖最后由 yzt880 于 2013-9-5 12:05 编辑

做了一个excel模板,导出表格。在没有安装excel2010,只安装excel2003的计算机上面导出正常。
但是在安装了excel2010的计算机上导出
在导出49条记录以内提示(49条记录左右吧),点击“是”可以完成导出。

作者: yzt880    时间: 2013-9-5 11:53
本帖最后由 yzt880 于 2013-9-5 12:06 编辑

超过49条记录之后,导出的时候提示下面的错误,无法完成导出。
我猜测,一是我再远程操作,可能是sql连接时间过短,不能传输完数据就关闭了?我测试了,不是这个问题。
二是excel2010的bug?
三还有什么问题?


作者: yzt880    时间: 2013-9-17 18:37
现在遇到一难题,希望老师们伸手相助,不胜感激了。
是个报表问题。我觉得没有必要这样做表格,每页4个表,说是以前就是这样的,看起来习惯,还节约纸张。
我按照主子报表的方法,使用每个表补空行的方法做的表格,但是有的页面显示4个,有的页面则显示两个。
原因我也找到了,就是属性里面“可以扩大”,造成了表格边框扩大后占据了半个页面,是的其他表格移到后面了。
问题找到了,但是解决不了,请高手援助了。

作者: yzt880    时间: 2013-9-24 13:27
本帖最后由 yzt880 于 2013-9-24 13:29 编辑

还是要靠自己了。相信自己这些年来的经验积累,再加上不断地学习足可以解决这些问题。
后来还是解决了,原来是报表节前节后设置问题。
最近有遇到一个难题,就是导出excel表格,客户要求同样的品种只显示一行。
看来是个小问题,但解决起来也是要动些脑筋的。
最后也是vba代码完美解决。
作者: yzt880    时间: 2013-9-24 13:29
标题: RE: 记录企业erp软件编写点滴
本帖最后由 yzt880 于 2013-9-24 13:32 编辑

还是要靠自己了。相信自己这些年来的经验积累,再加上不断地学习足可以解决这些问题。
后来还是解决了,原来是报表节前节后设置问题。
最近又遇到一问题,就是导出excel表格,客户要求同样的品种只显示一行。
看来是个小问题,但解决起来也是要动些脑筋的。
最后也是vba代码完美解决。



作者: yzt880    时间: 2013-10-9 17:08
外销企业表格很多,而且由于他们以前使用过类似的软件表格,所以他们的习惯是很难改的。
一般对这样的情况一是强制推行新的软件表格形式,
二是按照他们原来的制作。
如果是成型软件,人家是不会在这些东西上做很大的改动的。
作为有针对性开发的我来说,只能尽量的做的表格和原来的一样,这样底下的人使用习惯不用做大的调整,只是自己稍微累一点啦。
经过一个阶段表格方面的探索研究,现在已经能够随心所欲地制作出各种样式类型的表格了。这个主要是导出excel表格。以为企业已经习惯了以前他们导出表格的做法,虽然没有什么实际意义。

作者: nxjswt    时间: 2013-10-10 23:39
{:soso_e179:}学习
作者: licongli    时间: 2013-10-11 16:40
yzt880 发表于 2013-9-24 13:29
还是要靠自己了。相信自己这些年来的经验积累,再加上不断地学习足可以解决这些问题。
后来还是解决了,原 ...

请教:楼主可否告知如何解决重复的数据不显示?感谢!
作者: xinrenq    时间: 2013-10-12 23:49
贴主不知道原来是做哪类工作,以前我也面试过类似企业,对于价格呢对方也没认可,当时呢我也对他说,我不是来给你做软件,我

是来给你做管理,因为用软件的是人,所以只有把人整理好了,上软件就是简单的事了
贴主在开发中,可能最难的不会是软件,而是人的因素,主要的工作就如你所说,有句非常好的话来说明:改变成习惯,习惯成自然
当然习惯有好有坏,有规范的也有不规范的,做多了就成习惯了,习惯时间长了,就成自然而然的事了
在他们的要求中,特别是来自不同部门或岗位的要求,在向你提出时,都要进行分析,很多的时候会发现他们的要求并不总是一致性

的,有时候会出现标准不一致、逻辑性问题、岗位职责性冲突等等,甚至同一个人,对不同类事务还前后要求不一致,有时就非常辛

苦的事了。要帮他们去疏理,还要逐个逐个的去解释等等,好累人的。但有一点需要知道。不能过多的迁就,否则后来的工作开展,

就会变成你迁他/她是正常的,很自然的事,就又验证了上面的那句话了
现在我在企业做ERP项目 推行,也用MDB+ADO+MSSQL的方式 来编写程序,但公司推行的ERP是软件商提供的标准软件,因为和你不一

样,你现在好象做的是以业务管理程序,没有财务和成本类的管理等,不过外销类的企业数据结构容不复杂,复杂的是多种多样的要

求,并且不是一次性提供给你的,还要你不停的去挖掘或者等待他们提出
前面盾到你提的一些问题我也遇过类似如:
1.导入时数据格式是数字和文本的问题:可能是用给的宏命令、Docmd方法或者链接表形式,链接表最会出错,所以我一般直接用

EXCEL的对象一个个CELL去读写
2.COMMANDTIMEOUT的单位好象是秒,看到贴主设置的好象好大啊,不会是当作毫秒了吧。
3.关于空格的问题:可能你看到并不是空格字符可能是个空位字符 chr(0),你可以看看这个“空格”的ASC值

希望常能拜读你的贴
作者: yzt880    时间: 2013-10-13 21:38
本帖最后由 yzt880 于 2013-10-13 22:16 编辑
licongli 发表于 2013-10-11 16:40
请教:楼主可否告知如何解决重复的数据不显示?感谢!

OpenRS1 "select ,cInvDefine,cUnitcost from hhhuu where cInvDefine in (select cInvDefine from hhhuu group by cInvDefine  having count(1) >= 2) ORDER BY cInvDefine DESC ", rs,这个是查出重复记录。
给您的建议是,既然是重复的就不要输入,事前控制。假如确有必要,那就查出重复后,只显示最大编号的。我觉得两条数据重复,但总有一个字段能够区别吧。id呢?

作者: yzt880    时间: 2013-10-13 22:01
本帖最后由 yzt880 于 2013-10-13 22:21 编辑
xinrenq 发表于 2013-10-12 23:49
贴主不知道原来是做哪类工作,以前我也面试过类似企业,对于价格呢对方也没认可,当时呢我也对他说,我不是 ...

谢谢了,遇到知音了。比我专业。
      给企业上erp商业软件,我真的觉得没有多大的意思。但是那些大型企业是一定要使用这些软件的,否则软件商吃什么?以前有的企业让我给他们维护软件商的erp,我拒接了。我说:研究他人的东西,还不如自己做一个呢。真的,成型的软件真的太优秀了,但我们学习起来很费劲,有些不能跟实际结合,但是又没有办法修改。很纠结。自己做的东西呢,虽然不如大型软件专业,但是修改起来得心应手。
      企业提出的问题有时候很是无厘头。但是只要头三脚踢得开。开头很重要,无论他们多刁钻的问题,都会有解决的办法的。只要你漂亮的解决了几个问题,后面的就好办了。因为他们开始相信你说的是对的,你的技术是有水准的。对于一时找不到结合点的,就依他们的要求去做。其实仔细想想,他们的意见而不是完全没有道理的。     只有企业的人员参与开发,软件使用起来才有生命力。至于达到的管理水平,那就不是咱们操心的了。我跟企业说的就是,你们水平有多高,做出的软件水平就有多高。超越企业现阶段管理水平的软件都是摆设。因为企业多年形成的管理,一般不会因为上了高水平的软件就有很大的提高的。
      我自从给这家企业做软件,四个月时间更新90次了。几乎每天都有更新。他们现在对我很友好。
COMMANDTIMEOUT 这个我真的没有仔细研究,只是觉得越大越好,反正用完就切断了。
财务部分不做,这个通用。我们再努力水平再高也没有意思。但是企业的管理就不一样了,一个企业一个样,就像没有相同的两片树叶一样。

作者: xinrenq    时间: 2013-10-14 00:48
yzt880 发表于 2013-10-13 22:01
谢谢了,遇到知音了。比我专业。
      给企业上erp商业软件,我真的觉得没有多大的意思。但是那些大型 ...

我只是对ACCESS感兴趣,毕竟比其他的编程软件更易用,更适合我这类非软件行业的人使用和学习
但是自已更不愿被认为是做软件的,更想被他们认可为推行管理,因为我呆过的企业,基本上是制造类的,所以对于生产运营的管理需求是较为渴求的,但由于很多为中小型的私营企业,由于公司发展过程不是太长,老板或股东很多是从本身从市场业务、技术领域、甚至就是只是腰包钱多来投资收回报的,对于业务市场很有管理意识,但是公司发展到一定的规模时,管理就成了瓶颈,由于没有长期的管理文化的沉积,一味的讲求市场和生产,使得受制市场,在市场不景气和变的不可预期时,公司发展受到很大的冲击,市场的竞争使得原有高利变得更为盈小,甚至为了维护市场地位,亏本的生意也就出现了,这时原有在高利润和较为高位资金周转率下,掩盖的管理问题就逐步显现,但这时让企业变革,从低位管理做起,基本上是让企业有壮士断腕的气势,去调整公司和管理是非常难以办到的,同时面对内外因素双重重压,是难以应付的
所以我也在培训或会议上去强调,上ERP系统或其他的软件系统,如CRM,PDM甚至OA等系统,我们要关注的重点是管理,而不是方便,在我在实施标准软件时,也有过为了他们的方便 ,结果去调整软件,进行了小部分的二开,但随着工作的的推行和发展,最终他们并不有去用二开,而用回了标准界面和模块,后来再去问他们时,为什么不用了,他们的回答是:原来是为了好查询,因为之前的不确定性问题,但当前由于软件提从了协同控制,我们不用去考虑前段是否有或完成,为了如果没有或没完成,事务也不会流转过来,如果前段业务要修改和调整,会有相关的操作来达到告知我们,所以我们只要完成自已的工作就行。
我也想贴主能成为推行管理的,必竟软件是个工具,合理\规范\协同\制约\控制 是对业务操作和管理的基本要求,为了 返馈\收集\统计\分析 提供有效\准确\及时的依据,并最终战略\决策提供可靠的基础。

能有机会和你交流。也非常的高兴。。只在公司里,有时会有曲众和寡感觉。。有人说说。也是好的。
作者: yzt880    时间: 2013-10-14 20:07
xinrenq 发表于 2013-10-14 00:48
我只是对ACCESS感兴趣,毕竟比其他的编程软件更易用,更适合我这类非软件行业的人使用和学习
但是自已更 ...

说的很对很好。企业的实际情况就是如此。因为我原来就是做管理的,所以我做的软件是非常注意控制点的。我力求做到这一点,但是企业习惯了他们那一套,只有循序渐进的实施。我以前做过的企业也是这样,现在的企业也是这样,慢慢地在他们不知觉中,管理就提高了不少。
作者: yzt880    时间: 2013-10-16 11:36
就企业的管理岗位来说,只要不是非要男人不可的,一般就是女人在干。大家想想这是什么原因呢?
作者: xinrenq    时间: 2013-10-17 23:06
因为领导是男的
为什么这么说呢,因为女领导的,这类岗位。往往是男的。。
作者: yzt880    时间: 2013-10-18 16:22
本帖最后由 yzt880 于 2013-10-18 16:47 编辑

最近研究导出excel表格,有些体会,特意做一个.mdb,抛一砖,望大家喜欢。


作者: yzt880    时间: 2013-10-18 16:39
本帖最后由 yzt880 于 2013-10-20 11:14 编辑


我看了网上所有导出固定行数表格和补空行的例子,都觉得不是太麻烦,就是bug太多,很不实用。我做的这个思路就是先做一摸版,放在第二个工作表。
再在窗体做一列表框,读出数据。根据记录条数和规定每页行数计算出需要打印的页数。
先根据计算出的页数,有几页就拷贝几个表在放在第一个工作表。
下面就好办了,根据表头表尾和每页行数计算出数据应该拷贝的位置。
如果需要分类导出就加个循环就好了。

作者: yzt880    时间: 2013-10-18 16:40
本帖最后由 yzt880 于 2013-10-18 16:49 编辑

这个是分类一次性导出表格,表头和表尾都是不一样的,每个类别的分页导出打印

作者: yzt880    时间: 2013-10-20 11:09
本帖最后由 yzt880 于 2013-10-20 11:12 编辑

      我使用access十几年了。从开始单独使用mdb,到升迁到后台使用sql,中间也使用过一阶段adp,总是感觉到不顺手,有些功能使用起来很是麻烦。但是主要的问题是构建查询什么的,引用的表超过三个,速度就特别慢。原因就是这个需要把所有的数据调到客户端,然后再执行筛选。
     后来我不断地探索,直到找到适合自己的一套组合方式。就是前面我说的access只做为软件的框架,使用它的窗体。ado连接sql。这个还是很好地,做起来很顺手好用。所有的表和查询都在sql里面完成,包括使用触发器和存储过程。感觉到调用数据很顺手,很灵活。一句代码就可以解决问题。特别是速度,远程调用查询更是达到web浏览器的调用水平,一般的网速就可以顺利调用查询。
    再就是开发速度上感觉比使用access要快的多了,就几行代码,还是特别简单的代码就替代了那些繁杂的查询。
以前光是刷新窗体数据就烦死人,现在就好了一行代码就解决问题。 Openrs "select * from baojia_cx_5 where 报价编号 = '" & 单据号 & "'ORDER BY 代码,规格 desc ", rs
更新数据,无论什么表在任何的窗体上一句代码

Openrs "update baojia set 剂型='" & Combo140.Column(0) & "' where 报价编号='" & Me.单据号 & "'", rs


插入数据,无论什么表在任何的窗体上一句代码

Openrs "INSERT INTO 系统纪录(操作员,开票时间,ip" & _
      ") values ( '" & yhsfm & "','" & Format(Now(), "yyyy-MM-dd HH:mm:ss") & "'," & _
      "'" & ip_address & "')", Rs2
使用起来真是得心应手呀。我觉得大家不要局限在一个access上面,现在是集成软件时代,比如access表格功能弱一点,复杂一点的表格我们可以使用excel表格吗。网络支持不好,我们可以使用sql做后台数据库吗,总之这个不是谁发明的,微软也是这样号召我们的,大家都在这样做。取长补短,利人利我。




作者: yzt880    时间: 2013-10-20 11:21
本帖最后由 yzt880 于 2013-10-20 11:31 编辑

软件做好了,需要做成安装文件,我是用的是“Inno Setup”制作安装包。
并且在软件中添加更新软件代码。只要有新的改动,就可以设置更新。所有使用终端软件的自动强制更新软件。避免手动更新不及时的问题。
很多问题不是做不到,往往是我们自己没有想清楚。也不是技术水平有多高,代码写的多好,使用的编程语言多时髦,关键是思路。
我不记得是谁了,一个英语,法语,外国字码都不懂的人,却翻译了许多的外国名著。
编程语言没有好坏之分,关键是吃得透,学的精。
这些成熟的编程语言,都能很好实现我们需要的功能的,就看我们自己想清楚没有了。

作者: yzt880    时间: 2013-11-6 12:49
本帖最后由 yzt880 于 2013-11-6 12:51 编辑

计算机电源前面一定要加个保险,用我软件的一家公司,两根电线全带电了,结果把服务器和好几台计算机烧了。还好硬盘完好。否则损失大了。
作者: layaman_999    时间: 2013-11-6 15:54
我以前也给一家企业做过两个数据库,一个字:累!
不想做这方面的东西了。
我的经验是:
1.数据库设计一定要简单,.数据库只能协助解决企业一部分关键业务,把简单的这部分做全做完美。--贪大求全累死自己、苦了别人。
2.把报表输出到EXCEL模板再交由用户处理(或打印或EMAIL或QQ随便他),因为用户对EXCEL熟悉,修改excel模板样式也方便,
  无需在程序中费劲脑筋设计报表。
3.用户永远都是懒惰的,程序用得好不好,老板说了不算。
4.注意敏感数据安全,用过即消。老总只为钱,不想重罚进班房(有经验者懂的)
作者: yzt880    时间: 2013-11-6 22:35
layaman_999 发表于 2013-11-6 15:54
我以前也给一家企业做过两个数据库,一个字:累!
不想做这方面的东西了。
我的经验是:

说的太对了
作者: leonshi    时间: 2013-11-8 10:28
谢谢分享
作者: yzt880    时间: 2014-1-18 16:58
过去有一段时间,我在家里vpn连接公司的sql2005,第一次连接都会不通,然后再连接第二次就顺利联通了。
如果隔一段时间不使用,再连接使用的时候又不通了,紧接着再连接一次又通了。
很是不痛快,一直找不到原因。
最近找到原因了。
家里 和公司都使用路由器,内网都使用的相同网段!!
我修改了家里路由器网段,连接正常。
深层次的问题我没有研究,但是网段的冲突造成网络连接,特别是vpn连接不畅通确实大量存在,也由于我们不太注意这些小问题,造成不小的烦恼。

作者: wang1999    时间: 2014-1-19 10:17
楼主这样的好贴,看完当然要点个赞{:soso_e179:}
在这条路上我也走过十多年,楼主能拿ACCESS当饭吃,而且还过得不错,佩服

作者: yzt880    时间: 2014-1-19 22:26
本帖最后由 yzt880 于 2014-1-19 22:32 编辑

一个工业企业少则几年多则几十年形成的管理模式,不是我们做软件的人能够改变的。我只做我的软件,从中得到乐趣足以。至于企业管理是否先进不是我们能评判的。管理也是社会科学,没有固定的答案,没有对与错,没有先进与落后,只有我们看问题角度和立场。
许多推广软件的人会说我的软件能够提升企业的管理等等,其实靠一个软件,无论再怎么“先进”的软件也是不可能达到的。
但是有的企业老板就相信这个,结果自然不是半途而废,就是半死不活。
一个企业能够维持发展几十年,在外人看起来管理无论怎么糟糕,总有他们取胜的法宝。我们假如要想在管理上学点什么的话,还是好好地埋头挖掘吧。




作者: yzt880    时间: 2014-1-19 22:39
还有感到欣慰的是在中国股市如此操蛋的状况下,几年下来竟然能够持平。
股市有句谚语:不是看你赚了多少钱,是看你存活下来了没有!

作者: wuyinhui127    时间: 2015-12-14 10:31
谢谢分享!!!
作者: xiaowuo2    时间: 2015-12-14 11:06
大哥确实是实力人才,顶上
作者: XB2009    时间: 2016-8-25 10:45
很有感触的记录
作者: wind7412    时间: 2016-8-29 19:32
你好,我想用ADO链接ORACLE数据库,怎么写代码?
作者: 李力军2    时间: 2016-8-31 11:12
楼主是个人材,赞一个
作者: oiue    时间: 2016-9-2 07:42
看看,学习学习
作者: jsxfygq    时间: 2018-3-9 05:11
老哥,加个QQ吧,想问您点事51056590
作者: yzt880    时间: 2018-3-22 20:03
jsxfygq 发表于 2018-3-9 05:11
老哥,加个QQ吧,想问您点事51056590

21886685
作者: yzt880    时间: 2018-3-22 20:05
后来写的帖子都没有了。不知这个论坛怎么搞得。
作者: jsxfygq    时间: 2018-3-22 20:45
yzt880 发表于 2018-3-22 20:05
后来写的帖子都没有了。不知这个论坛怎么搞得。

有段时间论坛崩了
作者: yzt880    时间: 2018-3-23 14:46
树形与列表框应用

作者: yzt880    时间: 2018-3-23 15:28
13年发的帖子,自己都不敢相信,这一晃5年了。
看看以前写的东西,真有点佩服自己了。当时真是下功夫。
软件企业一直使用,再也离不开了。除非企业完蛋。现在只做维护了。
开发时间也就大半年吧,后来因为企业效益下滑,才结束了这个项目开发。
认真的完成一个项目的开发,真的锻炼人。
作者: yzt880    时间: 2018-9-18 21:45
这个论坛管理有点差了。
作者: zhu_terry    时间: 2018-9-30 18:53
老哥,你用列表框代替 Access常用的主子窗体(一般将子窗体设置为数据表视图), 这个思路确实另类啊!
为什么要这样呢,如果照你说的用Ado代码直接与后台sql server数据库交互, 得到的结果集难道就不能赋给子窗体作为数据源吗? 为什么会采用列表框的方式, 关于这个,老哥能不能给大家详细介绍下,科普下。先行谢过。
作者: yzt880    时间: 2018-10-7 23:10
zhu_terry 发表于 2018-9-30 18:53
老哥,你用列表框代替 Access常用的主子窗体(一般将子窗体设置为数据表视图), 这个思路确实另类啊!
为 ...

1,主子窗体是access查询作为数据源。这个只能用于较小数据量的数据库程序。因为数据需要调用到用户端处理。
2,我这个是使用ado直接调用sql表、视图以及存储过程。用户端只处理需要调用的数据。大量的数据处理在服务器端,适合数据量大的远程数据操作。
3.编写程序时列表框显示数据比文本框速度快点。数据显示也觉得舒服点(个人体会)。
4,我做的软件中是没有查询的。这个你可以看我前面的帖子。
作者: zhu_terry    时间: 2018-12-8 13:06
老哥,我对你用列表框的例子,很有兴趣,因为我最近也想用Access作前台,后台用sql server数据库这样的模式,我不想用链接 表,也想像你这样用列表框,我现在想请教下,用ado的方式,实例化并打开一个结果集对象后,怎么把结果集中的数据赋给列表框呢? 能否贴点代码,水平菜,真心请教。谢谢!
作者: yzt880    时间: 2019-1-13 23:09
zhu_terry 发表于 2018-12-8 13:06
老哥,我对你用列表框的例子,很有兴趣,因为我最近也想用Access作前台,后台用sql server数据库这样的模式 ...

你好,仔细看前面的帖子,代码都有的。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3