金蝶云星空(K3Cloud)中的核算维度

朋友公司在用金蝶云星空,他需要将凭证数据通过OpenAPI的方式下载到本地数据库,以便后续的一些业务分析,这个下载的接口对接起来挺方便的,轮训自增Id(作为凭证号)去获取每个凭证的数据和分录。其中有用到核算维度,这个概念跟Infor LN ERP财务模块中的Dimensions是同样的概念。

以下金蝶运行接截图均来自网络

01015b97af3420464cd0bef3eea136410df0.png

自定义核算维度后,关联到科目,并指定是否是必填。

Loading

使用SQL模糊查询手动删除WordPress垃圾留言

虽然用了最著名的Akismet 反垃圾评论插件,但是还是会出现几千条垃圾留言。

我已经删除过一次了,我记得大概3000多条,这次又来了近2000条,特点还是来自.ru后缀,也就是俄罗斯的垃圾评论群发软件搞得。

好了,打开phpMyAdmin,登录数据库,点击SQL,粘贴以下SQL,点击执行,搞定!

DELETE FROM `cuiwenyuan_com`.`wp_comments` WHERE `wp_comments`.`comment_author_email` LIKE '%.ru%'

如果还想对内容筛选并自动删除,可以使用如下SQL

DELETE FROM `cuiwenyuan_com`.`wp_comments` WHERE `wp_comments`.`comment_author_email` LIKE '%.ru%' OR `wp_comments`.`comment_content` LIKE '%.ru%'

Loading

Bose SoundTouch 27.0.0.3377 for Windows下载地址

距离上一篇《Bose SoundTouch 26.0.0.3251 for Windows下载地址》又快一年了,

老规矩:因为文件较大,请加我微信,注明Bose,微信发下您的邮箱地址,我发给你安装文件。

FILE SIZE/文件大小:112 MB

PC running Windows 7, Windows 8 or Windows 10

一款用于 SoundTouch® Wi-Fi® 音乐系统的免费应用程序
借助 SoundTouch® 应用程序,您可以使用电脑控制 Bose® SoundTouch® 系统。使用该应用程序可收听互联网广播、获得音乐服务或播放您的音乐库。立即开始播放流媒体音乐,或根据您喜欢的音乐内容使用该应用程序对您的系统进行轻松的个性化预设。

Loading

U盘克隆/复制/对拷/拷贝工具,不妨试试这款:WinImage

近期有个需求,要从一个U盘对拷出一个完全一样的U盘内容,带一些隐藏文件及系统引导功能。并且U盘的容量有如下两种情况:

1、容量完全一样
2、新U盘的容量大

通过微信群里的兄弟,了解到这款WinImage,官方网站:http://www.winimage.com/download.htm,真得很好用,特别推荐给有类似需要的朋友。

什么是 WinImage?

WinImage 是一个成熟的磁盘映像套件,用于轻松创建、读取和编辑多种映像格式和文件系统,包括 DMF、VHD、FAT、ISO、NTFS 和 Linux。磁盘映像是物理磁盘(软盘、CD-ROM、硬盘、USB、VHD 磁盘等)或保留原始结构的分区的精确副本。使用 WinImage,您可以在硬盘驱动器或其他媒体上重新创建磁盘映像、查看其内容、提取基于映像的文件、添加新文件和目录、更改格式以及对映像进行碎片整理。所有这些以及更多功能都在一个直观的用户界面中提供,该界面可立即实现成像。

该程序在家庭和办公室中有许多实用用途。作为一名认真的 PC 用户,您可能拥有大量旧但仍然有用的软盘。使用 WinImage,您可以将它们转换为磁盘映像,这些映像可以存储在硬盘驱动器上并在需要时重新创建。结合 CD 创建工具,WinImage 可以帮助您创建自己的带有硬件诊断或病毒清除软件的自定义启动盘,使有问题的 PC 备份并运行,而无需在 Windows 中运行。作为硬盘备份方案,WinImage 允许您在经历过硬盘崩溃或软件损坏的机器上恢复系统和配置时节省数小时甚至数天。与家庭和办公室一样,这种能力是培训课程的必备条件,在这种情况下,快速恢复损坏的 PC 配置至关重要。

WinImage 有很多很酷的功能!

从可移动驱动器(如 USB 驱动器)、CD-ROM、软盘、从磁盘映像中提取文件,创建空磁盘映像,
将文件和目录注入现有的磁盘映像中,
更改磁盘映像格式,
对磁盘映像进行碎片整理,
强大的“批处理助手”模式,让你自动化多项操作,
还有很多!

