2025-12
16

ADO+SQL突发报错

By xrspook @ 8:19:40 归类于: 烂日记

周日晚上感觉一切都好,没有遇到什么特殊的情况。周一早上打开wifi连接网络,打开微信以后发现同事给了我一个信息说前一天晚上VBA的查询失败了,无法获取数据。看到那条信息,我的第一反应是会不会重命名有问题。那里有个截图,但我没有仔细看。VBA的弹窗都那个模样,而且大概差不多都是那些内容。虽然有说是什么方面的问题,但通常你往那个方向想的话,可能根本找不出原因,所以我就没有看。出现这么个状况,最大可能是浪潮升级系统以后又改过某个导出数据的表,导致那个表里面的某些字段名改变了,那个字段又是我使用的,于是就会查询失败。为什么我觉得是浪潮的原因呢?因为20点多的时候还是很正常的,我的同事是23点多的时候查询。她查询的时候,单位的作业已经结束了半个小时以上,如果浪潮要抓紧时间升级,估计会在作业结束以后马上进行。综上所述,如果查询失败,我的第一感觉是浪潮整出来的幺蛾子,但我不确定这真的是浪潮的幺蛾子还是我同事文件名不对导致出状况,唯一能做的就是上班以后我自己试验一下。

文件导出后,的确发现查询失败了,错误代码是80004005,对应的描述是“这种对象类型不支持该操作”。在我印象之中,没有遇到过这种描述的错误,但是搜索800044005这个代码,很多各种各样的原因都会是这个号,所以这到底是什么毛病呢?在我记忆之中,如果是浪潮改了那个表,导致我查询失败,应该不是这个描述,但是我没有太多的时间去研究到底是什么,我得先把我手头上的东西都搞完。

搞完那些日常必须做的东西以后,我开始研究这个查询失败。按照常理,浪潮bug的概率最大,所以我首先把之前从浪潮导出的表格和现在从浪潮表出的导出的表格的字段核对了一遍。发现字段是完全一致的,整个表格的构造也是一样的,所以这基本排除是浪潮的问题,为了证明的确不是浪潮的问题,我把以前导出的数据喂给查询文件,发现和新导出数据弹出的错误一样。这样就说明了肯定不是浪潮的问题,但不是浪潮的问题,那是什么问题呢?在进行新旧表格对比后,我又回到查询代码那里,先是逐个删除我觉得可疑的,结果发现还是那样,最后就直接原表输出,居然原表输出也出了状况。到这一步的时候,我基本确定是微软的问题。因为前几个月我们才经历过如果进行ADO+SQL查询的时候引用了当前查询文件所在的表格,就会让查询时间大幅增加。如果查询的时候,源文件所在的文件打开了,也会让查询时间大幅增加。到底是什么样的更新才会出现这种问题呢?我们不知道,但肯定的是一定是微软升级导致的问题,因为有些人有问题,有些人没有。用批量版的那些没有,用零售版的出现了问题,那些用零售版的一直没有更新的也没有问题。最终几乎可以追溯到到底是具体哪一个版本的更新引发了这个问题。

如果是SQL语句导致的状况,当我什么都不设置原表输出理论上应该没有问题,但实际上问题依旧。

研究到了这个程度,我知道这不是我一个人能解决的。我大概知道这是不是我们这些用户能解决的。那到底是什么问题突然触发了这个事故,得问那些负责windows系统更新的人。

2025-11
20

实战

By xrspook @ 8:32:46 归类于: 烂日记

对系统的导出数据进行了两种形式的格式化以后,接下来我要把其中一种格式化的VBA交给同事,告诉她该怎么用。在我印象之中,每天他们报送数据的时候用的电脑装的是office软件。我这里说的报送,意思是要得出某个文字转化版本的那些人。单位是很奇怪的存在。联想电脑附带的软件是office家庭学生版的正版,另外一些系统不知道为什么一开始的时候就被格式化了,被某些人装了windows系统之后装过各种奇奇怪怪的软件,最终可能定下来的是一个不知道什么版本的wps。也不知道从哪一年开始单位就有批量买的wps,但因为我是office软件的超级粉丝,wps根本无法满足我的要求。因为wps没办法做Power三剑客。Power Pivot还好一点,我用得比较少,但是如果要对一些数据进行文本合并,SQL没那么容易,需要用字典搭配字符拼接才能实现。在那种情况下,我首选通过Power Query合并。当然用Python也能做到,但是如果某个人的电脑里面装的是office,又在2019以后,PQ内置功能,但如果要别人运行Python,还需要安装,还需要配置环境。

