标签: recordset

什么是记录集中rs.close vs rs = nothing之间的区别

我经常发现它在何时适合使用时令人困惑:

rs.Close 
Run Code Online (Sandbox Code Playgroud)

反对

Set rs = Nothing
Run Code Online (Sandbox Code Playgroud)

我可以理解需要关闭与源的连接,但是当变量超出范围时我是否应该同时使用它们?

我可以将变量设置为Nothing以跳过关闭连接的步骤吗?这会被认为是一种不好的做法吗?

ms-access vba recordset

19
推荐指数
3
解决办法
2万
查看次数

Java编程 - Spring和JDBCTemplate - 使用query,queryForList还是queryForRowSet?

My Java(JDK6)项目使用SpringJDBCTemplate进行所有数据库访问.我们最近从Spring 2.5升级到Spring 3(RC1).该项目不使用像HibernateEJB这样的ORM .

如果我需要读取一堆记录,并用它们做一些内部处理,似乎有几个(重载)方法:query,queryForList和queryForRowSet

使用一个而不是另一个的标准应该是什么?有任何性能差异吗?最佳做法?

您是否可以推荐一些外部参考资料以进一步研究该主题?

java spring recordset jdbctemplate

15
推荐指数
1
解决办法
3万
查看次数

在VBA中深层复制或克隆ADODB记录集

我一直在寻找一种在VBA中复制或复制记录集的方法.我的意思是,让不正确的数据彼此独立.

我试过了

Set copyRS = origRS.Clone
Set copyRS = origRS
Run Code Online (Sandbox Code Playgroud)

当我使用任何方法时,我无法修改一个记录集而不修改另一个记录集.所以在这个例子中:

  1. 我创建了一个记录集
  2. 我用John命名记录集
  3. 我克隆了记录集
  4. 我修改克隆的那个
  5. 检查结果

码:

Dim origRS As Recordset, copyRS As Recordset
Set origRS = New Recordset
'Create field
origRS.Fields.Append "Name", adChar, 10, adFldUpdatable
origRS.Open
'Add name
origRS.AddNew "Name", "John"
'Clone/copy
Set copyRS = origRS.Clone
'Change record in cloned/copied recordset
copyRS.MoveFirst
copyRS!Name = "James"
'This should give me "JamesJohn"
MsgBox copyRS.Fields(0).Value & origRS.Fields(0)
Run Code Online (Sandbox Code Playgroud)

但不幸的是,对我来说,这会修改两个记录集

我的问题是:

有没有办法从另一个记录集复制记录集,然后彼此独立地修改数据(没有循环)?

我知道你可以通过一个循环来做到这一点,但是没有别的办法吗?

excel vba adodb recordset excel-vba

13
推荐指数
1
解决办法
7465
查看次数

单个更新SQL语句的多行更新SQL触发器

好.我对SQL触发器很新,并且遇到了一些问题.插入触发器工作正常,还有删除触发器.首先,在多行上执行删除只会删除一行,但我设法为自己找出一个:)

然而,即使经过大量搜索(此处和谷歌),我也无法找到我所拥有的UPDATE触发器的满意答案.如果我像这样做更新

UPDATE Customers Set CustomerUser = 0 Where CustomerStatus = 3
Run Code Online (Sandbox Code Playgroud)

然后不幸的是,只有一条记录会被更新,而另一条记录将保持不变.显然,这不好.

我使用的触发器是:

ALTER TRIGGER [dbo].[TRG_TriggerName] ON [dbo].[USER_Customers]

FOR UPDATE

AS
declare @customerid int;
declare @customervenue int;
declare @customeruser int;
declare @customerarea int;
declare @customerevent int;
declare @customerproject int;
declare @customerstatus int;

select @customerid=i.CustomerID from inserted i;
select @customervenue=i.CustomerVenue from inserted i;
select @customerarea=i.CustomerArea from inserted  i;
select @customerevent=i.CustomerEvent from inserted i;
select @customerproject=i.CustomerProject from inserted i;
select @customeruser=i.CustomerUser from inserted i;
select @customerstatus=i.CustomerStatus from inserted i;

Update USER_Instances …
Run Code Online (Sandbox Code Playgroud)

sql sql-server triggers recordset

10
推荐指数
1
解决办法
2万
查看次数

检索ADO记录集字段名称(经典ASP)

我想知道是否有人可以帮忙:

长话短说,我正在使用MSSQL2005来构建一个Pivot表.正在检查的数据受日期范围限制(从最近的星期一到所选日期的所有数据为1周)

当我运行存储过程并传递一个日期时,我得到正确的表格,例如:

时间 | 09年1月1日 | 2009年1月2日 | 2009年1月3日 | ...

09:00 | 0 | 9 | 25 | ...

09:30 | 8 | 27 | 65 | ...

10:00 | 20 | 44 | 112 | ...

(对于残暴的"表格"格式表示道歉).

我唯一的问题是列标题将根据传入SP的日期(所需的视图日期)和SP内的逻辑(强制左侧列为最接近的星期一)而变化指定).

这意味着当我向用户显示结果时,我(当前)需要复制经典ASP中的日期检查逻辑[容易但可维护性失败]

我真正需要的是一种从记录集本身检索列名的方法.

有人可以指点我正确的方向吗?

我用Google搜索了但是我得到的所有结果似乎都与读取表格模式有关 - 在这种情况下这没有用,因为我的表格是在内存中动态生成的.

