在专家交流和teck共和国有一些文献可以 使用combobox.recordset属性来填充Access表单中的组合框.
这些控件通常在控件的"rowsource"属性中填充"SELECT*"字符串,引用应用程序客户端上可用的表或查询.当我需要在组合框中显示服务器端数据时,我创建一个临时本地表并导入请求的记录.这非常耗时,特别适用于大型桌子.
能够使用记录集来填充组合框控件将允许用户直接显示来自服务器端的数据.
受前面两个例子的启发,我写了一些代码如下:
Dim rsPersonne as ADODB.recordset
Set rsPersonne = New ADODB.Recordset
Set rsPersonne.ActiveConnection = connexionActive
rsPersonne.CursorType = adOpenDynamic
rsPersonne.LockType = adLockPessimistic
rsPersonne.CursorLocation = adUseClient
rsPersonne.Open "SELECT id_Personne, nomPersonne FROM Tbl_Personne"
fc().Controls("id_Personne").Recordset = rsPersonne
Run Code Online (Sandbox Code Playgroud)
哪里:
不幸的是,它不起作用!
在调试模式下,我能够检查记录集是否已正确创建,具有请求的列和数据,并且与组合框控件正确关联.不幸的是,当我显示表单时,我不断得到一个空的组合框,没有记录!任何帮助都非常感谢.
编辑:
这个记录集属性确实可用于特定的组合框对象,而不是标准控制对象,几天前我发现它非常惊讶.我已经尝试使用combobox的回调函数,或者使用组合框的"addItem"方法填充列表.所有这些都很耗时.
我在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) 简短的问题:我发现我需要使用MARS而不是ADO/OLEDB,这是正确的吗?
更长的解释:
我刚刚发现我的ODBC代码(使用"Driver = {SQL Native Client}",MFC CDatabase代码)需要有MARS("MARS_Connection = yes;"),因为虽然我在打开RecordSet时没有发出多个SELECT,但我做了获取一批行,然后需要打开另一个RecordSet来发出一个新的SELECT,然后返回到下一批的第一个RecordSet.没有MARS我得到ODBC错误"连接忙于另一个命令的结果".一切都很公平.
但是,我的代码与ADO/OLEDB("Provider = SQLNCLI",#import msado15.dll)相同,而不是ODBC.在同样的情况下,我没有必须指定"MarsConn = yes".
我感到困惑/惊讶.这是正确/预期的,还是我错过了什么?
我在Access 2003中有一个简单的表单,一个查询和一个报表.我必须使用VBA操作记录集中的查询结果,然后将其作为RecordSource传递给报表.
如果我将记录集声明为RecordSet并使用其Name属性作为报告的RecordSource,那么它正在工作.但是,因为我需要编辑记录集,所以尽管如下使用ADODB RecordSet会更容易.
记录集Dim rs As ADODB.RecordSet在全局模块中声明.其余的代码是;
Dim db As Database
Set db = CurrentDb
Dim con As ADODB.Connection
Set con = CurrentProject.Connection
Set rs = New ADODB.Recordset
Set rs.ActiveConnection = con
rs.Source = "Select * from XXX"
rs.LockType = adLockOptimistic
rs.CursorType = adOpenKeyset
rs.Open
'manipulate rs here....'
Run Code Online (Sandbox Code Playgroud)
我曾经将报告的RecordSource作为myReport.RecordSource = rs.Name传递.但是ADODB没有Name属性.
如何将此记录集作为其RecordSource传递给报表?
谢谢
我在Access数据库上工作,我必须使用与SQL Server的数据源连接.
为此,我使用ADODB对象:
-ADODB.Connection
-ADODB.Recordset
代码是最新的,在观察了Ian Kenney之后
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
Dim rs As ADODB.Recordset
cnn.ConnectionString = "driver={SQL Server};provider=SQLOLEDB;server=10.****;uid=****readonly;pwd=****readonly;database=****"
cnn.Open
Set rs = cnn.Execute("SELECT [MATRI], [NOMPRE] FROM SCHEME_DB.TABLE WHERE NOMPRE LIKE '*" & Me.Textbox_recherche.Text & "*'")
Me.Liste_choix.RowSourceType = "Table/List"
Me.Liste_choix.Recordset = rs
rs.Close
cnn.Close
Run Code Online (Sandbox Code Playgroud)
(此代码(代码的一部分)是一种使用TextBox和ListBox在Access中执行自动完成的方法)
当我运行此代码时出现错误91:"错误91:对象变量或未设置块变量".
我不明白如何解决这个问题.
提前致谢.
我正在使用VBA中的ADO执行存储过程.我正在尝试使用SQL Server 2008中的存储过程的结果填充记录集.下面的VBA示例:
Public Function DoSomething() As Variant()
Dim oDB As ADODB.Connection: Set oDB = New ADODB.Connection
Dim oCM As ADODB.Command: Set oCM = New ADODB.Command
Dim oRS As ADODB.Recordset
oDB.Open gcConn
With oCM
.ActiveConnection = oDB
.CommandType = adCmdStoredProc
.CommandText = "spTestSomething"
.NamedParameters = True
.Parameters.Append .CreateParameter("@Param1", adInteger, adParamInput, , 1)
Set oRS = .Execute
End With
If Not oRS.BOF And Not oRS.EOF Then 'Error thrown here'
DoSomething = oRS.GetRows()
Else
Erase DoSomething
End If
oRS.Close
Set oRS = …Run Code Online (Sandbox Code Playgroud) 作为我的shell脚本的一部分,我正在尝试在AWS Route53中创建记录集.但是,使用我的shell脚本中的aws cli中的变量来创建这些记录集,我在Shell脚本中导出的变量不会传递给aws cli命令.
AWS提供的AWS CLI命令:
$ aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC \
--change-batch file:///path/to/record.json
Run Code Online (Sandbox Code Playgroud)
为简单起见,我不想在我的计算机上创建单独的json文件,我想在shell脚本中包含所有命令和变量.
#!/bin/bash
export TARGET_ENVIRONMENT=uat
export BASE_ENVIRONMENT_DNS=abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com
# Creates route 53 records based on env name
aws route53 change-resource-record-sets --hosted-zone-id 1234567890ABC
--change-batch '{ "Comment": "Testing creating a record set",
"Changes": [ { "Action": "CREATE", "ResourceRecordSet": { "Name":
"$(TARGET_ENVIRONMENT).company.com", "Type": "CNAME", "TTL":
120, "ResourceRecords": [ { "Value": "$(BASE_ENVIRONMENT_DNS)" } ] } } ] }'
Run Code Online (Sandbox Code Playgroud)
最后一个命令是在AWS Route53上创建一个记录集,如下所示:
$(TARGET_ENVIRONMENT).company.com
Run Code Online (Sandbox Code Playgroud)
与CNAME一样
$(BASE_ENVIRONMENT_DNS)
Run Code Online (Sandbox Code Playgroud)
而不是我想要的那样,这是:
uat.company.com
Run Code Online (Sandbox Code Playgroud)
使用CNAME:
abcd-External-9982627718-1916763929.us-west-1.elb.amazonaws.com …Run Code Online (Sandbox Code Playgroud) 我正在使用LDAP查询执行ADODB recordset.open()命令以从我的Active Directory获取所有用户.
大约有2600个用户,但我只回来了1000个用户.
我试过没有运气就改变了记录集的PageSize和MaxRecords属性.
没有多余的东西,这就是代码的样子(我已经将连接细节设为通用):
ADODB.Connection conn = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset();
rs.MaxRecords = 10000;
rs.PageSize = 10000;
conn.Open("Active Directory Provider","","",0);
string query = "SELECT cn FROM 'LDAP://OU=User Accounts,OU=TopLevel,DC=domainName,DC=local' where samAccountName = '*'"
rs.Open(query, conn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, -1);
Run Code Online (Sandbox Code Playgroud)
它肯定只返回1000条记录,(我已经确认),我可以很好地访问它们.
如果它有帮助,我没有使用DirectorySearcher的原因是因为它与此相比速度太慢.
即使基础数据源中没有数据,如何显示DetailsView?
问题是当DetailsView不可见时,命令按钮也不可见.所以我不能将新记录插入数据库.我希望DetailsView它的DefaultMode设置始终可见ReadOnly.
如果不可能,我想问一个解决这个问题的方法.
我想到的一个解决方法是检查数据源是否有任何记录.如果没有,则programmaticaly更改DefaultMode为Insert.但是,这会导致另一个问题 - 如何计算DataSource中的记录数.
我所有的问题都与ASP 3.5有关
以这段代码为例:
sSQL = "select CtyMarket from Market where Country = '" & Country.Value & "'"
Set rec = CurrentDb.OpenRecordset(sSQL)
Run Code Online (Sandbox Code Playgroud)
此语句可以返回多个值。我如何访问这些值?
recordset ×10
adodb ×4
ms-access ×4
vba ×4
ado ×3
sql-server ×2
access-vba ×1
asp.net ×1
autocomplete ×1
aws-cli ×1
c# ×1
combobox ×1
detailsview ×1
listbox ×1
odbc ×1
oledb ×1
shell ×1
visibility ×1