以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何初始化外部access数据库  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=28856)

--  作者:410109296
--  发布时间:2013/2/20 15:56:00
--  如何初始化外部access数据库
我做了个小财务软件,第二年需要另建数据库,我的思路是复制老的数据库,然后清空
代码如下:
If MessageBox.Show("本系统是单机版,且没有新建年度数据库时,让系统自己新建,选择 是" & vblf & " 系统是其他情况时,比如已经新建完数据库,或者是网络数据库 选择 否","新建数据库",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes Then
    Dim Val As String
    If InputValue(Val, "自定义名称","请输入新的年度数据库名称:" & vblf & "建议数据库的名称和接下来的数据源配置名称为年度 ") Then
        If FileSys.FileExists(ProjectPath & "images\\" & val & ".mdb") Then
            If Messagebox.Show("文件已经存在!  如果继续创建将丢失数据, 想覆盖么?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning) =DialogResult.OK Then
                FileSys.CopyFile(ProjectPath & "images\\njcwt.mdb", ProjectPath & "images\\" & val & ".mdb",True)
                MessageBox.Show("覆盖式创建年度数据库成功")
            Else
                Return
            End If
        Else
            FileSys.CopyFile(ProjectPath & "images\\njcwt.mdb", ProjectPath & "images\\" & val & ".mdb")
            Connections.Add(val,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ProjectPath & "images\\" & val & ".mdb;Persist Security Info=False")
            Dim cn As Connection = Connections(val)
            Dim Builder As New ADOXBuilder(val) \'数据源名称
            Builder.Open()
            For Each tbl As  ADOXTable In builder.Tables
                \'tbl 清空代码如何写
            Next
            Builder.Close()
            MessageBox.Show("创建年度数据库成功")
        End If
    End If
Else
    Syscmd.Project.ModifyOuterDataSource()
End If

--  作者:lin_hailun
--  发布时间:2013/2/20 16:09:00
--  
 楼主,你说的清空是指数据,还是只表结构?

 如果是表结构的话,就没有这种必要了。如果是数据的话,直接用sql语句清空就行了。

 如果,你想删除原来的表,重新建立各个表?


--  作者:lin_hailun
--  发布时间:2013/2/20 16:15:00
--  
 方法一:

Dim cmd As New SQLCommand
For Each name As String In Connections("xxxxxx").GetTableNames
    cmd.CommandText = "delete from {" & name & "}"
    cmd.ExecuteNonQuery
Next

--  作者:lin_hailun
--  发布时间:2013/2/20 16:26:00
--  
 方法二,复制表

Dim cmd As New SQLCommand
For Each name As String In Connections("xxxxxx").GetTableNames
    cmd.CommandText = "select * into 新表 from {" & name & "} where 1=2"
    cmd.ExecuteNonQuery
    cmd.CommandText = "drop table {" & name & "}"
    cmd.ExecuteNonQuery
    cmd.CommandText = "select * into " & name & " from {新表}"
    cmd.ExecuteNonQuery
    cmd.CommandText = "drop table {新表}"
    cmd.ExecuteNonQuery
Next

--  作者:410109296
--  发布时间:2013/2/20 19:04:00
--  
谢谢,豁然开朗,  你真厉害帅哥,在线噢!
lin_hailun

--  作者:410109296
--  发布时间:2013/2/20 20:30:00
--  
呵呵,少了一句  cmd.C
delete from 找不到具体数据源

在此补上,防止其他人走弯路

--  作者:410109296
--  发布时间:2013/2/20 20:31:00
--  
 cmd.ConnectionName = val