明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 855|回复: 4

请教一下为什么doc.database.save为出错?

[复制链接]
发表于 2025-7-25 12:48:11 | 显示全部楼层 |阅读模式
本帖最后由 yangmz1972 于 2025-7-25 12:49 编辑

学习AutoCAD插件开发没有多久,技术不太行。请教一下为什么下面的代码会出错:
  
                    Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
                    Dim db As DatabaseServices.Database = doc.Database
                    Dim ed As Autodesk.AutoCAD.EditorInput.Editor = doc.Editor
                    Using acLckDoc As DocumentLock = doc.LockDocument()
                        Using trans As Transaction = db.TransactionManager.StartTransaction()
                            Dim nod As DBDictionary = CType(trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead), DBDictionary)
                            '添加词典
                            If Not nod.Contains(XDICT_NAME) Then
                                nod.UpgradeOpen()
                                Dim customDict As New DBDictionary()
                                nod.SetAt(XDICT_NAME, customDict)
                                trans.AddNewlyCreatedDBObject(customDict, True)

                                ' 添加初始数据
                                Dim xrec As New Xrecord()
                                xrec.Data = New ResultBuffer(New TypedValue(DxfCode.Text, SPECIAL_STRING))
                                customDict.SetAt(USERDATA_KEY, xrec)
                                trans.AddNewlyCreatedDBObject(xrec, True)
                         End If
                          trans.Commit()
                        End Using
                           doc.Database.Save()------------------------------------------这里出错
                    End Using


我讯飞星火了一下,他坚持说doc.Database没有save方法,腾讯元宝也说不出什么,只说的文件系统可能有问题,deepseek也没能解决问题。
后来我直接打开文档,再保存,测试如下:
  Dim doc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.Open(cPathFile, False)
  doc.Database.Save()------------------------------------------这里还是出错


后来我不用doc.database.save了,改用doc.SendStringToExecute("_.QSAVE", True, False, False),但DBMOD值前后始终为1,意味着doc.SendStringToExecute("_.QSAVE", True, False, False)没有作用。
请大佬指教一下。错误在哪里?


回复

使用道具 举报

发表于 2025-7-25 14:32:36 | 显示全部楼层
我博客搜索save就能找到
https://www.cnblogs.com/JJBox/p/12156778.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-25 16:30:03 | 显示全部楼层
谢谢,经多方研究测试,用下面的这句就可以
doc.Database.SaveAs(doc.Name, True, DwgVersion.Current, doc.Database.SecurityParameters)
回复 支持 反对

使用道具 举报

发表于 2025-7-26 12:33:53 | 显示全部楼层
看api帮助文档,缺少参数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-7-26 23:39:43 | 显示全部楼层
yonjay 发表于 2025-7-26 12:33
看api帮助文档,缺少参数

doc.Database.Save不需要参数的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-11-16 04:03 , Processed in 0.240625 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表