我没想到的是那个同事居然先拿回办公室试一下,她办公室电脑用的是wps。wps我猜她安装的版本是32位,因为我的VBA查询用了ADO+SQL,这两个东西意味着不是所有的wps都可以直接执行。即便单位买的那个wps的版本能运行宏,但是宏里面又用了SQL,这个估计就很悬,最终能不能用,可能也可以但估计得折腾一番。幸好她没有挣扎,直接拿着那个VBA文件就直冲工作地点。她第一次在办公室截图回来告诉说wps无法运行宏的时候我就下去找人,结果没找到,原来她已经直接去工作地点了。过了一阵她又跟我说运行不了,反馈出来的那个信息就是VBA脚本没有找到恰当的源文件。

我第一个反应是她导出的文件会不会文件名有一些空格没有留意到,于是我马上赶往那个地方,结果发现她的确导出了文件,但是她发现导出文件的名字跟我之前跟她说的不一样,所以她重命名了。重命名没有任何的意义,因为导出的文件名不一样,基本可以确定她导出的位置不对。当我问她是在哪里导出的时候,她自己估计也马上发现了问题所在,果然就是因为她导出的文件导出错了。

工作地点的那台电脑一次就通过VBA考验。旁边的那台电脑是一台新的联想,预装office2021家庭学生版,但是那台电脑打开VBA之后就会有一条红色的提示。正常情况下,理论上那应该是一个黄色的提醒,按确定或者允许之类就可以了,但红色的提示好像根本没办法按掉。只要按那条红色的东西,就会弹出一个网页,告诉你一些细节。一开始我没有留意,我不管那条红色直接去选项那里设置允许宏,但即便这样,这个文件也依然运行不了。我就不得不去仔细看红色那条提示对应的那个网页。发现是因为因为出于某些安全原因,系统锁定了这个带宏的文件,需要在文件那里按右键点击属性,然后再点击某个解除按钮,之后才能运行那个文件的宏,打开文件才会出现黄色的提示。所以到底是什么安全设置让那个电脑带宏的文件出现那条红色的提示呢?起码在之前我接触过的所有office里未曾遇到过。

对用宏文件的人来说,宏可能有风险,但是对我来说,宏是我自己写的,我不可能不放心。

2025-11
19

随机应变,见招拆招

By xrspook @ 8:37:52 归类于: 烂日记

业务系统由从一期变成二期,摆在面前是两个格式化操作。当我做完第1个以后,我心里就很有底了,我知道第2个大概应该怎么做,也想清楚了输出的那些数据到底要放在哪里。一期的时候,我的原始数据从同事的Excel查询文件里获取,现在我需要做的就是多一步。首先得把数据从系统里导出,然后再执行我的VBA。

数据从系统导出,供VBA使用这里其实也是有个窍门的,一开始我也没想好,但是用了几天以后,我大概明白了。首先我得保证VBA跟源文件在同一个文件夹,这是我在脚本里写死的。其次,VBA文件只能是那个名字,只能是那个后缀,有一点不合适程序就会判定找不到那个文件,然后就会在那个文件夹里面建一个9KB大小的文件,名字是我需求的那个,实际上那个东西是打不开的,所以对新新手来说有迷惑性,但是当我一次又一次的遇到这个以后,我就习以为常了,看到那个9KB的东西我知道肯定因为我导出来的文件有些不对。

以前的浪潮系统我已经默认了只能用360极速打开,因为一期的时候他们只支持IE,而我用的浏览器是Firefox。不知道二期到底支持什么浏览器,反正我基本已经把360极速作为业务系统和OA系统的默认打开方式,其它东西基本不会通过那个打开。

