
VB写数据库踩过的坑我帮你全填上了很多人觉得VB已经过时了但在中小企业内部管理系统领域VBAccess的组合至今仍活跃在无数车间、仓库和办公室里。我花了三年时间用VB6.0写了十几套管理系统踩过的坑比写过的代码还多。今天这篇文章把数据库连接这件事从头到尾讲透不讲虚的全是实战经验。一、为什么VB做数据库开发依然能打☆ 速度快。VB6编译出来的exe启动就是秒开不需要装框架、不需要跑环境。☆ 上手成本低。拖控件、写事件、连数据库三步就能跑起来一个增删改查的界面。☆ 部署简单。一个exe加一个mdb文件拷到任何一台Windows电脑上就能用这在很多内网环境里是刚需。我之前给一个五金厂写库存管理系统客户要求不能联网、不能装SQL Server、不能装.NET Framework。最后用VB6Access两天交付到现在还在用。二、VB连接数据库的三种主流方式☆ 1、DAO方式最传统DAO是VB6自带的数据访问对象操作Access数据库最方便不需要额外引用。vbDim db As DAO.DatabaseDim rs As DAO.RecordsetSet db OpenDatabase(C:\Data\mydb.mdb)Set rs db.OpenRecordset(SELECT * FROM 商品表, dbOpenDynaset)Do While Not rs.EOFDebug.Print rs!商品名称, rs!库存数量rs.MoveNextLooprs.Closedb.CloseSet rs NothingSet db Nothing☆ 2、ADO方式推荐使用ADO是微软主推的数据访问技术不仅能连Access还能连SQL Server、MySQL、Oracle。做项目建议直接学ADO一次学会通用。vbDim conn As ADODB.ConnectionDim rs As ADODB.RecordsetSet conn New ADODB.Connectionconn.ConnectionString ProviderMicrosoft.Jet.OLEDB.4.0;Data SourceC:\Data\mydb.mdbconn.OpenSet rs New ADODB.Recordsetrs.Open SELECT * FROM 员工表 WHERE 部门生产部, conn, adOpenKeyset, adLockOptimisticDo While Not rs.EOFDebug.Print rs!工号, rs!姓名, rs!入职日期rs.MoveNextLooprs.Closeconn.CloseSet rs NothingSet conn Nothing☆ 3、ODBC方式连大型数据库用如果你的数据源是SQL Server或者MySQL通常走ODBC或者OLE DB驱动。vbconn.ConnectionString Driver{SQL Server};Server192.168.1.100;Database企业管理;Uidsa;Pwd123456;三、实战用VB写一个完整的员工信息管理模块光看代码不够我把实际项目中的写法贴出来包含连接、查询、增删改全部逻辑。☆ 1、封装一个数据库操作类模块我习惯把数据库操作单独放在一个.bas模块里叫modDB.bas主窗体直接调用。vb modDB.bas Option ExplicitPublic conn As ADODB.ConnectionPublic Sub InitDB()Set conn New ADODB.Connectionconn.ConnectionString ProviderMicrosoft.Jet.OLEDB.4.0;Data Source App.Path \data.mdbconn.OpenEnd SubPublic Sub CloseDB()If Not conn Is Nothing ThenIf conn.State adStateOpen Then conn.CloseSet conn NothingEnd IfEnd SubPublic Function ExecuteSQL(sql As String) As LongDim cmd As ADODB.CommandSet cmd New ADODB.Commandcmd.ActiveConnection conncmd.CommandText sqlcmd.Execute , , adExecuteNoRecordsExecuteSQL cmd.RecordsAffectedEnd FunctionPublic Function GetRecordset(sql As String) As ADODB.RecordsetSet GetRecordset conn.Execute(sql)End Function☆ 2、主窗体上的查询功能在窗体上放一个DataGrid控件命名为dgvEmployee再放几个TextBox用于输入查询条件。vbPrivate Sub btnSearch_Click()Dim sql As Stringsql SELECT 工号, 姓名, 部门, 入职日期 FROM 员工表 WHERE 11If Trim(txtName.Text) Thensql sql AND 姓名 LIKE % Trim(txtName.Text) %End IfIf cboDept.Text 全部 Thensql sql AND 部门 cboDept.Text End Ifsql sql ORDER BY 工号Dim rs As ADODB.RecordsetSet rs GetRecordset(sql)Set dgvEmployee.DataSource rsEnd Sub☆ 3、新增员工记录vbPrivate Sub btnAdd_Click()Dim sql As Stringsql INSERT INTO 员工表 (工号, 姓名, 部门, 入职日期) VALUES (sql sql txtID.Text , sql sql txtName.Text , sql sql cboDept.Text , sql sql # Format(dtpJoin.Value, yyyy-mm-dd) #)Dim affected As Longaffected ExecuteSQL(sql)If affected 0 ThenMsgBox 新增成功, vbInformationbtnSearch_Click 刷新列表ElseMsgBox 新增失败请检查工号是否重复。, vbExclamationEnd IfEnd Sub☆ 4、删除记录带确认vbPrivate Sub btnDelete_Click()If dgvEmployee.Row 1 ThenMsgBox 请先选择要删除的记录。, vbExclamationExit SubEnd IfDim empID As StringempID dgvEmployee.Columns(0) 第一列是工号If MsgBox(确定要删除工号为 empID 的员工吗, vbYesNo vbQuestion) vbNo ThenExit SubEnd IfDim sql As Stringsql DELETE FROM 员工表 WHERE 工号 empID ExecuteSQL sqlMsgBox 删除成功。, vbInformationbtnSearch_ClickEnd Sub四、连接数据库最容易踩的五个坑☆ 1、路径问题。用App.Path取程序所在目录别写死C盘路径换台电脑就崩。☆ 2、中文乱码。Access数据库如果出现中文乱码在ConnectionString里加上CharsetGB2312试试。☆ 3、记录集没关闭。每次OpenRecordset之后一定要Close不然数据库文件会被锁死下次打不开。☆ 4、SQL注入。上面的示例代码为了简单直接拼了SQL字符串实际项目中一定要用参数化查询或者至少做好单引号过滤。☆ 5、并发写入。Access不支持多用户同时写入如果是多人使用的系统建议后端换成SQL Server Express它是免费的。五、从Access升级到SQL Server的过渡方案当你的系统用户超过5个人或者数据量超过几万条的时候Access就开始吃力了。我的建议是分两步走1、先把数据库迁移到SQL Server ExpressVB端只需要改ConnectionString里的Provider和连接参数代码逻辑基本不用动。2、原来用Jet.OLEDB的改成SQLOLEDBvbconn.ConnectionString ProviderSQLOLEDB;Serverlocalhost\SQLEXPRESS;Database企业管理;Uidsa;Pwd123456;3、原来用#日期#包裹的Access日期格式改成SQL Server的单引号格式2026-06-06。我手里有个项目就是这么迁移的原来Access查询要3秒迁移后0.3秒提升非常明显。六、写在最后VB做数据库开发不是什么高精尖的技术但它胜在稳定、快速、够用。很多人瞧不上VB觉得它老旧但真正在一线写过企业内部系统的人都知道能快速交付、能稳定运行、客户能用起来的工具就是好工具。数据库连接这块内容看着简单真正做项目的时候全是细节。路径怎么写、异常怎么捕、记录集怎么关、并发怎么处理每一个都是实战中逼出来的经验。如果你正在用VB做管理系统或者准备接手一个老VB项目上面这些代码和经验可以直接拿去用。有什么具体问题评论区聊。注意本文所介绍的软件及功能均基于公开信息整理仅供用户参考。在使用任何软件时请务必遵守相关法律法规及软件使用协议。同时本文不涉及任何商业推广或引流行为仅为用户提供一个了解和使用该工具的渠道。你在生活中时遇到了哪些问题你是如何解决的欢迎在评论区分享你的经验和心得希望这篇文章能够满足您的需求如果您有任何修改意见或需要进一步的帮助请随时告诉我感谢各位支持可以关注我的个人主页找到你所需要的宝贝。博文入口山峰哥-CSDN博客 复制到【浏览器】打开即可,宝贝入口常用软件 宝贝精品文件作者郑重声明本文内容为本人原创文章纯净无利益纠葛如有不妥之处请及时联系修改或删除。诚邀各位读者秉持理性态度交流共筑和谐讨论氛围发现夸克网盘链接×是否打开打开No关闭