ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: chenwenyong

[讨论] 谁有可以在二维数组里执行SQL查询的类模块或者外接动态链接k

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-24 21:51 | 显示全部楼层
Sub CreateEmptyRecordset()

arr = Range("a1:c11")

Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")

arrfield = Application.Index(arr, 1, 0)
For i = LBound(arrfield) To UBound(arrfield)
  rs.Fields.Append arrfield(i), adInteger, 2   '字段类型有哪些可供选择,这里我不知道哪里可以查到
Next
rs.Open


For i = 2 To UBound(arr)
  rs.AddNew
  arrvalue = Application.Index(arr, i, 0)
  For j = LBound(arrfield) To UBound(arrfield)
    rs(arrfield(j)).Value = arrvalue(j)      ‘这里我想添加进多行数据,我这里只能弄进去一行,
  Next
  rs.Update
  rs.MoveLast
Next
   ' rs.Update
    arrout = rs.GetRows
    rs.Close
    Set rs = Nothing

End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-24 21:54 | 显示全部楼层
Sub CreateEmptyRecordset()

arr = Range("a1:c11")

Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")

arrfield = Application.Index(arr, 1, 0)
For i = LBound(arrfield) To UBound(arrfield)
  rs.Fields.Append arrfield(i), adInteger, 2
Next
rs.Open


For i = 2 To UBound(arr)
  rs.AddNew
  arrvalue = Application.Index(arr, i, 0)
  For j = LBound(arrfield) To UBound(arrfield)
    rs(arrfield(j)).Value = arrvalue(j)
  Next
  rs.Update
  rs.MoveLast
Next
   ' rs.Update
    arrout = rs.GetRows
    rs.Close
    Set rs = Nothing

End Sub
字段的数据类型我不知道有什么可供选择的参数;怎么添加多行数据;(主要就是想用记录的筛选,排序功能)

ADO.rar

16.27 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-6-25 08:27 | 显示全部楼层


Option Explicit

Sub A()
    Dim rs, arr, i&
    Set rs = CreateObject("adodb.recordset")
    arr = [a1].CurrentRegion
    With rs
        .Fields.Append "a", 3, , 32
        .Fields.Append "b", 3, , 32
        .Fields.Append "c", 3, , 32
        .Open
    End With
    For i = 2 To UBound(arr)
        rs.AddNew Array(0, 1, 2), _
        Array(arr(i, 1), arr(i, 2), arr(i, 3))
    Next
    rs.MoveFirst
    rs.Sort = "a DESC"
    [e:j] = ""
    Range("e2").CopyFromRecordset rs
    rs.Close
    Set rs = Nothing
End Sub



Append 方法 (ADO)

将对象追加到集合中。如果集合是 Fields,将其追加到集合之前可以创建新的 Field 对象。

语法

fields.Append Name, Type, DefinedSize, Attrib

参数

fields   Fields 集合。

object   对象变量,代表所要追加对象。

Name   字符串,新 Field 对象的名称,不得与 fields 中的任何其他对象同名。

Type   DataTypeEnum 类型,其默认值为 adEmpty。新字段的数据类型。

DefinedSize   可选,长整型,指示新字段的定义大小(以字符或字节为单位)。该参数的默认值源于 Type (默认的 Type 为 adEmpty,默认的 DefinedSize 未指定)。

Attrib   可选,FieldAttributeEnum,其默认值是 adFldDefault。指定新字段的属性。如果该值未指定,字段将包含源于 Type 的属性。

参数

在集合上使用 Append 方法可将对象添加到该集合,此方法仅在 Command 对象的 Parameters 集合上有效。在将 Parameter 对象追加到 Parameters 集合中之前必须设置其 Type 属性。如果选定了变长数据类型,则必须将 Size 属性设置为大于零的值。

通过对参数作出说明,可以最大程度地减少对提供者的调用,进而在使用存储过程或参数化查询时提高性能,但必须了解与所要调用的存储过程或参数化查询相关联的参数属性。使用 CreateParameter 方法可创建具有适当属性设置的 Parameter 对象,而使用 Append 方法则可将它们添加到 Parameters 集合。这样可以不必调用参数信息的提供者而设置和返回参数值。如果写到不提供参数信息的提供者,则必须使用该方法手工填写 Parameters 集合以便能够完全使用参数。

字段

在调用 fields.Append 方法前须将 CursorLocation 属性设置为 adUseClient。

对打开的 Recordset 或已设置 ActiveConnection 属性的 Recordset ,调用其 fields.Append 方法将引发运行时错误。

Attributes 常量    值           说明
adFldUpdatable     4    字段可写
adFldFixed           16    字段数据定长
adFldIsNullable     32    字段允许 Null 值
adFldMayBeNull   64    可从字段读取 Null 值
adFldLong            128    long binary 字段  