因为导出的文件都是同样的名字,所以如果在某个文件夹里面不断保存,浏览器会很聪明地给第2个文件加个1,第3个文件加个2。我本想把那个文件覆盖掉,但360就是不让。因为我的电脑是默认显示文件后缀的,当我把那些有括号的1和2删除掉的时候,非常有可能就会删漏个空格,于是这就会导致VBA文件要读取源数据,实际上却找不到,接着就生成了那个9KB的玩意。怎么避免这个问题呢?这需要两个文件目录,我把浏览器下载的那个文件放在目录A。VBA文件放在目录B,目录B实际上也有一个以前的导出文件。把文件导出到目录A,然后再把目录A这个文件剪切到目录B。这种情况之下,windows允许我替换掉文件。那么我就能保证VBA能够找到适合的源,因为目录A已经没有了那个导出的文件,所以下一次下载的时候浏览器也不会给我自动添加后缀。虽然多了一个剪切粘贴的操作,但是整套流程下来非常顺畅,不会出现幺蛾子。在这种情况下,我的VBA依然无法正常运行,基本就意味着浪潮可能修改了那个查询,非常有可能是修改了字段名。比如切换系统的第1天,我很早就发现单据编号是错的,但是他们不能在我们作业的时候就上补丁,只能等我们作业完了才能修改,所以那天我只能用错的文件编号先做一波,然后第2天再重新来一次。当我第2天早上重新来的时候,发现又多了一些东西,单据编号改过来了。车船号本来在一列,终于分开了,但是当有车没船号或者有船没车,再或者车船号都没有的时候,没有在数据那写横杠。我还是得自己加工。一开始那里只有品种,补丁上去以后多了个二级品种,二级品种对我来说是毫无用处。最后一个修改的地方就是之前叫仓号的那个字段现在变成了货位。正是因为仓号变成了货位,车船号字段名没了,才让我的VBA读取数据的时候失败。他们每一次升级都不会告诉你,你也不知道他改动了什么,也就只有发现不对劲的时候再去见招拆招。

适应能力不强,还真的没法玩这些东西。

2025-11
17

汇总格式化

By xrspook @ 8:22:18 归类于: 烂日记

摆在我面前的格式化操作,从大的来说是两个格式化,从小的来说其实二者又有点区别。我自己的那个格式化是把明细数据整理好。因为导出的那些信息部分是完全缺失的,所以我需要建立新的字段,数据为空,后续手动录入,另外一些则属于没有直接给我数据,但是我可以根据已有的数据经过一系列的逻辑判断得出我需要的字段。相对来说,我的格式化需求要高一点,要慢慢来,因为字段的判定只要一急就会出错、不全面。另外的一个格式化则属于要做出一个汇总的数据。一开始我并不确定到底他们需要哪些信息,开会的时候我翻桌子了,他们意识到这个问题,也翻桌子了,我大概知道他们的用途是什么,因为好像那个东西我参与过,但具体内容是什么我不清楚。我需要他们给我一个截图,或者把已有的文件发给我,我自己去看到底是什么内容。

在他们把那个版本发给我之前,实际上我已经在琢磨怎么整那个。一开始我想到的是选择某些列得出一个明细,然后根据那个明细自动生成一个透视表,透视表里面的内容肯定足够他们填写相关的信息,但关键是他们想要的不是数据表,因为数据表很难复制粘贴。平时他们需要把那些东西转化为了一段文字贴到群里,数据透视表看上去的确更直观也不会错,但关键是图片这个东西很占空间,如果你几天不保存图片就会失效,所以如果要长期保存数据,还是纯文字比较靠谱。

一开始我尝试的是数据透视表,数据透视表很简单,但关键是不同版本的Excel数据透视表出来的默认格式不一样。他们干的这种事需要数据数据透视表不显示分类汇总,同时得重复所有标签。手工操作的话,这个很简单,但是用VBA控制的时候却发现自动生成的那些脚本又长又臭。那些又长又臭的东西到底能不能简化一些呢?VBA这个玩意的确可以通过录制生成,但关键是通过录制生成的那些东西通常都速度很慢,有很多废话,有些时候可能不太精准。所以我折腾了半个晚上,到底怎么把那些自动录屏出来的宏简化一些。虽然已经很努力,但是有个数据透视表不做分类汇总的那个坎好像挺难迈过去。

后来当他们把正在使用的那套查询数据库表发给我以后,发现或许我根本不需要生成透视表,实际上一个SQL的分组合并就能实现他们想要的东西,从那个查询表的内容看来,我的那个同事也是为他们做了这个事情。所以,整个逻辑就很清晰了,首先要看他们需要的那些数据在哪几列,刚好导出的那个大表上面的数据就能满足他们的要求,只是字段名有些不一样而已。这个很简单。所以逻辑就是把数据导出,删除最后一行,因为那个是汇总没有任何效果,然后把有数据的列全部转化为数字格式。因为神经病的浪潮为了他们自己方便所有列都设置为了文本,文本分组合并求和会完全不会起效。思路很简单,首先从原数据那里选取我需要的列,然后进行一些字段的重命名以及一些数字的转化分组合并,最后输出到我想要的地方。

