☰
Intouch 2014R2+SQL Server 2012报表配置避坑
2026/10/27 2:42:55 网站建设 项目流程

简介:一份面向SCADA/HMI工程师与Intouch初学者的Word操作文档,聚焦WonderWare Intouch 2014 R2与SQL Server 2012的集成及Excel报表系统搭建,帮助读者理清从数据库配置、权限设置到数据写入与报表呈现的完整实现路径。压缩包仅含1个doc文件,约2.48MB,以图文步骤与脚本示例组织内容,适合作为现场实施或学习复盘时的查阅材料。文档按章节覆盖Intouch侧数据库写入准备、标记名字典与SQL访问管理器绑定、SQLConnect/SQLDisconnect连接管理、SQLInsert定时写入,以及Excel VBA报表模板和SQL数据库文件附加恢复等模块,对连接字符串、变量类型匹配、写入标记等关键细节有较具体的说明。读者可据此对照检查身份验证模式、内存标记命名、绑定列表字段对应关系及报表模板引用项,减少联调时的类型不匹配与连接失败问题。已有531人学习,可作为Intouch数据归档与报表开发的参考。

1. 环境先列清:Intouch 2014R2 加 SQL Server 2012 再挂 Excel 报表,装错一步全白干

凌晨两点被叫起来看报表,Excel 里一片空白,回头看 Intouch 2014R2 的画面数据还在正常跳动。这种场面我碰到过不止一次。Intouch 2014R2 采集的数据落到 SQL Server 2012,再由 Excel 做报表取数,是很多 SCADA 项目里最常见的组合,安装过程看着全是“下一步”,真跑起来问题全藏在身份验证模式、绑定列表列名和 VBA 引用这三处。

第一次装的人容易把它当成“装个数据库、连上就完事”,结果脚本里 SQLConnect 返回的连接号一直是 0,报表取不到一行数据,只能干瞪眼。这套环境适合做产线数据存档、班次日报、参数追溯的开发和运维,也适合接手别人做了一半的现场。下面按实际装一遍的顺序,从 SQL Server 2012 装起,一直走到 Excel 报表能刷出新数据。

2. SQL Server 2012 安装与身份验证模式:实例名、登录名、建表列类型一次对齐

数据库这一层是整条链路的底座。装歪了,后面 Intouch 侧脚本写得再漂亮也白搭。这一章把安装介质选择、身份验证模式、登录名权限、建库建表和数据库文件附加这几件事按顺序说清楚,每一步都给出可直接抄的命令或操作路径。

2.1 版本选择与实例名:先想清楚这台机器要存多久的数据

版本上,项目里常用的是 SQL Server 2012 标准版,授权允许的情况下也可以上企业版。Express 版能跑通整条链路,但单个数据库有 10GB 上限,做按秒或按分钟存档的产线数据,几个月就会顶到天花板,后面迁移库文件的麻烦远大于当初省下的授权。我的建议是:做演示或小规模试验用 Express,正式存档一律标准版起步。

实例名这块有个容易被忽略的点。默认实例的机器名直接写OP_01就行,命名实例必须写成OP_01\SCADA这种形式,连接字符串里的 Data Source 要跟着改。Intouch 侧那串连接字符串是硬编码在脚本里的,装完再改实例名意味着要重新下发脚本,所以装之前就把实例名定死。

管理工具方面,SQL Server 2012 的 SSMS 在安装介质里可以勾选,Express 版要单独装带 Tools 的包。装完之后从开始菜单进 “SQL Server Management Studio”,能连上本机实例,这一步过了再往下走。

提示:SSMS 的版本不必和数据库引擎完全一致,但 2012 的库不要用太新的 SSMS 去附加,兼容性提示会多出一堆噪音。

2.2 混合身份验证模式:只开 Windows 验证,Intouch 永远连不上

装完默认是“Windows 身份验证模式”,而 Intouch 的 SQLConnect 走的是 SQL 账号密码,这一步不改,后面所有脚本都会失败。改法在 SSMS 里:对象资源管理器根节点右键 → 属性 → 左侧选“安全性” → 右侧“服务器身份验证”选“SQL Server 和 Windows 身份验证模式”→ 确定 → 重启 SQL Server 服务。

