Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

哪位老大写过:依据 RS(数据集) 创建表 的过程(函数),希望能学习一下。

litao  发表于:2014-08-25 06:02:38  
复制

我前面写了一个将RS数据写入已有的表的函数,发布出来 将获取的RS数据集 写入 本地表!   http://www.accessoft.com/blog/article-show.asp?userid=37995&Id=9557

但是感觉不是很完美,直接用RS创建一个表更好。

请各位老大展示一下珍藏!

 

Top
litao 发表于:2014-08-25 09:38:28

我写了一个,请各位老师指正。感觉对数据类型的处理(红色部分),仍有问题。

'rs 数据集

'TableName 表名

'PRIMARY_KEY 首字段设置为“主键

Sub RSnewTable(rs As ADODB.Recordset, TableName As String, Optional PRIMARY_KEY As Boolean = False)
    If Not rs.State = 1 Then
        MsgBox "RS 数据集 已经关闭!"
        Exit Sub
    End If
    Call DelTable1(TableName) '检查原有表是否存在,存在即删除
    Dim SQLstr As String, i As Long, Maxi As Long, Fid As String, Fdtyp As String, FdLen As Long
    Maxi = rs.Fields.Count
    SQLstr = ""
    For i = 0 To Maxi - 1

        Fid = "[" & rs.Fields(i).name & "] " '字段名

        Fdtyp = FieldType(rs.Fields(i).Type) '读数据类型

        FdLen = rs.Fields.Item(i).DefinedSize '字段长度
        If Fdtyp = "CHAR" Or Fdtyp = "NCHAR" Or Fdtyp = "VARCHAR" Or Fdtyp = "NVARCHAR" Then  '“文本”类型处理
            If (FdLen > 255) Then
                Fdtyp = "Memo" '更改为“备注”
            Else
                Fdtyp = "CHAR(" & FdLen & ")" '更改为 定长“文本”
            End If
        End If

        If Fdtyp = "NTEXT" Or Fdtyp = "TEXT" Then Fdtyp = "Memo" '更改为“备注”       
        
        If PRIMARY_KEY And i = 0 Then '指定 首字段 为“主键”
            Fid = Fid & Fdtyp & " PRIMARY KEY "
        Else
            Fid = Fid & Fdtyp & " null"
        End If       
        SQLstr = SQLstr & "," & Fid '连接
    Next i
    
    If Mid(SQLstr, 1, 1) = "," Then SQLstr = Mid(SQLstr, 2)
    SQLstr = "CREATE TABLE [" & TableName & "](" & SQLstr & ")" '装入
    Debug.Print SQLstr
    DoCmd.RunSQL SQLstr
End Sub



litao 发表于:2014-08-25 09:42:45
'*********************************************************
'*   名称:FieldType
'*   功能:返回字段类型
'*   用法:FieldType(nType   as   integer)
'*********************************************************

Public Function FieldType(nType As Integer) As String
        Select Case nType
                Case 128
                        FieldType = "BINARY"
                Case 11
                        FieldType = "BIT"
                Case 129
                        FieldType = "CHAR"
                Case 135
                        FieldType = "DATETIME"
                Case 131
                        FieldType = "DECIMAL"
                Case 5
                        FieldType = "FLOAT"
                Case 205
                        FieldType = "IMAGE"
                Case 3
                        FieldType = "INT"
                Case 6
                        FieldType = "MONEY"
                Case 130
                        FieldType = "NCHAR"
                Case 203
                        FieldType = "NTEXT"
                Case 131
                        FieldType = "NUMERIC"
                Case 202
                        FieldType = "NVARCHAR"
                Case 4
                        FieldType = "REAL"
                Case 135
                        FieldType = "SMALLDATETIME"
                Case 2
                        FieldType = "SMALLMONEY"
                Case 6
                        FieldType = "TEXT"
                Case 201
                        FieldType = "TIMESTAMP"
                Case 128
                        FieldType = "TINYINT"
                Case 17
                        FieldType = "UNIQUEIDENTIFIER"
                Case 72
                        FieldType = "VARBINARY"
                Case 204
                        FieldType = "VARCHAR"
                Case 200
                        FieldType = ""
        End Select
End Function



煮江品茶 发表于:2014-08-25 16:05:17

没什么意义。

Sql Server和oracle均可通过编程创建数据表,应该用数据库本身的处理能力来解决此类问题。这样也就与前台是什么开发语言无关了,也就是说无论前台是什么开发语言,只要它能调用数据库的某个存储过程(可能带参数),后台均可自动创建需要的数据表。



litao 发表于:2014-08-26 07:43:28

嗯!

如果有现成的系统函数当然更好。

请教@煮江品茶老师,ACCESS2003终端 +SQL2008, 用VBA如何将RS数据集,自动生成(保存为)本地ACCESS表(VBA 代码所在的 ACCESS终端文件中)。



总记录:4篇  页次:1/1 9 1 :