Files
coco df489d5640 a
2026-07-03 16:05:30 +08:00

10 KiB

数据导出

**本文档引用的文件** - [IOManager.cpp](file://cpp/Managers/IOManager.cpp) - [IOManager.h](file://h/IOManager.h) - [database_modify.xml](file://database_modify.xml) - [UpdateDataBase.cpp](file://cpp/Operator/UpdateDataBase.cpp)

目录

  1. 简介
  2. 数据导出架构
  3. 核心组件分析
  4. 事务处理与异常恢复
  5. 数据库模式与版本控制
  6. 结论

简介

本文档全面阐述了Geomative Studio软件中数据导出功能的实现机制。该功能通过CIOManager类的Export方法,将项目、测区、测试数据等信息安全地导出到受密码保护的Access数据库(.accdb)文件中。文档详细说明了导出过程中的事务处理、树形结构遍历、数据库创建、异常处理和回滚机制,以及针对不同类型测试数据(如2D电阻率、IP)的导出实现细节。

数据导出架构

graph TD
A[用户界面] --> B[CIOManager::Export]
B --> C[创建加密数据库]
C --> D[开始事务]
D --> E[遍历树形结构]
E --> F[选择导出内容]
F --> G[导出项目数据]
F --> H[导出测区数据]
F --> I[导出测试数据]
G --> J[ExportProjectToAccdbFile]
H --> K[ExportTzToAccdbFile]
I --> L[ExportRspTdToAccdbFile]
I --> M[ExportIpspTdToAccdbFile]
L --> N[导出电阻率数据]
M --> O[导出IP数据]
N --> P[提交事务]
O --> P
P --> Q[完成导出]
B --> R[异常处理]
R --> S[回滚事务]
S --> T[删除文件]

Diagram sources

核心组件分析

CIOManager类分析

CIOManager类是数据导出功能的核心,负责协调整个导出流程。它通过ADOX和ADODB技术与Access数据库进行交互。

类结构

classDiagram
class CIOManager {
+_ConnectionPtr m_pConnection
+ADOX : : _CatalogPtr m_pCatalog
+CHandleProcessor m_handleProcessor
+CStateProcessor m_stateProcessor
+UINT Export(void)
+UINT Import(void)
+CIOManager(_ConnectionPtr&, ADOX : : _CatalogPtr)
+~CIOManager()
}
class CHandleProcessor {
+DWORD GenerateHandle(DWORD, UINT)
+DWORD GetIDFromHandle(DWORD)
+UINT GetStyleFromHandle(DWORD)
}
class CStateProcessor {
+UINT ChangeToImageState(UINT)
+UINT ChangeToItemState(UINT)
}
CIOManager --> CHandleProcessor : "使用"
CIOManager --> CStateProcessor : "使用"

Diagram sources

Section sources

导出流程分析

数据导出流程从用户界面触发,通过CIOManager::Export方法启动,整个过程采用事务处理确保数据一致性。

导出流程

sequenceDiagram
participant UI as 用户界面
participant IO as CIOManager
participant DB as Access数据库
UI->>IO : Export()
IO->>IO : 创建导出对话框
IO->>IO : 显示选择树
loop 用户选择
IO->>IO : 处理用户事件
end
IO->>IO : 用户确认导出
IO->>DB : CreateExpDatabase()
DB-->>IO : 返回连接
IO->>DB : BeginTrans()
IO->>IO : ExportDataToAccdbFile()
IO->>IO : ExportSptToAccdbFile()
IO->>DB : CommitTrans()
DB-->>IO : 提交成功
IO-->>UI : 返回成功状态

Diagram sources

Section sources

树形结构遍历

ExportDataToAccdbFile函数负责遍历树形结构,根据用户选择导出相应的数据。

遍历逻辑

flowchart TD
Start([开始遍历]) --> CheckProject["检查项目节点是否选中"]
CheckProject --> |是| ExportProject["导出项目数据"]
CheckProject --> |否| NextProject["下一个项目"]
ExportProject --> CheckTz["检查测区节点是否选中"]
CheckTz --> |是| ExportTz["导出测区数据"]
CheckTz --> |否| NextTz["下一个测区"]
ExportTz --> CheckTd["检查测试数据节点是否选中"]
CheckTd --> |是| CheckType["检查测试类型"]
CheckTd --> |否| NextTd["下一个测试数据"]
CheckType --> |2D电阻率| ExportRsp["导出RspTd数据"]
CheckType --> |2D IP| ExportIpsp["导出IpspTd数据"]
ExportRsp --> NextTd
ExportIpsp --> NextTd
NextTd --> |有下一个| CheckTd
NextTd --> |无下一个| NextTz
NextTz --> |有下一个| CheckTz
NextTz --> |无下一个| NextProject
NextProject --> |有下一个| CheckProject
NextProject --> |无下一个| End([遍历完成])

Diagram sources

Section sources

事务处理与异常恢复

事务处理机制

数据导出采用严格的事务处理机制,确保数据的完整性和一致性。

事务流程

flowchart TD
Start([开始]) --> CreateDB["创建数据库文件"]
CreateDB --> BeginTrans["开始事务"]
BeginTrans --> ExportData["导出数据"]
ExportData --> |成功| Commit["提交事务"]
ExportData --> |失败| Rollback["回滚事务"]
Commit --> CloseDB["关闭数据库"]
Commit --> ReturnSuccess["返回成功"]
Rollback --> CloseDB
Rollback --> DeleteFile["删除文件"]
Rollback --> ReturnFail["返回失败"]
CloseDB --> End([结束])

Diagram sources

Section sources

异常处理策略

系统实现了完善的异常处理机制,确保在导出过程中出现错误时能够正确恢复。

异常处理

flowchart TD
Start([异常发生]) --> CatchException["捕获_com_error异常"]
CatchException --> RollbackTrans["回滚事务"]
RollbackTrans --> CloseConnection["关闭数据库连接"]
CloseConnection --> DeleteFile["删除已创建的文件"]
DeleteFile --> SetErrorCode["设置错误代码"]
SetErrorCode --> ReturnFail["返回失败状态"]

Diagram sources

Section sources

数据库模式与版本控制

数据库模式定义

CreateExpDatabase函数创建具有完整模式的Access数据库,包含多个数据表。

数据库模式

erDiagram
project {
string CN PK
string PRname
string PRdesc
string location
date PRdate
smallint duration
string PS
string CS
string PM
string QAS
string standard
}
tz {
string TZname PK
string PRCN FK
string TZdesc
string location
}
td {
string TDname PK
string DESN
string PRCN FK
string TZname FK
string SCCN FK
smallint TDtype
string HFname
string CFname
smallint CFRamount
string GRFname
smallint GRFRamount
}
tdhead {
string TDname PK
string DESN
date Cdate
date Ctime
boolean rolling
smallint RCamount
smallint Rdirection
smallint CRtime
string CPE
string CPN
smallint weather
smallint temperature
smallint height
smallint humidity
string PM
string OP
string QA
}
parameter {
string TDname PK
string DESN
smallint LCHamount
smallint RCHamount
smallint LCamount
smallint RCamount
smallint LEamount
smallint REamount
smallint Felectrode
smallint Espacing
smallint Clayout
smallint CLfun
}
rspcon {
string TDname PK
string DESN
smallint A
smallint B
smallint M
smallint N
single K
single SP
single Ro
single Vp
single Ip
single SD
single RgA
single RgB
single RgM
single RgN
date Ttime
}
ipspcon {
string TDname PK
string DESN
single SP
single Ro
single VP
single IP
single M1
single M2
single M3
single M4
single M5
single M6
single M7
single TH
single D
single Zp
single FG
single Am
single Bm
single Cm
single Dm
single r
}
gr {
string TDname PK
string DESN
string electrode
string CableH
string CableT
single P1GR
single P2GR
}
scon {
string CN PK
string Sname
smallint Eamount
smallint CHamount
smallint TPamount
string definer
date DEdate
string SCdesc
}
channel {
string CN PK
smallint CHnumber
smallint AR
}
script {
string CN PK
smallint CHnumber
smallint TSN
smallint C1
smallint C2
smallint P1
smallint P2
single K
smallint N
}
dbversion {
string VK PK
}
project ||--o{ tz : "包含"
tz ||--o{ td : "包含"
td ||--|| tdhead : "关联"
td ||--|| parameter : "关联"
td ||--o{ rspcon : "包含"
td ||--o{ ipspcon : "包含"
td ||--o{ gr : "包含"
scon ||--o{ channel : "包含"
scon ||--o{ script : "包含"
td }|--|| scon : "使用"

Diagram sources

Section sources

版本控制机制

系统通过dbversion表实现数据库版本控制,确保导入导出的兼容性。

版本控制流程

flowchart TD
Start([导入文件]) --> ReadVersion["读取dbversion表"]
ReadVersion --> |版本匹配| Continue["继续导入"]
ReadVersion --> |版本不匹配| ShowError["显示文件错误"]
Continue --> ImportData["导入数据"]
ImportData --> UpdateVersion["更新版本信息"]
UpdateVersion --> End([完成])

Diagram sources

Section sources

结论

Geomative Studio的数据导出功能通过CIOManager类实现了安全、可靠的数据导出机制。系统采用事务处理确保数据一致性,通过密码保护的Access数据库文件保证数据安全。导出过程支持树形结构选择,允许用户灵活选择要导出的内容。异常处理和回滚机制确保了在导出失败时系统能够正确恢复。数据库模式设计完整,涵盖了项目、测区、测试数据等所有必要信息,并通过版本控制机制保证了数据的兼容性。该实现为地质勘探数据的管理和共享提供了可靠的技术支持。