【SWAT水文模型】ArcSWAT各种报错总结

本文总结了本人在利用ArcSWAT模拟过程中,出现的各种错误。希望能和大家共同学习!
说明:在本人遇到的所有错误都总结在了此博客中,如若未提供解决方法,说明这个问题我目前没找到解决办法,直接重新构建SWAT模型了

1 变量未实例化

1.1 报错内容

ArcGIS报错:
空间参考:变量未实例化
Spatial Reference: Object reference not set to an instance of an object
在这里插入图片描述
在这里插入图片描述

1.2 解决方法

把Arcgis的并行计算改为0即可。
打开Arcgis,点击Geoprocessing——Environments,进入Environment Settings面板,找到Parallel Processing, 输入0,点击OK。
在这里插入图片描述

2 Error Number :-2147467259; 对 COM 组件的调用返回了错误 HRESULT E_FAIL

2.1 报错内容

出错位置:土地利用/土壤数据/坡度 覆盖overlay

Error Number :-2147467259
Eror Message: Eror HRESULTE FAIL has been retuned froma alltoa a COM component.
Module:mAnalysis
Function:dissolve
Procedurure:1

在这里插入图片描述
随后,依次弹出以下界面:
在这里插入图片描述

Description:
Microsoft Jet数据引擎找不到输入表或查询’FulLHRU’。确定它是否存在,以及它的名称的拼写是否正确。

在这里插入图片描述
尝试将并行设置更改为0,但依旧报错。

2.2 解决方法

不勾选overlay中的前一选项。
在这里插入图片描述

3 Error Number :-2147467259

3.1 报错内容

在这里插入图片描述

3.2 解决方法

4 INSER INTO 语句的语法错误。: IN, mWriteInputFiles.sol

4.1 报错内容

在用ArcSWAT进行Write SWAT Input Tables操作中,遇到报错:INSERTINTO 语句的语法错误。:IN,mWritelnputFiles.wg。
在这里插入图片描述

4.2 解决方法

在建的工程里面打开swat2012,打开usersoil,然后将没有数据的其他土壤层用0补齐,再进行操作。
再打开SWAT软件界面,更新数据库后,数据加载即可成功。

【另】在导入Usersoil表到SWAT2012数据库时候,弹出以下错误:“索引或主关键字不能包含一个空(NULL)值”
错误原因: excel中空格行存在,在导入access时也作为行数据导入,因数据为空,故报错“索引或主关键字不能包含一个空(NULL)值”
解决方案: 可将excel表中数据全选复制到另一sheet表中,此时导入不出错。
在这里插入图片描述

5 IN, mWriteInputFiles.wgn

5.1 报错内容

在用ArcSWAT进行Write SWAT Input Tables操作中,遇到报错:INSERTINTO 语句的语法错误。:IN,mWritelnputFiles.wg。
在这里插入图片描述
随后,依次弹出以下界面:
在这里插入图片描述
通过查看SWAT2021.mdb数据库中的WGEN_user表,发现ObjectID的值与气象站点编号不匹配。这是因为导入电子表格时,Access自动将ObjectID中的值更改为从1开始的序号。

5.2 解决方法

在导入表时,选择【我自己选择主键】,如下图:
在这里插入图片描述
记得关闭SWAT文件,再次打开!

6 系统找不到指定的文件。:Unable to open Access database from ArcSWAT

6.1 报错内容

在执行保存文件后,点击【Open SWATOutput.mdb 】,如下:
在这里插入图片描述
显示系统找不到指定文件。如下
在这里插入图片描述

6.2 解决方法

发现问题在于,SWATOutput.mdb保存在Default文件夹中,将此新建文件夹Copy后即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7 Outlet输入文件格式:Type field does not exist

7.1 报错内容

在导入实测水文站作为outlet时,报错显示“Type field does not exist”。
在这里插入图片描述
查阅SWAT2012手册可知:

此表必须具有3.3节中指定的子流域出口位置表(Subbasin Outlet Location Table)中的相同字段
在这里插入图片描述

表中列出的所有位置必须为 “O”型出口 。如果指定了不同的“Type”值,则会出现一个对话框,报告如图5.33所示的错误,并且加载过程将停止。
在这里插入图片描述

7.2 解决方法

按手册制作Outlet表:
在这里插入图片描述
将此文件保存为.dbf格式后,可成功导入在SWAT中:
在这里插入图片描述
确定后,显示以下界面:(成功导入14个outlet)
在这里插入图片描述

经纬度坐标转平面坐标

