【发布时间】:2009-12-22 08:37:59
【问题描述】:
我还记得在Delphi中,开发者可以让UI(文本框,列表框...)直接连接到数据库,然后当用户点击一个按钮时,只需调用post动作,数据就会自动保存。
我想知道的是MFC中有没有类似的机制?或者我可以使用 GetDlgItem(...).Text 然后使用这个值保存到数据库?
或任何其他建议将不胜感激。
【问题讨论】:
标签: c++ database post-commit autosave
我还记得在Delphi中,开发者可以让UI(文本框,列表框...)直接连接到数据库,然后当用户点击一个按钮时,只需调用post动作,数据就会自动保存。
我想知道的是MFC中有没有类似的机制?或者我可以使用 GetDlgItem(...).Text 然后使用这个值保存到数据库?
或任何其他建议将不胜感激。
【问题讨论】:
标签: c++ database post-commit autosave
在 VC++ 中,您必须使用 Microsoft ActiveX 数据对象库 (ADO typelib)。
要存储数据,您可以按照以下步骤操作:
1.Retrive data from all controls
2.Validate the data retrived
3.Use sql query to store the data to database.
您可以使用独立于任何数据库管理系统的ODBC API。
http://msdn.microsoft.com/en-us/library/ms714562(VS.85).aspx
【讨论】:
公平地说,在 Delphi 上,这些是专门的小部件,不是普通的 GDI 文本框等,而是带有连接到数据集和表的附加数据库感知层的控件。
.NET也有类似的概念,不了解MFC
【讨论】:
MFC 对Doc/View/Frame 中数据的抽象是在CDocument 中。保存文档时,如果文件没有保存的路径,MFC 会提示用户输入文件名,然后在文件上构造一个 CArchive 并触发 CDocument::Serialize。您可以将连接字符串存储在您的文档类中,并使用它将数据保存在 CDocument::Serialize 中。
如果您有基于文件的数据库,则更容易集成。覆盖 CDocument::OnNewDocument 为文档创建一个新的基于文件的数据库,并且 覆盖 CDocument::OnOpenDocument 以从现有数据库中读取。如果您没有基于文件的数据库,则可以使用 CDocument::SaveModified 覆盖来抑制文件对话框,该覆盖保存数据并清除修改的标志。
【讨论】: