本人正致力于开发一在套vb+sql的图书租借系统,由于生手,所以手生,问题多多.希望各位指教:1,系统运行过程中经常会无缘无故的退出,请问是否vb的代码有问题?可能的原因????2,有一模块功能是备份和还原数据库,提示错误:"一般性网络错误,请检查网络文档".
   在一般情况下,备份可以顺利实现,还原也没有什么问题. 
   问题是:还原时如果命名数据库名和原来的相同,则出现以上错误. 
   郁闷的是:换一个数据库则此问题不复存在!重名可以覆盖啊!为什么只有这一个数据库不行呢??? 3,会员机制中,会员充值的钱数有时会跑到其他会员的帐户上...
    这个太致命了,绝对硬伤!是我的sql语句有问题?或者您知道其他原因?暂时先请教这么些吧,我对大家寄予厚望啊,希望大家不要吝惜自己的观点,共同探讨下!
 

解决方案 »

  1.   

    第二个问题的代码,麻烦大家给看下!Option Explicit
    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
      

  2.   

    这是SQL数据库还原备份的文章链接地址,可能对你有所帮助!
    http://blog.csdn.net/a5878431/archive/2008/06/15/2551201.aspx