本人正致力于开发一在套vb+sql的图书租借系统,由于生手,所以手生,问题多多.希望各位指教:1,系统运行过程中经常会无缘无故的退出,请问是否vb的代码有问题?可能的原因????2,有一模块功能是备份和还原数据库,提示错误:"一般性网络错误,请检查网络文档".
在一般情况下,备份可以顺利实现,还原也没有什么问题.
问题是:还原时如果命名数据库名和原来的相同,则出现以上错误.
郁闷的是:换一个数据库则此问题不复存在!重名可以覆盖啊!为什么只有这一个数据库不行呢??? 3,会员机制中,会员充值的钱数有时会跑到其他会员的帐户上...
这个太致命了,绝对硬伤!是我的sql语句有问题?或者您知道其他原因?暂时先请教这么些吧,我对大家寄予厚望啊,希望大家不要吝惜自己的观点,共同探讨下!
在一般情况下,备份可以顺利实现,还原也没有什么问题.
问题是:还原时如果命名数据库名和原来的相同,则出现以上错误.
郁闷的是:换一个数据库则此问题不复存在!重名可以覆盖啊!为什么只有这一个数据库不行呢??? 3,会员机制中,会员充值的钱数有时会跑到其他会员的帐户上...
这个太致命了,绝对硬伤!是我的sql语句有问题?或者您知道其他原因?暂时先请教这么些吧,我对大家寄予厚望啊,希望大家不要吝惜自己的观点,共同探讨下!
Dim FileName As String, DataBaseName As String
Dim cn As ADODB.Connection
Dim SqlStr As StringPrivate Sub Command1_Click()
Label1.Caption = "请输入你要备份的数据库名:"
Text1.Visible = True: Text2.Visible = False
Text1 = "": Text1.SetFocus
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim IsAddBackup As Boolean
If KeyAscii = 13 Then
'设置需要备份的数据库名
DataBaseName = Text1.Text
'设置备份文件的路径文件名
CommonDialog1.Filter = "*.dat|*.dat"
CommonDialog1.ShowSave
FileName = CommonDialog1.FileName
IsAddBackup = True
'调用数据备份过程
BackupDatabase FileName, DataBaseName, IsAddBackup
End If
End Sub
Private Sub Command2_Click()
Label1.Caption = "请输入你要还原的数据库名:"
Text1.Visible = False: Text2.Visible = True
Text2.Text = "": Text2.SetFocus
End SubPrivate Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
'设置需要备份的数据库名
DataBaseName = Text2.Text
'设置备份文件的路径文件名
CommonDialog1.Filter = "*.dat|*.dat"
CommonDialog1.ShowOpen
FileName = CommonDialog1.FileName
'调用数据还原过程
RestoreDataBase FileName, DataBaseName
End If
End SubPrivate Sub Command3_Click()
Unload Me
End SubPrivate Sub BackupDatabase(ByVal BackUpFileName$, ByVal DataBaseName$, Optional ByVal IsAddBackup As Boolean = False)
On Error GoTo X1
'创建对象
Set cn = New ADODB.Connection
'连接数据库服务器,根据当前数据库服务器的情况设置连接字符串
'cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=luckystar"
'cn.Open "Provider=MSDASQL.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=luckystar"
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=luckystar;Data Source=A-449615FECAA94"
'cn.Open "Provider=MSDASQL.1;Password="";Persist Security Info=True;User ID=sa;Data Source=luckystar;Initial Catalog=luckystar"
'生成数据库备份语句
SqlStr = "backup database [" & DataBaseName & "]" & vbCrLf & _
"to disk='" & BackUpFileName & "'" & vbCrLf & _
"with description='" & "zj-backup at:" & Date & "(" & Time & ")'" & vbCrLf & _
IIf(IsAddBackup, "", ",init")'执行备份操作
cn.Execute SqlStr
MsgBox " 数据备份成功!"
Exit Sub
X1:
MsgBox "数据库名错误,请输入正确数据库名!"
Text1.Text = "": Text1.SetFocus
End SubPrivate Sub RestoreDataBase(ByVal sBackUpfileName$, ByVal sDataBaseName$, Optional ByVal sDataBasepath$ = "", Optional ByVal sBackupNumber& = 1, Optional ByVal sReplaceExist As Boolean = True)
Dim rs As ADODB.Recordset
Dim SqlStr As String, XRet As String, XI As String
'创建对象
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
'连接数据库服务器,根据数据库服务器设置连接字符串
'cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=luckystar"
'cn.Open "Provider=MSDASQL.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=luckystar"
cn.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=luckystar;Data Source=A-449615FECAA94"
'cn.Open "Provider=MSDASQL.1;Password="";Persist Security Info=True;User ID=sa;Data Source=luckystar;Initial Catalog=luckystar"
'得到还原后的数据库存放目录,如果没有指定,存放到sql server 的DATA目录
If sDataBasepath = "" Then
SqlStr = "Select filename from master..sysfiles"
rs.Open SqlStr, cn, adOpenKeyset, adLockReadOnly
SqlStr = rs(0)
rs.Close
sDataBasepath = Left(SqlStr, InStrRev(SqlStr, "\"))
End If
'关闭用户进程,防止其他用户正在使用数据库,导致数据还原失败
SqlStr = "Select spid from master..sysprocesses where dbid=db_id('" & sDataBaseName & "')"
rs.Open SqlStr, cn, adOpenKeyset, adLockReadOnly
While rs.EOF = False
SqlStr = "kill " & rs(0)
cn.Execute SqlStr
rs.MoveNext
Wend
rs.Close
'获取数据库还原信息
SqlStr = "Restore filelistonly from disk='" & sBackUpfileName & "'" & vbCrLf & "with file =" & sBackupNumber
rs.Open SqlStr, cn, adOpenKeyset, adLockReadOnly
'生成数据库还原语句
SqlStr = "restore database[" & sDataBaseName & "]" & vbCrLf & "from disk='" & sBackUpfileName & "'" & vbCrLf & "with file=" & sBackupNumber & vbCrLf
With rs
While Not rs.EOF
XRet = rs("physicalName")
XI = InStrRev(XRet, ".")
XRet = IIf(XI = 0, "", Mid(XRet, XI)) & "'"
SqlStr = SqlStr & ",move'" & rs("LogicalName") & "'to'" & sDataBasepath & sDataBaseName & XRet & vbCrLf
.MoveNext
Wend
.Close
End With
SqlStr = SqlStr & IIf(sReplaceExist, ",replace", "")
'执行数据还原操作
cn.Execute SqlStr
MsgBox "数据还原成功!"
End Sub
http://blog.csdn.net/a5878431/archive/2008/06/15/2551201.aspx