重启完,展开“安全性”→“登录名”,新建一个供 Intouch 和 Excel 共用的登录名。这里有个取舍:直接用 sa 最省事,但 sa 是服务器级最高权限,报表端一旦被人拿到连接串,整个实例都暴露了。我一般单独建一个scada_writer登录名,只给它目标库的db_datareader和db_datawriter,够用且不越权。

-- 在 master 库执行:创建 SQL 登录名并只授予目标库的读写权限 USE master; GO CREATE LOGIN scada_writer WITH PASSWORD = 'Scada@2012', -- 按现场密码规范替换,别照抄 CHECK_POLICY = OFF, -- 老现场常有密码策略冲突,按需关闭 DEFAULT_DATABASE = YADC_BB; GO USE YADC_BB; GO CREATE USER scada_writer FOR LOGIN scada_writer; GO ALTER ROLE db_datareader ADD MEMBER scada_writer; ALTER ROLE db_datawriter ADD MEMBER scada_writer; GO

这段脚本做了三件事:建登录名、在当前库建对应的数据库用户、把这个用户加进读写角色。CHECK_POLICY = OFF是为老现场准备的,如果服务器开了密码复杂度策略而你又必须用简单密码,加上它才不会报“密码不符合要求”。DEFAULT_DATABASE指向目标库,避免登录后默认落在 master 里找不到表。

如果现场已经有一个现成的登录名,只是密码对不上,那就走属性页改密码,别重复建。

2.3 建库建表:列名和数据类型必须和 Intouch 变量严丝合缝

建库本身没难度,难在表结构。Intouch 的绑定列表是按“变量名对列名、变量类型对列类型”一一映射的,类型错一个,SQLInsert 就静默失败,日志里什么都看不到。这是我见过最多的一类翻车。

-- 建库,文件路径按现场磁盘规划调整,本例统一放 E:\DataBase CREATE DATABASE YADC_BB ON PRIMARY ( NAME = N'YADC_BB', FILENAME = N'E:\DataBase\YADC_BB.mdf', SIZE = 512MB, FILEGROWTH = 256MB ) LOG ON ( NAME = N'YADC_BB_log', FILENAME = N'E:\DataBase\YADC_BB_log.ldf', SIZE = 128MB, FILEGROWTH = 128MB ); GO USE YADC_BB; GO CREATE TABLE TDays ( RecTime DATETIME NOT NULL, -- 对应 Intouch 内存消息,格式必须是 yyyy-MM-dd HH:mm:ss TagValue FLOAT NULL, -- 对应内存实型,别用 decimal,OLEDB 映射会出偏差 TagStatus BIT NULL, -- 对应内存离散 NodeName NVARCHAR(64) NULL -- 对应内存消息,长度留够 ); GO

建表时把数据文件单独放到E:\DataBase是有意为之:后面做数据库附加恢复,整个目录拷走就能搬机器,不用去翻 SQL Server 默认的深层安装路径。日志文件和数据文件必须成对出现,只拷 mdf 是起不来的。

2.4 数据库文件附加:mdf 和 ldf 两个文件一个都不能少

现场换服务器、做历史数据迁移,走的就是附加这条路。做法是把DataBase整个目录拷到目标机的E:\下,然后在 SSMS 里“数据库”节点右键 → 附加 → 添加 → 定位到YADC_BB.mdf→ 确定。命令行方式更适合批处理:

-- 附加历史库,注意 FOR ATTACH 后路径要指向实际拷贝位置 USE master; GO CREATE DATABASE YADC_BB_History ON (FILENAME = N'E:\DataBase\YADC_BB.mdf'), (FILENAME = N'E:\DataBase\YADC_BB_log.ldf') FOR ATTACH; GO

附加失败最常见的原因是权限:SQL Server 服务账户对E:\DataBase没有读权限,报“操作系统拒绝访问”。解决办法是给NT SERVICE\MSSQLSERVER或对应的服务账户加目录读权限,不是去改文件属性里的只读勾。另一个原因是目标实例版本低于源实例,这种只能升级目标实例,没有后悔药。

3. Intouch 2014R2 侧的准备:时间格式、标记名字典与条件脚本的位置

数据库通了不代表 Intouch 能写进去。这一层要做三件事:把系统时间格式固定下来、在标记名字典里建好承载连接状态和数据的变量、把脚本挂到正确的触发点上。顺序不能乱,先建标记再写脚本,否则脚本编辑器里根本选不到变量。