WinImage 使用现代、尖端的 Windows 界面,可用于 Windows 95/98 和 Windows NT/2000/XP/2003 服务器/Windows 7/Windows 10等的英语、法语、德语、意大利语、葡萄牙语和西班牙语、中文等。

WinImage 是一个共享软件程序。

WinImage 是共享软件。您可以在 30 天的试用期内对其进行评估。30 天后,如果您想继续使用 WinImage,您需要注册。单击 此处下载 WinImage

Loading

Bartender标签设计打印软件中使用Visual Basic脚本自定义组合数据

Bartender软件很强大,近期有用户需要在一个二维码中展示多个数据库字段的组合信息,使用Visual Basic脚本的方式,非常容易就达成了。

另外,用于显示动态的年、月、日、季度,当年第几天等这种信息,直接使用Visual Basic自带的函数就可以搞定。

Loading

非常规方式处理Oracle+.NET开发全球化的时区显示

咨询了几个大牛有关.NET开发中全球化的时区显示问题,大家的意见有三个:

1、使用UTC Time记录到数据库,展示的时候根据用户所选择的时区进行转换展示
2、使用固定时区DateTime记录到数据库,展示的时候根据用户所选择的时区进行转换展示
3、记录timestamp到数据库,选择DateTime.UTCTime转为秒或毫秒级别的timestamp,展示的时候转为时间类型,并根据用户所选择的时区进行转换展示

大部分人喜欢1,其次是3,最后是2

而我今天要分享的这个Oracle数据库下的开发,有个前提就是我不能修改数据库,也不能修改写入数据库的时间是指定时区的,因为Infor LN ERP中更新此时间字段,幸运的是它本来就是UTC Time。

但是呢,我不能直接用第1条方案,因为我有些筛选条件,根据用户的日期(时间)还需要筛选数据,那么我不想:既修改展示阶段的时间时区,又修改查询时候的输入时间。

于是就有了今天的非常规方案:sessiontimezone

当我们在Oracle数据库中执行以下SQL时,可以知道数据库的时区和我当前连接的时区。

SELECT BTIMEZONE,SESSIONTIMEZONE,TZ_OFFSET(DBTIMEZONE),TZ_OFFSET(SESSIONTIMEZONE) FROM DUAL;

那么我们就可以使用:TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24,来动态的展示当前连接所在时区的时间了

SELECT TO_CHAR(A.T$CNFT + TO_NUMBER(SUBSTR(TZ_OFFSET('" + GetUserTimeZone() + "'),1,3))/24, 'YYYY-MM-DD HH24:MI:SS') AS ConfirmedTime FROM MYTABLE A

此处的GetUserTimeZone就是根据当前用户的市区设置,读取到一个“-5:00”或”6:00″形式的TimeZone。

至于用户的时区是根据用户所属的国家来还是根据用户的个人设定,这里的逻辑可以灵活设定优先级。

虽然非常规方案可以满足需要,但是不具备普遍性,性能上也会很依赖Oracle数据的配置。

如果您碰巧也有类似的场景,不妨试试这个方案。

Loading

2021开始用DBeaver连接各种数据库:强烈推荐这款免费开源的通用数据库工具

平常用微软的SQL Server(MSSQL)数据库最多,用的是微软的SQL Server Management Studio (SSMS) 客户端,免费的。

Oracle使用频率次之,用的是它自家的Oracle SQL Developer,也是免费的。

MySQL数据库使用的最少,用得是以前介绍过的SQLyog,免费试用版,过期了也不用了。

最近又要连接MySQL数据库了,听说Navicat for MySQL不错,企业版永久授权活动价也就1600多块钱。但用得实在不多,就懒得买了。

在捣鼓Ubuntu Server的虚拟机下Ngnix的过程中,安装了Ubuntu Desktop版本,通过其App Store找到了DBeaver CE(Community Edition社区版),评价很高,并且免费开源。

在Ubuntu下体验了一下,还挺不错,支持很多数据库,使用时自动下载相应的数据库驱动。

于是在Windows下就正式启用了,下载的速度不快,官网是:DBeaver Community | Free Universal Database Tool

这款软件定位是免费开源的通用数据库工具:为开发者、数据库管理员、分析师和所有需要使用数据库的人提供免费的多平台数据库工具。支持所有流行的数据库:MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Server、Sybase、MS Access、Teradata、Firebird、Apache Hive、Phoenix、Presto等。

软件是基于Java开发的,所以支持跨平台:Linux、Windows、Mac都支持。除了社区版和企业版,它还有云端的基于浏览器的版本。