一开始我并没有想好到底要输出到导出那个文件还是我有查询脚本的那个文件。经过一番的纠结和尝试以后,我感觉直接在我查询的文件通过ADO的方式查询那个导出的数据表,然后在查询的那个地方直接输出最便捷。一开始我想到的是要他们把转化好的内容贴到目标的表格,然后刷新一下。后来发现既然我都用了ADO。我根本不需要他们打开导出的原始表格我就能获取数据。

思路清晰以后,接下来的就只是执行。

2025-11
14

破烂到极点的切换系统

By xrspook @ 10:29:30 归类于: 烂日记

有种疯掉的感觉,周四下午被告知周五开始业务系统要停掉一期的,全面启用二期。一期跟二期系统都是浪潮开发的。系统招标的时候,我就做出过一个预测。如果二期是被别人中标了,我们还有一线生机,那如果浪潮中标了,我们就必死无疑,果然不出我所料。最大的那个领导说是我们吐槽太多了,这完全是因为他自己不使用,不直接面对那些每天我们都要重复面对的事情。

可以这么说,二期之前我只用过监控,因为一期的监控需要安装插件才能使用,非常的麻烦,而且安装了插件以后,还得对浏览器做很多设置,每次windows升级以后还会得一切重来。二期其它部分我几乎没有认真研究过,对我来说有一期系统换成二期系统,最大的问题只有两个。一个是因为一期系统做的汇总查询或者明细查询功能荡然无存或者说毫无用处,所以我们单位的人就直接做了查询来实现这个功能。业务部门在查数要数的时候都已经习惯了这种便捷的汇总方式,只需要刷新就可以获取数据库的内容。但关键是被告知第2天就要用二期的时候这个查询没有,因为不知道二期数据库的接口是什么,也不知道数据库的字段是什么,所以我们可以怎么办呢?那些不知情的说这里那里都可以查数,你查的那些数跟我们要的那些数是一回事吗?大概看上去差不多跟用起来有没有差距完全是两回事。除了Excel也查询不了数据库,快捷得到汇总数据以外,另外一个非常作死的还有一期系统挂了VPN,二期系统不挂VPN,首先是没有买这个模块,因为觉得它不安全,你不挂VPN,我怎么个工作呢?一年下来有那么多个周末,有那么多的节假日,但是你作业全从来都不停,算数的统计只有一个。还有一个就是你的作业从早上8点干到第二天凌晨4点。通常我是从早上8点干到晚上11点,365天每天都早8到晚11,我如果你算我加班费的话,我去劳动局一定可以把你告倒。在这种情况下,一直把人安排在这个单位的工位上根本毫无理由。开发系统的目的就是为了可以便捷。既然你开发了基于windows的,也开发了基于安卓的。安卓你就为了移动办公,难道说拿着个智能手机在外面你访问不了系统了?所以既然手机可以访问,为什么电脑就不允许这个操作呢?然后那个傻乎乎的中层说那就加班呗,你有给过我一分钱加班费?中层傻乎乎的第二个方案开向日葵?我的电脑24小时开着向日葵,如果我要远程访问,我只能设定一个很复杂的密码,但你怎么保证那个复杂的密码不被攻破呢?如果我办公室的电脑被攻破了,你的系统能保住?所以这个所谓的系统不能远程访问,简直就是一个不可理喻的傻逼行为。

那些脑子从来没有思考到位的说现在的查询大概能满足我的需求,但是我回去一对比就发现。的确看上去大部分差不多就那样了,但关键是有些字段是不对的,有些字段信息是缺失的。简单来说就是那个饼你不可能直接就这么吃了,不进行一系列的加工,根本没办法和我之前的数据匹配起来。类似差不多的还能转换,信息缺失的无解。

那个该死的会是下午15点开的,离下班只剩下不到两个小时,开完那个会离下班时间更加只剩下一个小时。从零开始,研究那些我明知不可能满足我需求的导出明细,然后再必须花少于一天的时间开发出尽可能适合我的版本。当然这个开发完全又是我自己折腾VBA,没人能帮我。除了我以外,其他人也有这个需求。所以除了我自己的版本以外,我还得帮忙折腾出其他人需要的版本。这些傻逼事情其实根本不应该堆积在24小时之内完成。既然你觉得换系统底线是2025-11-13,那么你得提前一周或者半个月通知人家要这么干,然后我们该准备的准备,发现问题你就得整改,整改完毕以后我们才开玩。

现在破烂到极点的东西被迫上线,我只能用恶心到极点来形容这件事。

© 2004 - 2026 我的天 | Theme by xrspook | Power by WordPress