3.1 系统日期时间格式:这一步不改,SQL 里全是 1900-01-01

控制面板 → 区域和语言 → 其他设置 → 日期选项卡,短日期改成yyyy-MM-dd;时间选项卡,长时间改成HH:mm:ss。改完重启 Intouch,让运行时重新读取区域设置。

为什么这么较真?Intouch 的内存消息变量往 SQL 的 datetime 列写的时候,是字符串转日期。区域设置是M/d/yyyy的机器,写2024/3/5过去,SQL 可能按d/M/yyyy解析,直接错位成 5 月 3 日,或者越界后落成 1900-01-01。这种错不会报错,只会在报表里体现为“数据全堆在月初”,排查起来很费劲。

时间格式统一之后,所有操作站都按同一个模板配,别指望每台机器默认设置一致。

3.2 标记名字典:四个必须提前建好的内存变量

标记名字典是 Intouch 的核心数据结构,这一层建的变量要能被脚本和绑定列表同时引用。按下面的表建,名字不要改,后面脚本里是直接引用的。

标记名类型用途备注
Connid1内存整型保存 SQLConnect 返回的连接号为 0 表示未连接
WSQLS内存离散标记本轮是否已写入防重复写入的闸门
GetDateTimeS内存消息保存取数时间字符串长度给 32 够用
NodeName内存消息保存本机计算机名多操作站时用来区分数据来源

建的时候注意“内存消息”的初始值留空,不要填默认字符串,否则脚本里的相等判断会误判。Connid1的初值设 0,方便后面用IF Connid1 == 0判断连接是否建立。

3.3 条件脚本:$Second==3 与 $Second==5 各管一段

Intouch 的脚本视图下有两个入口:条件脚本和应用程序脚本。条件脚本按表达式触发,适合做周期性动作;应用程序脚本挂在运行时和关闭时,适合做一次性的连接建立和释放。

先建连接建立的条件脚本,条件写$Second==3,条件类型选“为真时”:

' 条件:$Second == 3,为真时执行 ' 作用:整点秒数为 3 时建立一次数据库连接,避免重复连接 IF Connid1 == 0 THEN SQLConnect( Connid1, "provider=sqloledb;Data Source=OP_01;Initial Catalog=YADC_BB;UserID=scada_writer;Password=Scada@2012" ); ENDIF; ' 取本机名,131 是缓冲区长度参数,按计算机名实际长度给 GetNodeName( NodeName, 131 );

这段里Connid1 == 0的判断是关键。条件脚本每秒都可能被命中,没有这个判断就会反复调用 SQLConnect,连接池被耗尽,现象是运行几小时后所有写入突然停摆,重启 Intouch 才恢复。

写入脚本挂在$Second==5,负责判断时间和写入动作:

' 条件:$Second == 5,为真时执行 ' 作用:在每小时最后两分钟,把当前值写入 TDays 表一次 IF NodeName == "OP_01" THEN ' 只有指定操作站负责写入 IF $Minute >= 58 THEN ' 只在 58、59 分触发 IF WSQLS == 0 THEN ' 本轮尚未写入才继续 SQLInsert( Connid1, "TDays", "TDays" ); ' 第一个 TDays 是表名,第二个是绑定列表名 WSQLS = 1; ' 置位,防止同一分钟内重复写 ENDIF; ENDIF; ENDIF;

SQLInsert的两个参数容易搞混:第一个是数据库里的物理表名,第二个是 Intouch 里绑定列表的名字,两者可以不同名,但列对应关系必须是按绑定列表来的。WSQLS在这里充当闸门,置位后下一分钟不会重复写。复位动作放到另一个条件里,比如$Minute == 0时执行WSQLS = 0;,把闸门放开。置位和复位写在同一个扫描周期里,等于没判断,这条后面还会展开。

3.4 应用程序脚本:启动时连接、关闭时断开

除了条件脚本,应用程序脚本里要加一段关闭逻辑。位置在脚本视图 → 应用程序 → 关闭时:

' 应用程序关闭时执行:释放数据库连接,避免连接句柄泄漏 IF Connid1 <> 0 THEN SQLDisconnect( Connid1 ); Connid1 = 0; ENDIF;

不写这一段,Intouch 每次重启都会在 SQL Server 侧留下一个孤立的会话,运行久了sys.dm_exec_sessions里能堆出几十个睡眠连接,最后连接数打满,新连接建不上来。这是典型的慢性病,装的时候不显,跑一个月才发作。

4. 绑定列表与三条 SQL 脚本:连接、写入、断开怎么排

前面建好了库表和变量,这一章把两边接起来。核心就三件事:绑定列表做字段映射、SQLConnect 拼连接串、SQLInsert 落数据。Excel 报表的 VBA 取数也放在这一章,因为它的连接串和 Intouch 侧是同一套逻辑,一起看更容易理解参数含义。

4.1 绑定列表:变量名对列名,类型对类型

在 Intouch 左侧工具视图最下面找“SQL 访问管理器”,展开后选“绑定列表”,新建一个名为TDays的绑定列表。列表里逐行加要写入的变量,每一行填三样东西:Intouch 变量名、对应的数据库列名、数据类型。

映射规则很死:内存消息对NVARCHAR/VARCHAR,内存实型对FLOAT,内存离散对BIT,内存整型对INT。类型不匹配时 SQLInsert 不报错,只是返回一个非零错误码,脚本里如果不接这个返回值,表现就是“脚本执行了但表里没数据”。

绑定列表建完后,建议先在 SQL 访问管理器里用“测试”功能跑一次,能返回成功再往下写脚本。这一步花两分钟,省掉后面半小时的猜谜。

4.2 SQLConnect 的五个参数:连接串里每一段都不能写错

连接串是整条链路里最容易抄错的地方,五个参数用分号隔开,每段前面带等号。逐个说明:

参数含义现场常见写法易错点
Provider数据访问接口sqloledb不要随手改成 SQLNCLI11,位数不一致会报找不到提供程序
Data Source数据库所在机器OP_01或OP_01\SCADA命名实例必须带反斜杠和实例名
Initial Catalog数据库名YADC_BB不是表名,别填成 TDays
User ID登录名scada_writer大小写一般不敏感,但别带空格
Password密码按现场实际含分号会截断连接串,需要换密码
' 完整连接串示例,字符串里的分号是分隔符,密码里不能出现分号 SQLConnect( Connid1, "provider=sqloledb;Data Source=OP_01;Initial Catalog=YADC_BB;UserID=scada_writer;Password=Scada@2012" );

provider=sqloledb是 Windows 自带的旧版 OLEDB 提供程序,Intouch 2014R2 是 32 位进程,调用的是 32 位版本,在 64 位系统上也能正常找到。如果现场因为其他系统要求改装了 SQL Server Native Client,那就得确认 32 位组件装上了,否则连接串里换成SQLNCLI11之后会直接报“未找到提供程序”,而且这个错误在 Intouch 的脚本里不会弹窗,只在日志里留一行,很容易被当成“脚本没执行”。

4.3 SQLInsert 的时序:WSQLS 置位和复位不能挤在一个周期

把前面两段脚本拼成完整的写入流程,看清楚闸门的位置:

' 条件:$Second == 5,为真时执行 ' 完整写入逻辑:判断站点 → 判断时段 → 判断闸门 → 写入 → 置位 IF NodeName == "OP_01" THEN IF $Minute >= 58 AND $Minute <= 59 THEN IF WSQLS == 0 THEN SQLInsert( Connid1, "TDays", "TDays" ); WSQLS = 1; ' 置位,本轮结束 ENDIF; ENDIF; ENDIF; ' 另一个条件脚本:$Minute == 0 且 $Second == 5 时执行 ' 作用:跨过整点后复位闸门,为下一个小时做准备 WSQLS = 0;

置位和复位分在两个条件里,靠分钟数区分,这样同一分钟内不会重复写,跨小时又能自动放开。把WSQLS = 0紧跟在WSQLS = 1后面写,等于闸门从来没关上,58 分和 59 分各写一次还只是小问题,如果条件改成$Second级别,一分钟能写进去几十条重复记录。

另外,SQLInsert的返回值存在Connid1之外的错误码里,真要严谨可以读SQLGetLastError之类的接口,但现场更实用的做法是在测试阶段盯表行数,稳定后再简化。

4.4 Excel 报表模板与 VBA 引用:从 SQL Server 2012 取数的落地配置

Excel 这边要做两件事:模板分页和 VBA 引用。模板一般两页——“控制面板”放查询起止时间和刷新按钮,“参数日报”放数据区,两页之间靠 VBA 传参。

