Foxtable(狐表)用户栏目专家坐堂 → 本地mdb文件和内部表的结构比对


  共有2871人关注过本帖树形打印复制链接

主题:本地mdb文件和内部表的结构比对

帅哥哟,离线,有人找我吗?
zhangchi96
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:555 积分:5037 威望:0 精华:0 注册:2012/2/11 13:27:00
本地mdb文件和内部表的结构比对  发帖心情 Post By:2019/8/2 17:03:00 [只看该作者]

1、说明: 本地文件  。。Data\临时\本地临时数据库.mdb

              目的:由于本地mdb文件作用是,在与服务器连接中断时,代替服务器的表,而服务器的表结构不断调整 ,这就时常要把本地文件的表结构和服务器的表结构比对并同步

 

共5个问题,敬请老师指教!!

 

 Dim 我的数据库 As String  '定义新增数据源时,数据源的名称

Dim 列类型 As String = "未知"

For Each 服务器里的表 As Table In Tables    ‘问题1:这里是先遍历的内部表,然后去查看本地文件的表,如何反之:先遍历本地文件里的表,再遍历表里的列名称

    If 服务器里的表.name.IndexOf("网络") <> -1 Then   '--如果 含有 "网络"两个字

        msgbox( 服务器里的表.name )

        Vars("新增数据源序号") = Vars("新增数据源序号") + 1

        我的数据库 = "数据库" & Vars("新增数据源序号")

        If FileSys.FileExists( ProjectPath & "Data\临时\本地临时数据库.mdb " ) Then '如果指定的文件存在

            Con_nections.Add( 我的数据库 , "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ProjectPath & "data\临时\本地临时数据库.mdb;Persist Security Info=False;Jet OLEDB:Dat_abase Password=mima")

            Dim cmd2 As new SQ_LCommand

            cmd2.Con_nectionName = 我的数据库

            cmd2.Com_mandText = "se_lect * fr_om {"& 服务器里的表.name &"} where 1=2"  ‘问题2:如果不存在【服务器里的表.name】,如何写个是否存在的判断语句

            Dim dt2 As Dat_aTable = cmd2.Exe_cuteReader

            For Each dc As DataCol In DataTables(服务器里的表.name).DataCols

                If dt2.DataCols.Contains(dc.name) Then  '如果存在【...】列

                Else

                    If dc.IsNumeric Then

                        列类型 = "数值型"

                    ElseIf dc.IsString Then

                        列类型 = "字符型"

                    ElseIf dc.IsDate Then

                        列类型 = "日期型"

                    ElseIf dc.IsBoolean Then

                        列类型 = "逻辑值型"

                    End If   ‘问题3:列类型是否就这么四种

                    If MessageBox.Show(  " 本地: 无" & dc.name & " 是否新建该列?", "请确认", MessageBoxButtons.YesNo)=DialogResult.Yes Then

                        If 列类型 = "数值型" Then

                            cmd2.Com_mandText = "al_ter table {"& 服务器里的表.name &"} add  dc.name DOUBLE;"  ‘’问题4,下划线的写法是错误的,我改成 “& dc.name &”等多种表达方式都失败了

                        ElseIf 列类型 = "字符型" Then

                            cmd2.Com_mandText = "al_ter table {"& 服务器里的表.name &"} add  dc.name text(255);"

                        ElseIf 列类型 =  "日期型" Then

                            cmd2.Com_mandText = "al_ter table {"& 服务器里的表.name &"} add  dc.name timestamp;"

                        ElseIf 列类型 = "逻辑值型" Then

                            cmd2.Com_mandText = "al_ter table {"& 服务器里的表.name &"} add  dc.name ??? ;"  ‘问题5:对于逻辑值型,这里的问号部分该如何表达?

                        End If

                    End If

                End If

            Next

        End If

    End If

Next

[此贴子已经被作者于2019/8/2 17:25:33编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110790 积分:563882 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/2 17:40:00 [只看该作者]

3、基本类型就这4种,如果要准确的,参考下面代码

    Dim dc As DataCol = DataTables("表A").DataCols("第一列")
    output.show(dc.Name & " " & dc.IsNumeric & " " & dc.datatype.Name & dc.MaxLength)
4、
cmd2.CommandText = "alter table " & 服务器里的表.name & " add [" & dc.name & "] float;"

5、
cmd2.CommandText = "alter table " & 服务器里的表.name & " add [" & dc.name & "] bit;"


 回到顶部