安装后首次运行会问你要不要创建一个SQLite的示例数据库,用于探索软件。这个引导功能做的挺赞,必须赞一下。

我试了访问MySQL、SQL Server,体验挺不错的,第一时间就把过期的SQLyog删除了。

后续我会深度用一下它的MySQL和Oracle连接数据库,请关注后续更新。

如果你也有类似管理MySQL的需要,不妨试试这款DBeaver:非常强大易用的数据库管理和开发工具。

Loading

Oracle中如何获取当年第几周、第几天,当月第几周、第几天等

最近弄有关标签上的日期码DATECODE,遇到了自动生成的问题,这个呢可以在C#程序中根据日期自动生成,也可以通过数据库生成。今天先介绍下数据库生成,这里用Oracle数据库。

先来说一下需求:日期格式需要取年的后两位+月份转为A-L+当月第几周,如21I1就是今天的日期码。

相应的Oracle SQl语句如下:

SELECT TO_CHAR(SYSDATE, 'YY')||
DECODE(TO_CHAR(SYSDATE,'MM'),'01','A','02','B','03','C','04','D','05','E','06','F','07','G','08','H','09','I','10','J','11','K','12','L','MM')||
TO_CHAR(SYSDATE,'W') AS DATECODE FROM DUAL;

可能你会问,这个周是9月份的第二个周了,为啥显示为第1周?

有必要把一些常用的SQl解释下。

SELECT TO_CHAR(SYSDATE, 'w') FROM DUAL; --1个月中的第几周
(从每月1号开始算,日期+6天为每1周结尾)
SELECT TO_CHAR(SYSDATE, 'ww') FROM DUAL; --1年中的第几周(每年1月1日为第1周开始,日期+6天为每1周结尾)
SELECT TO_CHAR(SYSDATE, 'iw') FROM DUAL; --1年中的第几周(星期一至星期日算1周,且每年的第一个星期一为第1周)
SELECT TO_CHAR(SYSDATE, 'd') FROM DUAL; --1周的第几天
SELECT TO_CHAR(SYSDATE, 'day') FROM DUAL; --当前日期是星期几,可设置显示英文还是中文
SELECT TO_CHAR(SYSDATE, 'ddd') FROM DUAL; --1年中第几天
SELECT TO_CHAR(SYSDATE,'q') FROM DUAL; --1年中第几季度

Loading

已提交的文件在.gitignore加入忽略规则不生效原因和解决

上次介绍过《GitHub Desktop清除本地缓存》,现在VS2019和VS2022自带了Git的功能,一般不需要安装GitHub Desktop了,但遇到类似的“Git-忽略规则(.gitignore配置)不生效”或者“解决已提交的文件在.gitignore中加入忽略后无效的问题”

这里介绍另外一种处理办法,那就是安装Git的命令行客户端:http://git-scm.com/download/win

安装完毕后,找到你的源码仓库所在文件目录,鼠标右键点击,选择Git Bash Here。

会看到如下弹出的界面

输入如下命令:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

执行完毕,就搞定了!

解释一下这3行代码的意思:

1、删除本机的Git缓存(Git的记录,而不是文件本身)
2、将所有文件重新提交
3、提交到本地当前分支

Loading

手贱玩坑自己填:ExecuteNonQuery返回-1

最近手贱,将Oracle.ManagedDataAccess升级到19.12.0,原来运行正常(其实有问题)的代码忽然出问题了。

后来一条是发现所有BEGIN END包裹的UPDATE语句,现在都是返回-1,而不是想要的影响的行数了。

其实我所使用的DotNet.Util的底层类库中ExecuteNonQuery();默认值就是-1.

var result = -1;

并且呢,本来ExecuteNonQuery()在执行UPDATE、INSERT以及DELETE语句时,返回值为该命令所影响的行数。这是这个方法的建议用法。

如果用这个执行SELECT语句,不会返回影响的行数或者记录,而返回-1,不论查询结果有没有记录都会返回-1。

同理,如果执行任何CREATE、ALTER、TRUNCATE创建/修改/删除表、字段、索引等语句,同样返回-1。

既然明白了原理,但还得使用一次性多个SQL一起执行,没办法的办法,只能硬着头皮,用个馊主意。

针对BEGIN END的调用,明确知道包含BEGIN END的,就返回一个绝对值,代表成功了。

//return result;
//return -1 if BEGIN END
return Math.Abs(result);

我知道这样做不对,不好。

谁有好办法,分享下。

比方说现在EF里面的做法,或者ORM这些怎么处理的?

等我有时间去研究下SqlSugar或者FreeSql这类ORM看看他们怎么处理的。

Loading