组态王KVADODBGrid日期查询实战:SQL写法与避坑指南
简介正在使用组态王进行历史数据库查询的工程师常需要处理日期类型字段的筛选问题。这份精品文档专门讲解了KVADODBGrid控件的应用方法从添加两个日期时间控件、编写CLOSEUP事件转换日期格式到拼接Where查询条件、执行FetchData取数均给出了可直接套用的命令语言示例。文档针对月份或日期小于10时需补零的细节提供了完整的分支判断写法也演示了如何使用{d...}语法实现时间段查询并通过Editable属性与SQLUpdate()函数完成查询后的数据编辑与回写。资源仅有1个doc文件压缩包约35KB内容高度聚焦适合作为组态王二次开发人员的快速参考。目前已有183人学习浏览尤其适合需要快速实现组态王与数据库联动的自动化工程师、上位机开发人员。1. 组态王 KVADODBGrid 控件日期字段查询难住不少人做上位机的人应该都摸过组态王里那个 KVADODBGrid 控件表格绑定数据库、显示记录集看着挺方便。可一旦条件里带上日期字段经常是查不出数据、报语法错、或者显示一堆莫名其妙的记录。我见过不少人在这个控件上翻车查日期差点把数据库翻了底朝天。这份文档就是专门讲清楚「在组态王中用 KVADODBGrid 控件查询数据库日期类型字段」这件事的适合正在做组态画面数据查询、搞过报表和趋势回放的工程师。文档里把控件属性、SQL 写法、日期格式处理和常见坑都盘了一遍照着做基本能直接落地不用再去试错。2. 环境与准备工作先把数据库和控件状态搞对2.1 数据库表结构设计与日期字段选型KVADODBGrid 本身只是一个展示和查询的壳真正决定日期查询能不能成的是底层数据库表设计。我习惯先建一张测试表字段不需要多但日期字段必须单独拎出来设计。常见做法是用 SQL Server 或 Access组态王对这两种支持最稳。测试表结构大致如下CREATE TABLE HistoryData ( ID INT PRIMARY KEY, TagName NVARCHAR(50), RecordTime DATETIME, Value FLOAT )这段建表 SQL 里有几个关键点RecordTime用的是DATETIME它同时包含日期和时间查询的时候如果只按日期筛容易把当天凌晨的 00:00:00 边界问题带出来。组态王的 KVADODBGrid 对字段名大小写不敏感但字段类型最好别用VARCHAR存日期否则后面查询条件里的比较运算会变成字符串比较结果完全不可控。我在某水处理项目里就见过把日期存成文本的表查询时大于小于全乱套这种坑最好在设计阶段就避开。如果你用的是 Access字段类型选择“日期/时间”内部存储和 SQL Server 的 DATETIME 逻辑一致。需要注意 Access 对日期的分隔符默认是#这和 SQL Server 的单引号写法不同文档里也有提到这个差异。用组态王做上位机的项目底层库最常见就是这两种先把表结构定下来后面的控件连接才省心。2.2 KVADODBGrid 控件插入与属性配置新建组态王画面后在工具箱里找到 KVADODBGrid 控件拖到画面上。这个控件类似一个网格表格双击进入属性设置页。需要重点配置几个属性我整理了一张表属性建议值作用DataSourceName系统ODBC数据源名控件通过它连接数据库ConnectionString留空或按需覆盖有些版本可以直接写连接串优先级高于数据源RecordSourceSELECT 语句控件显示的记录集来源Font宋体 9号保证中文显示正常ReadOnlyTrue避免误操作修改数据实际连库时我一般不用 ConnectionString 直接写而是先在系统 ODBC 里配置好数据源控件里只填 DataSourceName。这样做的好处是换数据库机器时不用改画面脚本只改 ODBC 配置。不过要注意DataSourceName在某些组态王版本里显示为DataSource或者英文属性名不同版本控件属性名略有差异。RecordSource 可以直接在属性里写死一个查询语句例如SELECT ID, TagName, RecordTime, Value FROM HistoryData这样画面上就能看到表里的全部数据证明控件和数据库之间链路是通的。但这不是最终目的实际项目里需要根据用户在画面输入的日期范围动态生成 SQL这就引出了下一章的查询实现。3. 日期查询实现SQL 拼接、参数传递与边界控制3.1 组态王脚本变量与日期时间转换组态王的脚本语言类似 C 语言但函数库和通用语言差别不小。要在脚本里拼出带日期条件的 SQL得先把用户界面输入的日期时间转成字符串。这里有一个很关键的问题组态王脚本中通过控件输入框拿到的日期通常是个字符串变量但格式不一定是YYYY-MM-DD可能是YYYY/MM/DD也可能是带时分秒的。我一般这样做画面上放两个输入框一个起始日期StartDate一个结束日期EndDate再把它们转成标准格式拼进 SQL。组态王脚本里字符串拼接用运算符数字转字符串用StrFromInt、StrFromFloat之类的转换函数具体函数名以你用的组态王版本为准大致是这种命名。下面是一段比较典型的脚本逻辑string sSql; string sStart, sEnd; sStart 2024-01-01 00:00:00; sEnd 2024-01-31 23:59:59; sSql SELECT ID, TagName, RecordTime, Value FROM HistoryData WHERE RecordTime sStart AND RecordTime sEnd ORDER BY RecordTime;这段代码里我把日期条件直接写进了 SQL 字符串。注意RecordTime 2024-01-01 00:00:00日期值被单引号包裹这是数据库识别的标准写法。如果你只传日期2024-01-01而不带时间数据库会把后面的时分秒默认成00:00:00查询结果的最后一条边界就有问题。实际项目中用户输入往往是控件返回的字符串变量比如画面上的编辑框变量是StartDateInput。那脚本里就直接引用string sSql; string sStart, sEnd; sStart StartDateInput; sEnd EndDateInput; sSql SELECT ... WHERE RecordTime sStart AND RecordTime sEnd ;这种拼接方式最简单但对用户输入的格式有要求。如果用户在输入框里填了2024/01/01数据库在执行时会隐式转换大多数情况下也能识别。如果填的是2024年1月1日那 SQL 执行就会报错因为不是合法的日期字面量。这个问题可以在脚本里做一次替换把/替换成-把中文去掉格式统一后再拼 SQL。3.2 参数化查询避免 SQL 注入与格式混乱直接拼接字符串是最容易上手的写法但存在两个隐患一是用户输入特殊字符时可能拼出错误 SQL二是日期格式不统一时执行报错或查不到数据。更稳妥的做法是用参数化查询KVADODBGrid 控件支持通过 ADO 参数对象传递查询条件脚本里这样操作object objRS; object objParam; objRS KVADODBGrid1.GetRecordset(); objParam objRS.CreateParameter(pStart, adDBTimeStamp, adParamInput, 8, sStart); objRS.Parameters.Append(objParam); objRS.QueryParameters(pStart) sStart; objRS.Source sSql; objRS.Refresh();这段逻辑里先获取控件的记录集对象再创建名为pStart的参数参数类型是adDBTimeStamp对应数据库的日期时间类型最后把参数值赋给 SQL 里的占位符。SQL 语句里要写成SELECT ... FROM HistoryData WHERE RecordTime ? AND RecordTime ?问号就是参数占位符执行时会被pStart、pEnd的值替代。不过这段脚本在实际工程里比较多变因为 KVADODBGrid 在不同组态王版本里的对象模型不一定完全一样有些版本GetRecordset()取到的对象不支持QueryParameters属性这时就得用最原始的Execute方式去执行。参数化查询的优点是格式统一、对中文和特殊符号的容错好缺点是脚本复杂度高、版本兼容性差。所以我通常的推荐是在组态王里做日期查询优先用字符串拼接 严格格式校验比参数化更可控。3.3 常用日期查询写法对比为了照顾不同使用习惯我把文档里出现的几种常用查询写法整理成对比表写法SQL 示例适用场景注意点等值查询WHERE RecordTime 2024-01-01精确查某天数据当天所有时分秒记录都可能被漏掉不推荐范围查询WHERE RecordTime 2024-01-01 AND RecordTime 2024-01-02查某一天完整数据左闭右开能包含当天全部记录带时间为边界WHERE RecordTime BETWEEN 2024-01-01 00:00:00 AND 2024-01-31 23:59:59查某月数据结束时间必须带 23:59:59月份模糊WHERE CONVERT(VARCHAR(7), RecordTime, 120) 2024-01跨数据库兼容月查询索引失效数据量大时不建议我在实际项目中用得最多的是第三种即结束时间强制写成23:59:59。经常有人只写2024-01-31数据库默认成2024-01-31 00:00:00导致当天数据全部查不到。这个细节文档里专门提到过属于反复出现的典型问题。4. 日期格式处理三套方案应对不同数据源4.1 数据库端日期格式化日期字段在数据库里存的是标准时间类型但组态王的表格控件显示出来却是2024/1/1 0:00这种格式看着不专业也不利于操作员读取。处理方式可以不改控件外观直接在 SQL 里格式化输出。SELECT ID, TagName, CONVERT(VARCHAR(19), RecordTime, 120) AS RecordTimeText, Value FROM HistoryData这段 SQL 的CONVERT(VARCHAR(19), RecordTime, 120)会把时间转成YYYY-MM-DD HH:MM:SS格式样式代码120是 ODBC 标准格式在 SQL Server 下稳定可靠。用这种方式后KVADODBGrid 表格里显示的日期就是友好的中文习惯格式而且不影响 WHERE 条件里的原始字段查询。如果你用的是 Access格式化函数要换一种SELECT ID, TagName, FORMAT(RecordTime, yyyy-mm-dd hh:nn:ss) AS RecordTimeText, Value FROM HistoryDataAccess 的FORMAT函数里分钟是nn不是mm写mm会显示成月份。这也是文档里明确提醒过的一个点挺多人在这个细节上翻车。格式化只影响显示不会改变底层数据查询条件仍然用原始 RecordTime 字段比较性能上不会受太大影响。4.2 组态王脚本端格式化有时候不方便改 SQL或者用户想显示成自定义格式可以让组态王脚本在拿到查询结果后自行处理。KVADODBGrid 控件提供了按列访问数据的能力脚本可以遍历记录集把日期列重新格式化string sValue; sValue KVADODBGrid1.GetCellText(2, nRow); // sValue 形如 2024-01-01 12:30:00这种方式灵活但有个明显的代价如果表格有几百行遍历会明显拖慢画面刷新速度。组态王的脚本执行效率本来就不高建议只在记录条数少少于 100 条的场景用数据量大时尽量走 SQL 端格式化。4.3 输入端的格式规范化用户输入日期是查询体验的起点如果这一步格式不统一后面 SQL 写得再严谨也白搭。我习惯在画面脚本中做一次输入校验判断长度和分隔符不合规就直接弹窗提示而不是把错误的日期字符串传给 SQL。string sInput; int nLen; sInput StartDateInput; nLen StrLen(sInput); if (nLen ! 10 nLen ! 19) { ShowError(日期格式应为 YYYY-MM-DD 或 YYYY-MM-DD HH:MM:SS); }这只是一个粗略的长度判断实际项目里可能还要校验中间的分隔符是不是-年份是不是四位等。输入校验看起来多写几行脚本但能挡住一大批“查不出数据”的低级问题。文档里对这部分也做了说明强调输入格式规范化是日期查询稳定性的第一道防线。5. 避坑指南KVADODBGrid 日期查询常见问题排查5.1 查询结果为空但 SQL 在数据库工具里能查出数据现象同样的 SQL 语句放到数据库查询工具里执行有结果但组态王画面上 KVADODBGrid 表格一片空白。原因最常见的是日期字符串两端的单引号在脚本拼接时丢了。组态王脚本字符串中有时候会默认过滤某些字符或者你拼接时写成了双引号。数据库工具里双引号也能查但组件执行时走的是 OLEDB 引擎对引号类型更严格。解决把 SQL 里日期条件的引号统一改成单引号并且在脚本中用\转义或者用变量拆分拼接。我习惯把整个 SQL 先赋给一个字符串变量再传给控件这样可以在脚本里随时打印出来排查。组态王有日志输出函数把拼接后的 SQL 写到日志文件里一眼就能看出引号问题。5.2 结束日期当天数据查不到现象查询某月数据只查到 1 号到 30 号31 号的记录一条都没有。原因结束日期写的是2024-01-31数据库默认转成2024-01-31 00:00:00而当天记录时间都在 00:00:00 之后范围条件限定时它们全部被排除。解决结束日期拼接时加上23:59:59后缀或者把结束条件改成 2024-02-01也就是用第二天的零点作为开区间边界。这两种写法都能包含完整的一天。从那以后我写日期范围查询结束条件一律用左闭右开写法再没出过漏数据的问题。5.3 查询后表格不刷新显示的还是旧数据现象第一次查询有结果换一个日期范围再查表格内容不变。原因KVADODBGrid 控件的记录集没有重新加载。给控件赋值新的 RecordSource 字符串后必须触发一次加载动作。在属性窗口里改 SQL 会自动刷新但脚本运行时改 SQL 不会自动重查。解决脚本里给 RecordSource 赋值后调用控件的Refresh()方法或者重新执行Query()。有时候Refresh()不生效可以先把DataSourceName置空再赋回原值强制控件重建连接。这种“置空再赋值”的写法属于组态王脚本的玄学技巧但在多个版本上验证过确实有效。5.4 日期格式混入中文或斜杠报语法错误现象SQL 语句执行报错提示日期语法不正确或者查询结果包含大量不需要的行。原因用户输入框里填了2024年1月1日、2024/1/1这种非标准格式数据库无法解析。解决在脚本中对输入变量做预处理把年、月、日、/全部替换为-。替换函数用组态王的StrReplace或者循环遍历字符处理替换完再做一次格式校验。如果项目里同时存在多种输入方式最好统一用一个转换函数避免每个画面各写一套导致格式漂移。5.5 日期字段包含毫秒精确查询对不上现象数据库里明明有一条2024-01-01 12:00:00.123的记录用 2024-01-01 12:00:00查不出来。原因SQL Server 的 DATETIME 类型实际存储精度到毫秒显示时默认不显示小数部分。直接用等值比较时字符串里的时间会被转成2024-01-01 12:00:00.000与实际的.123不匹配。解决日期记录带毫秒时查询不准用等值必须改成范围查询。比如 2024-01-01 12:00:00 AND 2024-01-01 12:00:01。这个场景在设备高频采集数据时特别常见因为采集时间间隔可能只有几百毫秒两个记录时间显示相同但存储值不同。6. 进阶用法动态日期范围、运行时验证与性能排查6.1 动态时间范围默认查最近一小时实际运行中很多组态画面需要默认展示最近一段时间的数据比如设备故障前后十分钟的记录。可以用组态王系统时间函数动态计算起止时间。string sStart, sEnd; sEnd TimeToStr(GetServerTime(0), yyyy-mm-dd hh:nn:ss); sStart TimeToStr(GetServerTime(0) - 3600, yyyy-mm-dd hh:nn:ss);组态王的时间函数返回值是基于秒的整数减去 3600 就是一小时前。TimeToStr的格式串里分钟是nn这一点和 Access 的FORMAT一致我在第一次用的时候写成了mm结果显示出来全是 00 分钟排查了半天才发现是格式串的问题。动态时间的意义在于操作员不需要手动输入起止时间画面打开就能看到最近数据这对日常巡检和事故追忆都很有用。6.2 运行时验证把 SQL 打到日志文件里排查日期查询问题最有效的手段是把实际执行的 SQL 打到日志文件。组态王脚本自带日志函数在调试阶段给每个查询操作加一行输出比在画面上弹窗更直观而且不影响运行。LogMessage(D:\kvlog\query.log, SQL sSql, 1);这句脚本会把拼接好的 SQL 追加到指定目录的文本文件里。如果查询异常直接打开日志看 SQL 长什么样是引号丢了、日期格式不对、还是表名拼错一目了然。我建议任何新做的查询画面都把这个日志开关留在代码里平时注释掉排查时放开。这比对着画面猜原因高效得多。那以后凡是涉及 KVADODBGrid 日期查询的画面我都会先跑一遍最小化验证流程单表、单条件、已知数据确认 SQL 正确后再往上加条件。这套流程救过我好几次希望帮到你。本文还有配套的精品资源点击获取

