数据库链接需要每次都做吗?

xl_xl 2002-04-03 08:49:34
程序中需要大量的数据库操作,可以只在form load时链接一次,在退出时再关闭,而不每次使用数据库时就链接吗?另外RecorderSet是不是也可以使用一个(只new一次)?
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaczg 2002-04-03
  • 打赏
  • 举报
回复
用mts,他在程序退出时他会延时关闭连接,如果刚好又有新程序打开,他会用原连接。
并且它能使程序share连接
lihonggen0 2002-04-03
  • 打赏
  • 举报
回复
'将连接字符串写在模块里,定义为Public

Public adoCN As New ADODB.Connection '定义数据库的连接存放数据和代码
Public adoCNAccess As New ADODB.Connection '定义数据库的连接存放数据和代码
Public adoCNAccess1 As New ADODB.Connection '定义数据库的连接存放数据和代码
Public adoCNtemp As New ADODB.Connection '临时数据库
Public SqlCommand As New ADODB.Command '定义 SQL 命令
Public RsUsers As New ADODB.Recordset
Public RsDept As New ADODB.Recordset
Public Rs_Dm_Level As New ADODB.Recordset
Dim adoDateTime As New ADODB.Recordset '获取 NT-SERVER 时间
'***********************************************************************
'* 功能:与 SQL SERVER 数据库建立连接并取出服务器时间
'***********************************************************************
Public Function OpenConnection1() As String '打开数据库
End Function

Public Function OpenConnection() As String '打开数据库
On Error GoTo SQLConErr
With adoCN
.CursorLocation = adUseClient
.Provider = "sqloledb"
.Properties("Data Source").Value = cNtServerName
.Properties("Initial Catalog").Value = cDatabaseName
.Properties("User ID") = cSQLUserName
.Properties("Password") = cSQLPassword
.Properties("prompt") = adPromptNever
.ConnectionTimeout = 15
.Open

If .State = adStateOpen Then
adoDateTime.Open "select getdate()", adoCN, adOpenStatic, adLockOptimistic
cServerDate = Format(adoDateTime(0), "yyyy-mm-dd")
cServertime = Mid(adoDateTime(0), 10)
Else
MsgBox "数据库连接失败,请找系统管理员进行检查 !", 16, cProgramName
End
End If
End With

SqlCommand.ActiveConnection = adoCN
SqlCommand.CommandType = adCmdText
Exit Function
SQLConErr:
Select Case Err.Number
Case -2147467259
MsgBox "找不到指定的SQL Server服务器或者数据库不存在,请重新设置!", vbExclamation
F_SetSystem.Show 1
Case -2147217843
MsgBox "指定的SQL Server数据库用户不存在或口令错误,请重新设置!", vbExclamation
F_SetSystem.Show 1
Case Else
MsgBox "数据环境连接失败,请找系统管理员进行检查 !", 16, cProgramName
End Select
OpenConnection
End Function

'***********************************************************************
'* 功能:连接数据报表环境
'*
'***********************************************************************
Public Sub OpenDEConnection() '连接数据环境
On Error GoTo DEConErr
With DE_Report.Con_report
If .State = adStateOpen Then
.Close
End If
.CursorLocation = adUseClient
.ConnectionTimeout = 15
.ConnectionString = "Provider=SQLOLEDB.1;Password=" & cSQLPassword & ";Persist Security Info=True;User ID=" & cSQLUserName & ";Initial Catalog=" & cDatabaseName & ";Data Source=" & cNtServerName
.Open
End With
Exit Sub
DEConErr:
Select Case Err.Number
Case Else
MsgBox "数据环境连接失败,请找系统管理员进行检查 !", 16, cProgramName
End
End Select
End Sub

Public Function OpenAccess() As String
With adoCNAccess
If .State <> adStateOpen Then
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & cProgramPath & "Trade.mdb" ';password=allway"
.ConnectionTimeout = 5
.Open
If .State = adStateOpen Then
OpenAccess = "数据库连接成功"
Else
OpenAccess = "数据库连接失败,请按帮助进行检查 !"
MsgBox "数据库连接失败,请找系统管理员进行检查 !", 16, cProgramName
End
End If
End If
End With
End Function

vivan19781111 2002-04-03
  • 打赏
  • 举报
回复
str 代表什么,是表示汉字吧。
sbm 2002-04-03
  • 打赏
  • 举报
回复
很简单,用全局变量,FORM关闭不会CLOSE RECORDSET
vivan19781111 2002-04-03
  • 打赏
  • 举报
回复
在form load时链接一次,在退出时再关闭也可以,recordset可以
用一个(dim rs as adodb.recordset),但是使用完一个必须close rs,set rs=nothing关闭
xl_xl 2002-04-03
  • 打赏
  • 举报
回复
那同志们看看如下代码,错在哪里,其实也没有错,但运行时间太长,10秒钟后死掉。这是一个取得汉字字符串拼音的函数,返回汉字字符串的拼音字符串。

Private Function GetPY(str As String) As String
Dim objRS As ADODB.Recordset
Dim strSql As String
Set objRS = New ADODB.Recordset
Dim tempStr As String

Dim str1, temp, tempPY As String

Dim i As Integer
str1 = str
tempPY = ""
For i = 1 To Len(str1)
temp = Mid(str1, i, 1)
strSql = "Select py From PY where hz='" & temp & "'"
objRS = objConn.Execute(strSql)
tempPY = tempPY & objRS("py")
Set objRS = Nothing
Next
GetPY = tempPY
End Function
bitsoft 2002-04-03
  • 打赏
  • 举报
回复
考虑程序的效率,connection只要new一个就够了,recordset可以是多个
gump2000 2002-04-03
  • 打赏
  • 举报
回复
建议使用一个全局变量,一直连接到程序退出再Close
在Module中
public Syscnn as adodb.connection

recordset可以按照您自己的要求,一个有时候还不能满足您的要求呢:)
miniant 2002-04-03
  • 打赏
  • 举报
回复
最好不要每次使用数据库时再重新链接,RecorderSet也可以只使用一个,前提是数据库链接和RecorderSet必须是模块级变量或者是全局变量,并且操作的是同一数据库和记录集。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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