非常感谢您提供的任何帮助

pivot ado recordset asp-classic

9
推荐指数
2
解决办法
4万
查看次数

关闭PreparedStatements

使用PreparedStatements和ResultSets是否每次使用时都会创建"新数据库实例"?或者,换句话说,如果我使用PreparedStatement和ResultSet,我应该在每次使用后关闭它们还是在完成后关闭它们?

例:

while (...){
        p = connection.prepareStatement(...);
        r = p.executeQuery();
        while (r.next()) {
        ....
        }
 }
 // We close at the end. Or there are any other p and r still opened...?
 p.close();
 r.close();
Run Code Online (Sandbox Code Playgroud)

要么

while (...){
        p = connection.prepareStatement(...);
        r = p.executeQuery();
        while (r.next()) {
        ....
        }
        p.close();
        r.close();
 }
Run Code Online (Sandbox Code Playgroud)

注意:当然我会尝试并正确关闭,这只是一个例子.

java database recordset

9
推荐指数
2
解决办法
9611
查看次数

从mysql表中快速选择随机ID,包含数百万条非连续记录

我环顾四周,似乎没有任何简单的方法来做到这一点.几乎看起来只是抓住一部分记录并在代码中进行所有随机化(perl)更容易.我在网上看到的方法看起来更像是数十万,但肯定不是数百万.

我正在使用的表有600万条记录(并且正在增长),ID会自动递增,但并不总是存储在表中(非无间隙).

我已经尝试过推荐的LIMIT 1查询,但查询需要永远运行 - 考虑到记录中存在空白,有没有快速的方法来执行此操作?我不能只采取最大值并随机化范围.

更新:

我的一个想法可能是获取最大值,根据最大值随机化一个限制,然后从random_limit_1到random_limit_2获取10个记录的范围,然后获取在该范围内找到的第一个记录.

或者,如果我知道最大值,有没有办法我可以选择说出表的第5条记录,而不必知道它是哪个ID.然后抓住该记录的id.

更新:

这个查询有点快 - ish.仍然不够快= /

SELECT t.id FROM table t JOIN (SELECT(FLOOR(max(id) * rand())) as maxid FROM table) as tt on t.id >= tt.maxid LIMIT 1
Run Code Online (Sandbox Code Playgroud)

mysql random recordset

9
推荐指数
2
解决办法
1万
查看次数

将两个文件与歌曲标题列表进行比较的最简单方法

我有两个歌曲标题列表,每个都是纯文本文件,这是许可的歌词文件的文件名 - 我想检查较短的列表标题(针)是否在更长的列表(haystack).脚本/应用程序应返回针头中不在大海捞针中的标题列表.

我更喜欢使用Python或shell脚本(BASH),或者只使用可以处理所需模糊性的可视差异程序.

主要问题是标题需要模糊匹配以解决数据输入错误以及可能还有字排序.

干草堆样本(注意一些重复和接近重复的行,突出显示匹配):

Yearn
Yesterday, Today And Forever
Yesterday, Today, Forever
You
You Alone
You Are Here (The Same Power)
You Are Holy
You Are Holy (Prince Of Peace)
You Are Mighty
You Are Mine
You Are My All In All
You Are My Hiding Place
You Are My King (Amazing Love)
You Are Righteous (Hope)
You Are So Faithful
You Are So Good to Me
You Are Worthy Of My Praise
You Have Been Good
You …
Run Code Online (Sandbox Code Playgroud)

database comparison list recordset fuzzy-comparison

9
推荐指数
1
解决办法
478
查看次数

将完整的ADO Recordset插入现有的ACCESS表WITHOUT LOOP

我的VBA模块中有一个填充的ADO记录集.我在ACCESS中也有一个表,它与记录集具有完全相同的结构.

现在我使用遍历每个数据集记录的循环(这很好)来填充表格.

我想知道:有没有办法将整个记录集插入访问表?(更重要的是:这会明显加快)

ms-access vba ado recordset

9
推荐指数
1
解决办法
2万
查看次数

ADODB打开记录集失败/"对象关闭时不允许操作"

我在excel中有以下UDF,它使用ADO连接到我的MSSQL服务器.它应该执行标量udf"D100601RVDATABearingAllow".

由于某种原因,我尝试附加的参数不会发送到sql server.仅在服务器上:

SELECT dbo.D100601RVDATABearingAllow
Run Code Online (Sandbox Code Playgroud)

到达.

我的EXFEL UDF:

   Function RVDATA(Fastener) As Long

    Dim cnt As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim Cmd1 As ADODB.Command
    Dim stSQL As String

Const stADO As String = "Provider=SQLOLEDB.1;Data ................"
'----------------------------------------------------------
Set cnt = New ADODB.Connection
 With cnt
    .ConnectionTimeout = 3
    .CursorLocation = adUseClient
    .Open stADO
    .CommandTimeout = 3
 End With
'----------------------------------------------------------
Set Cmd1 = New ADODB.Command
    Cmd1.ActiveConnection = cnt
    Cmd1.CommandText = "dbo.D100601RVDATABearingAllow"
    Cmd1.CommandType = adCmdStoredProc
'----------------------------------------------------------
Set Param1 = Cmd1.CreateParameter("Fastener", adInteger, adParamInput, 5)
Param1.Value …
Run Code Online (Sandbox Code Playgroud)

sql-server vba ado adodb recordset

8
推荐指数
2
解决办法
1万
查看次数