相关新闻

数据库原理答案高效复习法:从范式分解到SQL避坑指南

数据库原理答案高效复习法:从范式分解到SQL避坑指南

简介:《数据库原理及技术》(钱学忠编著)配套习题答案资料包,主要面向高校数据库课程学生、备考者及需要夯实理论基础的自学者。内容围绕教材核心章节展开,涵盖数据库设计、SQL语言、关系数据库理论、数据库管理系统与数…

2026/10/12 4:47:00 阅读更多 →
Windows 新手 Codex 安装配置全攻略:从下载到跑通第一个任务

Windows 新手 Codex 安装配置全攻略:从下载到跑通第一个任务

1. 为什么 Windows 新手需要一份靠谱的 Codex 安装路线图很多人第一次听到 Codex 这个名字,会下意识觉得它离自己很远,像是只有资深工程师才会碰的东西。其实把话说直白一点,Codex 本质上就是一套能理解自然语言、帮你生成和补全代码的智能助…

2026/10/12 4:23:43 阅读更多 →
Rtools 4.5配置指南:Windows下R包编译报错三步解决法

Rtools 4.5配置指南:Windows下R包编译报错三步解决法

如果你在 Windows 上跑 R,多半有过被install.packages编译报错支配的恐惧。满屏的compilation failed for package xxx,或者更直接的WARNING: No Rtools detected,能让人瞬间怀疑人生。我最初接触 R 的时候也踩过这个坑,一度以为是…

2026/10/12 12:41:07 阅读更多 →

最新新闻

Access进销存系统实战:从表设计到VBA库存自动计算

Access进销存系统实战:从表设计到VBA库存自动计算

简介:这是一份使用Access数据库编写的进销存系统,覆盖采购、销售与库存管理,适合中小企业管理人员以及希望掌握桌面数据库开发的读者。压缩包共十三个文件,整体大小约381KB,文件类型涵盖数据库文件、编译运行版、界面控…

2026/10/12 20:33:11 阅读更多 →
多智能体协同围捕算法Python实现:从源码到避坑指南

多智能体协同围捕算法Python实现:从源码到避坑指南

简介:这是一份面向计算机专业课程设计、期末大作业及项目实战的多智能体协同围捕算法Python实现,适合需要完成高分毕设,或想系统学习多智能体规划、强化学习与机器人仿真控制的学习者。项目以Voronoi剖分与MADDPG为核心方案,覆盖单…

2026/10/12 20:33:09 阅读更多 →
Egg.js集成SOFA RPC实践:服务拆分中的通信改造全记录

Egg.js集成SOFA RPC实践:服务拆分中的通信改造全记录

先说我最近做的一个真实改造。某个内部项目原本是单体应用,所有模块都在同一个进程里,后来要拆出独立的商品中心和库存中心,最直接的问题就来了:两个Node.js服务之间,到底用什么通信?一开始我图省事&#x…