Type 常量          值   说明
adEmpty            0    未指定类型(DBTYPE_EMPTY).  
adSmallInt         2    2 字节(16-bit)有符号整数(DBTYPE_I2).
adInteger          3    4 字节(32-bit)有符号整数(DBTYPE_I4).
adSingle           4    4 字节(32-bit)单精度IEEE浮点数(DBTYPE_R4).
adDouble           5    8 字节(64-bit)双精度IEEE浮点数(DBTYPE_R8).
adCurrency         6    Currency 值(DBTYPE_CY)。Currency 是 4 位小数定点数,以扩大10000倍的 8 字节有符号整数存储。OLE DB Provider 不支持此类型。
adDate             7    日期类型,以 Double 类型存储,整数部分是 1899-12-30 以来的天数,小数部分是一天的分数。OLE DB Provider 不支持此类型。
adBSTR             8    以 null 终止的 Unicode 字符串(DBTYPE_BSTR)。OLE DB Provider 不支持此类型。
adIDispatch        9    指向 OLE 对象 IDispatch 接口的指针(DBTYPE_IDISPATCH). OLE DB Provider 不支持此类型。
adError           10    32-bit错误代码(DBTYPE_ERROR)。OLE DB Provider 不支持此类型。  
adBoolean         11    Boolean 值(DBTYPE_BOOL)。OLE DB Provider 不支持此类型。
adVariant         12    自动化 variant 类型(DBTYPE_VARIANT)。OLE DB Provider 不支持此类型。
adIUnknown        13    指向 OLE 对象 IUnknown 接口的指针(DBTYPE_IUNKNOWN)。OLE DB Provider 不支持此类型。
adDecimal         14    固定精度和小数位数的数字数据(DBTYPE_DECIMAL).
adTinyInt         16    单字节(8-bit)有符号整数(DBTYPE_I1)。OLE DB Provider 不支持此类型。  
adUnsignedTinyInt 17    单字节(8-bit)无符号整数(DBTYPE_UI1)。OLE DB Provider 不支持此类型。
adUnsignedSmallInt 18   2 字节(16-bit)无符号整数(DBTYPE_UI2)。OLE DB Provider 不支持此类型。
adUnsignedInt     19    4 字节(32-bit)无符号整数(DBTYPE_UI4)。OLE DB Provider 不支持此类型。
adBigInt          20    8 字节(64-bit)有符号整数(DBTYPE_I8)。OLE DB Provider 不支持此类型。
adUnsignedBigInt  21    8 字节(64-bit)无符号整数(DBTYPE_UI8)。OLE DB Provider 不支持此类型。
adGUID            72    全局唯一标识符或 GUID 类型(DBTYPE_GUID)。OLE DB Provider 不支持此类型。
adBinary         128    定长二进制数据(DBTYPE_BYTES)
adChar           129    字符串量(DBTYPE_STR)
adWChar          130    以 null 终止的 Unicode 字符串(DBTYPE_WSTR)。OLE DB Provider 不支持此类型。
adNumeric        131    精度和小数位数准确指定的数字数据(DBTYPE_NUMERIC)
adUserDefined    132    用户定义数据类型(DBTYPE_UDT)。OLE DB Provider 不支持此类型。
adDBDate         133    OLE DB 日期结构(DBTYPE_DATE)
adDBTime         134    OLE DB 时间结构(DBTYPE_TIME)
adDBTimeStamp    135    OLE DB timestamp 结构(DBTYPE_TIMESTAMP)
adVarChar        200    可变长字符数据(DBTYPE_STR)
adLongVarChar    201    长字符串值
adVarWChar       202    Unicode 字符串值。OLE DB Provider 不支持此类型。
adLongVarWChar   203    长 Unicode 字符串值。OLE DB Provider 不支持此类型。
adVarBinary      204    可变长二进制值(DBTYPE_BYTES)
adLongVarBinary  205    长二进制值

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-25 12:24 来自手机 | 显示全部楼层
魂断蓝桥 发表于 2024-6-25 08:27
Option Explicit

Sub A()

感谢大师!输入多行数据昨晚以搞定,现在就是数据类型这个搞定就OK,我好好研究大师的回复

TA的精华主题

TA的得分主题

发表于 2024-6-25 13:38 | 显示全部楼层
chenwenyong 发表于 2024-6-25 12:24
感谢大师!输入多行数据昨晚以搞定,现在就是数据类型这个搞定就OK,我好好研究大师的回复

可以看一看vbRichClient5 用sqlite 更好一些,sqlite支持窗口函数,支持内存数据库

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-25 21:35 来自手机 | 显示全部楼层
魂断蓝桥 发表于 2024-6-25 13:38
可以看一看vbRichClient5 用sqlite 更好一些,sqlite支持窗口函数,支持内存数据库

这个好像只有32位吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-25 21:36 来自手机 | 显示全部楼层
魂断蓝桥 发表于 2024-6-25 08:27
Option Explicit

Sub A()

空值经过纪录处理后输出0,有没有哪个参数保持空值的

TA的精华主题

TA的得分主题

发表于 2024-6-26 11:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-27 21:57 来自手机 | 显示全部楼层
魂断蓝桥 发表于 2024-6-25 13:38
可以看一看vbRichClient5 用sqlite 更好一些,sqlite支持窗口函数,支持内存数据库

经测试,直接写数据入纪录的方式,10000行就开始卡了!现在得考虑你这个方式

TA的精华主题

TA的得分主题

发表于 2024-6-28 10:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chenwenyong 发表于 2024-6-27 21:57
经测试,直接写数据入纪录的方式,10000行就开始卡了!现在得考虑你这个方式

是的,窗口函数这个功能,就值得你尝试一下。
而且sqlite 可以混搭数据,比如这一列可以有数值有文本

image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 20:34 , Processed in 0.032527 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表