请教一个思路,我想写一个数据库操作的类.但是整个程序只想用一个连接,如何实现不管实例化多少个自定义类的对象,都只用一个连接对象呀?

tdcq123 2008-03-04 11:58:02
请教一个思路,我想写一个数据库操作的类.但是整个程序只想用一个连接,如何实现不管实例化多少个自定义类的对象,都只用一个连接对象呀?
---------------------------
我想实现数据库操作的封装,即将操作数据库的各种操作(比如打开记录集,执行存贮过程,执行sql语句等封装到类中),但是有一个问题,我没有好的思路.(假如我的这个类名为:mycls)
因为写了这个类,以后凡是操作数据库的话,就要先实例化一个对象.
dim obj1 as new mycls
但是不能每次都建立与数据库的连接呀,在局域网中,我想使用常连接,只有最后退出程序后才断开连接,而不是每操作一次数据库就开连接,然后关连接,这样频频操作,很浪费资源的呀.
可是这个类,每次都要实例化呀.如何在程序中实现,每次实例化的对象,都能共用一个惟一的已存在的连接对象呀?
给我一点思路吧.
...全文
235 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tdcq123 2008-03-06
  • 打赏
  • 举报
回复
我是想封装在类中,而不是在窗体中调用模块中的代码.
yidie 2008-03-06
  • 打赏
  • 举报
回复
'module1.bas
public g_Cnn as ADODB.Connection

'myCls中初始化
Private Sub Class_Initialize()
if g_Cnn is Nothing then
set g_Cnn=new Adodb.Connection 'g_Cnn全局变量
g_Cnn.ConnectionString ="Provider=......"
g_Cnn.ConnectionTimeout = 30
g_Cnn.open
elseif g_Cnn.State=adStateClosed then
g_Cnn.open
endif
End Sub
lcsfxs 2008-03-06
  • 打赏
  • 举报
回复
把连接放到INI文件中,然后连接不同的数据库只要修改INI文件就行了

'保存执行SQL语句的字符串
Public sqlstmt As String
'声明写入INI文件的API函数
Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Public Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
'定义服务器参数常量
Public server As String
Public user As String
Public password As String

'声明类模块变量
Public mydb As New clsdb
Public mybusinessman As New Clsbusinessman
Public mycustomer As New Clscustomer
Public mydeliver As New Clsdeliver
Public mybusiness As New Clsbusiness

下面是clsdb类
Option Explicit
'数据库连接
Public dbconn As New ADODB.Connection
'表明当前数据库的连接状态:FALSE---未连接;TRUE---已连接
Public dbstatus As Boolean
Public Function opendb() As Boolean
'定义连接字符串
Dim connstring As String
'通过系统初始化信息设定连接字符串
connstring = "driver={sql server};server=" + Trim(server) + ";uid=" + Trim(user) + ";pwd=" + Trim(password) + ";database=erp1"
'通过连接字符串对ADO对象进行打开操作
dbconn.Open connstring
'如果出现连接错误则跳转到errhandler
If Err.Number <> 0 Then MsgBox Err.description: GoTo errhandler
'打开数据库操作成功
opendb = True
Exit Function
'打开数据库操作失败
errhandler:
opendb = False
Exit Function
End Function
Public Function closedb() As Integer
'断开数据库连接
dbconn.Close
'标明数据库状态为断开
dbstatus = False
End Function
Public Function exesql(sqlstr As String, queryresult As ADODB.Recordset, Optional enablewrite As Boolean = True) As Boolean
'如果出错则跳转至errhandler
On Error GoTo errhandler:
'设置recordset对象
Set queryresult = New ADODB.Recordset
'判断对数据库是否能执行编辑操作
If enablewrite Then
queryresult.Open sqlstr, dbconn, adOpenStatic, adLockOptimistic '打开数据表且可以进行编辑
Else
queryresult.Open sqlstr, dbconn, adOpenStatic, adLockReadOnly '只读打开数据表
End If
'标记执行SQL操作成功
exesql = True
Exit Function
errhandler:
'标记执行SQL操作失败
exesql = False
Exit Function
End Function

下面对每个表可各建个类,然后调用CLSDB类
onetiger1243 2008-03-06
  • 打赏
  • 举报
回复
每次调用这个连接就行啊,到整个程序退出了,才用DISCONNECT,不知道这样行不?我一直是这样做的
Public Sub ADO_connect()
On Error GoTo err
If IsconnectADO = True Then
Exit Sub
End If
Set ADOsvr = New ADODB.Connection
ADOsvr.ConnectionTimeout = 4
ADOsvr.ConnectionString = "driver={SQL Server};server=svr;uid=sa;pwd=sa;"
ADOsvr.Open
IsconnectADO = True
Exit Sub
err:
ADO_disconnect
Exit Sub
End Sub

Public Sub ADO_disconnect()
If IsconnectADO = False Then
Exit Sub
End If
ADOsvr.Close
Set ADOsvr = Nothing
IsconnectADO = False
End Sub
Sandrer 2008-03-06
  • 打赏
  • 举报
回复
你把Dim obj1 As New mycls定义为全局的不就行了吗???
在一个模块中用Public来声明不就得了,然后在程序其他地方调用。
tdcq123 2008-03-06
  • 打赏
  • 举报
回复
无人回,伤心
sparrow_liu 2008-03-06
  • 打赏
  • 举报
回复
static静态函数,把那个类的一些需要外部调用的全整成静态的,这样使用的时候就可以不实例化。。直接使用就ok
cbm6666 2008-03-05
  • 打赏
  • 举报
回复
呵呵, 不共享的话, .cls 里面弄几个不同方式的开档Function, 库名与表名与其它属性全部用变量传递,封装在DLL里面,调用太方便了, 要共享的话, 呵呵....伤脑. 俺睡觉去了, 睡前再想看看吧.

其实你有没考虑过局域网镜像硬射盘符的方法呢 ? 我觉得挺好用的.

tdcq123 2008-03-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cbm666 的回复:]
呵呵, 不共享的话, .cls 里面弄几个不同方式的开档Function, 库名与表名与其它属性全部用变量传递,封装在DLL里面,调用太方便了, 要共享的话, 呵呵....伤脑. 俺睡觉去了, 睡前再想看看吧.

其实你有没考虑过局域网镜像硬射盘符的方法呢 ? 我觉得挺好用的.
[/Quote]

老大没明白我的意思,呵呵,不是共享硬盘.是多个实例化的对象共用一个连接对象.
因为同时有可能有多个对象存在,如果每一个对象都创建一个与数据库的连接,那么连接号也太多了,我不想这样,我想所有对象共享一个"连接对象",不知我描述清楚没有.
tdcq123 2008-03-04
  • 打赏
  • 举报
回复
实例化多个自定义类对象,如何共享一个连接对象呀?

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