2026/10/12 20:33:05 阅读更多 →
SQL驱动REST API:零代码生成生产级接口

SQL驱动REST API:零代码生成生产级接口

简介:这是一套面向数据库开发者与数据服务构建者的零代码API开发平台,专为快速发布SQL驱动的HTTP接口而设计,显著降低BI报表、数据大屏等数据密集型场景的后端开发门槛。资源包共205个文件,含87个Java核心逻辑文件(如A…

2026/10/12 20:33:02 阅读更多 →
从零搭建校园图书馆管理系统:Django全栈与协同过滤推荐实践

从零搭建校园图书馆管理系统:Django全栈与协同过滤推荐实践

1. 项目背景与需求拆解前阵子帮某高校图书馆做一个内部的图书管理和推荐系统,做完之后有不少同行问我整体思路和技术选型,索性把整个项目的核心设计、踩坑记录和关键实现整理出来,分享给正在做类似全栈项目的朋友。这个项目的完整名称是“校园…

2026/10/12 20:32:58 阅读更多 →
解析 5 种 Agent CLI 输出流:OpenSquirrel runtime.rs 的 JSON 流解析与多轮会话实现

解析 5 种 Agent CLI 输出流:OpenSquirrel runtime.rs 的 JSON 流解析与多轮会话实现

【免费下载链接】OpenSquirrel For people who get distracted by agents. A native Rust/GPUI control plane for running Claude Code, Codex, Cursor, and OpenCode side by side — because if youre going to be squirrely, you might as well optimize for it. 项目地址&…

2026/10/12 20:31:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →