以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  本地mdb文件和内部表的结构比对  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=138524)

--  作者:zhangchi96
--  发布时间:2019/8/2 17:03:00
--  本地mdb文件和内部表的结构比对

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编辑过]

--  作者:有点蓝
--  发布时间: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;"