在工具箱中依次点击数据管理工具->投影和变换->要素->投影,弹出投影对话框,如下图所示:
此时将arcmap右侧内容列表中之前导出的shp文件数据要素类拖动至输入数据集或要素类文本框中,此时见输入坐标系文本框中自动填写此shp文件的之前已经定义过的坐标系。
在这里插入图片描述
在弹出的对话框中点击左上角按钮,在弹出的菜单中点击添加字段,在弹出的添加字段对话框中,填写字段名及字段类型,如下图所示:

点击确定,完成字段的添加。在新建的字段名上右键,在弹出的菜单中选择计算几何,弹出计算几何对话框,属性栏选择点的X坐标或者Y坐标,计算对应的XY平面坐标值。
在这里插入图片描述
点击确认完成X坐标的计算,同以上步骤添加字段、计算几何完成Y坐标的计算工作。如下图:

如果需将表格数据导出,可在工具栏中点击搜索按钮,输入表转Excel,如下图:

点击搜索到的表转Excel工具,弹出对话框表转Excel对话框,将上述步骤得到的数据要素拖至输入表文本框中,在输出Excel文件文本框中选择输出路径及Excel表名,点击确定,完成Excel导出步骤,如下图所示:

8 Overlay时:Unhandled exception has occured in a component in your application. Exception from HERSULF: 0x800A01C9

8.1 报错内容

Land Use/Soils/Slope Definition成功重分类后,选择overlay时,弹出以下错误:
在这里插入图片描述

8.2 解决方法

9 Error Number: -2147217256

9.1 报错内容

导入河网数据(Burn In) 时,
在这里插入图片描述
Errot in GRID IO:

在这里插入图片描述

9.2 解决方法

很莫名其妙,明明啥也没干,就报错了。一般这个情况就直接重新操作了!
我恨这个软件!!!

10 至少一个参数没有被指定值。

在这里插入图片描述
在这里插入图片描述

参考

1、CSDN博客-ArcSWAT报错:Error Number :-2147467259; 对 COM 组件的调用返回了错误 HRESULT E_FAIL
2、在ArcSWAT中一直弹出INSECT INFO 语句的语法错误。
3、arcgis经纬度转平面坐标教程
4、ArcGIS之“异常来自HRESULT:0x8004021F”解决方法
在这里插入图片描述

### 解决 SWAT 模型中 `INSERT INTO` 语句的语法错误 当处理 SWAT 模型中的 SQL 数据库操作时,如果遇到 `INSERT INTO` 语句的语法错误,可以考虑以下几个方面来排查和解决问题。 #### 1. 字段名称验证 确保用于插入数据的目标表字段名称正确无误。任何拼写错误或不存在的字段都将导致语法错误。建议仔细核对数据库模式并确认所有字段名与实际定义一致[^1]。 #### 2. 数据类型匹配 检查待插入的数据与其对应列的数据类型是否兼容。不匹配的数据类型可能会引发异常。例如,在尝试向整数类型的列插入字符串值时就会发生这种情况。务必保证所提供的参数能够被目标列接受。 #### 3. 使用方括号包裹特殊字符 某些情况下,Access 和其他一些数据库管理系统可能不允许特定字符作为对象标识符的一部分(如空格、连字符)。为了防止这类问题引起解析失败,可以在这些名字周围加上方括号 `[ ]` 来转义它们。 ```sql INSERT INTO [Table Name With Space] ([Column-Name], Column_Name) VALUES ('Value', 'Another Value'); ``` #### 4. 验证连接字符串配置 对于通过 OLE DB 访问 Access 文件的应用程序来说,正确的连接字符串设置至关重要。不当的提供者版本或其他选项可能导致命令执行期间出现问题。因此,应当核实应用程序使用的连接串是否适当,并且指向了预期的位置。 #### 5. 考虑使用参数化查询 构建动态 SQL 查询时容易引入安全漏洞以及潜在的格式化问题。采用参数化的预编译语句不仅可以提高安全性还能减少因手动拼接带来的风险。以下是 C# 中如何实现的一个例子: ```csharp using (var connection = new OleDbConnection(connectionString)) { var commandText = @"INSERT INTO TableName (FieldA, FieldB) VALUES (?, ?)"; using (var cmd = new OleDbCommand(commandText ,connection )) { cmd.Parameters.AddWithValue("@p1", valueForFieldA); cmd.Parameters.AddWithValue("@p2", valueForFieldB); await connection.OpenAsync(); int rowsAffected = await cmd.ExecuteNonQueryAsync(); } } ``` 以上措施有助于识别并修正 SWAT 模型内发生的 `INSERT INTO` 语句相关的问题。当然,具体原因还需结合实际情况进一步分析日志文件和其他诊断工具获取的信息来进行精确定位。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW、forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值