Excel 的宏安全先放开:文件 → 选项 → 信任中心 → 信任中心设置 → 宏设置,选“启用所有宏”并把文件所在目录加进受信任位置。这一步不做,模板发到操作站上按钮点了没反应,用户只会以为文件坏了。

VBA 引用在编辑器里点“工具”→“引用”,至少勾三项:Microsoft ActiveX Data Objects 2.8 Library(数据库连接)、Microsoft Excel 16.0 Object Library(表格操作)、Microsoft Office 16.0 Object Library(通用对象)。版本号跟着现场装的 Office 走,勾的时候看路径对不对,勾错了会在编译时报“用户定义类型未定义”。

' 从 SQL Server 2012 取数写入“参数日报”页,连接串与 Intouch 侧保持同一套参数 Sub LoadDailyReport() Dim conn As Object Dim rs As Object Dim sql As String Set conn = CreateObject("ADODB.Connection") ' Provider 与 Intouch 保持一致,Data Source 换成数据库机器名 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=OP_01;" & _ "Initial Catalog=YADC_BB;User ID=scada_writer;Password=Scada@2012;" conn.Open ' 按控制面板页上的起止日期过滤,B1、B2 分别放开始和结束时间 sql = "SELECT RecTime, TagValue, NodeName FROM TDays " & _ "WHERE RecTime BETWEEN '" & Format(Sheets("控制面板").Range("B1").Value, "yyyy-mm-dd hh:mm:ss") & "' " & _ "AND '" & Format(Sheets("控制面板").Range("B2").Value, "yyyy-mm-dd hh:mm:ss") & "' ORDER BY RecTime" Set rs = conn.Execute(sql) Sheets("参数日报").Range("A2").CopyFromRecordset rs rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub

代码里的日期用Format显式转成yyyy-mm-dd hh:mm:ss,不要依赖单元格默认格式,否则控制面板上显示的是本地日期,拼进 SQL 就变成另一种解析结果。CopyFromRecordset一次性把结果集刷进单元格,几千行以内性能可以接受,数据量大就得分页查询。

连接串里的密码明文写在 VBA 里,安全性一般,现场的常见做法是把密码放到隐藏工作表或者单独配置文件,VBA 只读配置。这一步做不做看项目要求,但至少别把这段代码连同密码一起发到公共目录。

5. 避坑与排查:五条踩过的记录,条条都能对上号

这一章把现场最常撞上的五个问题按“现象→原因→解决”写一遍。看着琐碎,但每一条我都至少遇到过一次,提前知道能省掉大半夜的排查。

5.1 连接测试通过,SQLInsert 却写不进数据

现象:在 SQL 访问管理器里测试绑定列表返回成功,运行时的脚本也没报错,但TDays表里一行数据都没有。

原因:绑定列表里某个变量的类型和表列类型对不上,比如TagValue在 Intouch 里是内存整型,表里定义成FLOAT,OLEDB 映射时会静默失败;或者列名拼写差一个字母,绑定列表认的是列名,不是位置。

解决:把绑定列表逐行对照表结构检查一遍,类型严格按“消息对 NVARCHAR、实型对 FLOAT、离散对 BIT”的规则来。检查完先在测试库里手工插一条,确认表本身可写,再排除脚本侧问题。

5.2 Excel 在服务器上能跑,到操作站报“未找到提供程序”

现象:同一份报表模板,在数据库服务器上打开能正常刷新,拷到操作站上点按钮弹出“未找到提供程序。该程序可能未正确安装”。

原因:模板里用的是SQLNCLI11这类需要单独安装的提供程序,而操作站上只装了 Office,没装对应的 32 位驱动;或者模板是在 64 位 Office 下做的,操作站装的是 32 位 Office,位数对不上。

解决:统一改成Provider=SQLOLEDB,这是 Windows 自带组件,32 位和 64 位都有,兼容性最好。如果必须用新版驱动,那就把 32 位组件补装到每台操作站,并且记住 Office 位数决定用哪一套。

5.3 整点那条数据重复或丢失

现象:报表里 58 分和 59 分各出现两条相同记录,或者某一小时直接整条缺失。

原因:重复是WSQLS置位后没复位,或者复位条件和置位条件落在同一个扫描周期;缺失多半是$Minute >= 58的判断配合脚本执行周期错位,比如脚本挂在$Second == 5上,而运行时那一刻正好在执行画面切换,条件被跳过。

解决:置位和复位分两个条件脚本,用分钟数区分;写入时段放宽到 58 到 59 两个整分钟,给执行留余量。改完在测试库上连续跑两个小时,对比系统时间和表里的RecTime,能对上再上线。

5.4 附加数据库报“操作系统拒绝访问”

现象:把DataBase目录拷到新机器,SSMS 里附加 mdf 时提示拒绝访问,文件明明存在。

原因:SQL Server 服务账户对新目录没有读权限,或者拷贝过来的文件继承了只读属性。

解决:给NT SERVICE\MSSQLSERVER(命名实例换成对应账户)加目录读取权限,去掉文件只读勾。别用管理员身份去改,改的是服务账户的权限,不是当前登录用户的。

5.5 时间格式改了,报表里的日期还是错位

现象:按文档把短日期改成yyyy-MM-dd,重启 Intouch 后新写入的数据仍然错位。

原因:Intouch 运行时对区域设置的读取发生在启动阶段,改系统设置前已经启动的运行时不会自动刷新;或者脚本里拼日期字符串时用了自定义格式,绕过了系统设置。

解决:改完区域设置必须完整重启 Intouch 运行时,包括 IDE 和运行态。脚本里凡是拼日期的位置,统一用显式格式化函数,不依赖系统默认格式。

6. 装完怎么验证跑通:从一条记录到一张日报的完整链路检查

装完不算完,得有一条能走通的验证路径。我的习惯是按“库→变量→脚本→表→报表”的顺序倒着查一遍,每一步都留个可观测的证据,出问题能立刻定位到哪一层。

第一步验库。在 SSMS 里执行查询,确认表结构、列类型、登录名权限都对得上:

-- 验证 1:表结构、列类型 SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TDays'; -- 验证 2:手工插一条,确认 scada_writer 有写权限 INSERT INTO TDays (RecTime, TagValue, TagStatus, NodeName) VALUES (GETDATE(), 12.5, 1, 'OP_01'); -- 验证 3:按时间倒序看最近 10 条 SELECT TOP 10 * FROM TDays ORDER BY RecTime DESC;

手工插入成功,说明库、权限、表结构都没问题,剩下的问题一定在 Intouch 侧。

第二步验变量和连接。在 Intouch 的标记名字典里打开Connid1的实时监视,运行时启动后它应该是一个非零整数;如果是 0,说明 SQLConnect 没成功,回到连接串检查 Data Source 和登录名。NodeName应该显示本机计算机名,显示为空说明GetNodeName调用失败或缓冲区长度参数给小了。

第三步验写入。把系统时间临时调到 58 分附近做测试是常见做法,但要清楚这会污染历史趋势数据,只能在测试库和测试站上做。更稳妥的办法是临时把条件改成$Second == 5直接触发,验证完再改回来。表里出现新记录且RecTime与系统时间一致,写入链路就算通了。

第四步验报表。打开 Excel 模板,控制面板页填上起止时间,点刷新,参数日报页应该刷出与表里一致的记录数。对不上时先看 VBA 里拼出来的 SQL 语句,把sql变量打印到立即窗口,粘到 SSMS 里跑一遍,能执行说明是 Excel 侧的问题,不能执行就是字符串拼接的格式问题。

验证项观察位置通过标准不通过先查
数据库可写SSMS 手工插入插入成功且能查回登录名权限、库状态
连接号有效Connid1 实时值非 0 整数连接串、实例名、身份验证模式
本机名可取NodeName 实时值与计算机名一致GetNodeName 长度参数
写入不重复TDays 表按小时分组每小时 1 条WSQLS 置位复位时序
报表取数一致参数日报页行数与查询结果一致VBA 连接串、日期格式

这套检查我一般会在交付前完整走一遍,并且把每一步的截图和脚本原文留在项目目录里。有次现场换服务器,就是因为当初没留WSQLS复位那段条件的截图,三个人对着新环境重写了半天脚本,最后还是翻出旧机器的备份才想起来。从那以后,我每次装完这套环境,都会把连接串、绑定列表、两段条件脚本和 VBA 引用清单一起归档,验证表也照着填一遍再签字。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询