标签: recordset

如何在使用vba创建表时指定主键

我已经使用下面给出的建议更新了代码,我已经测试并且工作得很好,以便为将来的用户提供快速参考.


我正在使用以下代码创建链接表而无需为每个用户设置DSN,如何指定主键,因为如果手动连接则会询问您:

Dim sConnect    As String
Dim db          As DAO.Database
Dim tdf         As DAO.TableDef

Set db = CurrentDb

Set tdf = db.CreateTableDef
tdf.Name = "dbo_vwFeedback" ' - -- --- This is the Label that you see in Access...
tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01\serverinstance;DATABASE=db_name;Trusted_Connection=Yes"
tdf.SourceTableName = "vwFeedback" ' - -- --- This is the actual name in SQL Server, minus the owner.
db.TableDefs.Append tdf
CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY"
Run Code Online (Sandbox Code Playgroud)

注意:以上是针对SQL Server VIEW,它对于SQL Server TABLE是相同的,但您不需要该CurrentDB.Execute行(如果您的主键在服务器上正确设置). …

sql ms-access recordset access-vba

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

即使已删除某些行,如何获取上一行和下一行?

我有以下PHP函数来确定数据库中的下一行和上一行.但是,有很多情况下可以删除行,因此我的函数不能正常工作,因为它们只会减少auto_increment字段.

例如,当前行5.我的函数给出:4(上一个)和下一个(下一个).如果删除6和7怎么办?我最好的想法是继续查询,直到我排好,但这似乎效率低下,有更好的方法吗?

谢谢大家

//function to get next tweet
function getNextTweet($key, $direction){

$sql = "SELECT tweet_id FROM tweets WHERE tweet_key = '$key' LIMIT 1";

$result = mysql_query($sql) or die("DB Error : ". mysql_error());

$result = mysql_fetch_assoc($result);

if($direction=='next'){

    $tweet_id = $result['tweet_id'] + 1;

}else{

    $tweet_id = $result['tweet_id'] - 1;

}

$sql = "SELECT * FROM tweets WHERE tweet_id = '$tweet_id' LIMIT 1";

$result = mysql_query($sql) or die("DB Error : ". mysql_error());   

return mysql_fetch_assoc($result);

}
Run Code Online (Sandbox Code Playgroud)

php mysql recordset

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

如何防止 TADORecordset 滚动?

我想根据某些条件阻止 ADORecordset 的滚动。

例如,做这样的事情会很方便:

procedure TfrmMain.qryCenyBeforeScroll(DataSet: TDataSet);
begin
  if not (condition) then
    qryCeny.DoNotScroll;  //Just the idea
end;
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

delphi ado recordset

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

使用VBA循环记录集

我试图以下列方式以循环方式将销售人员(rsSalespeople)分配给客户(rsCustomers):

  1. 导航到第一个客户,将第一个SalesPerson分配给客户.
  2. 转到下一个客户.如果rsSalesPersons不在EOF,请转到Next SalesPerson; 如果rsSalesPersons处于EOF,则MoveFirst将循环回第一个SalesPerson.将此(当前)SalesPerson分配给(当前)客户.
  3. 重复步骤2,直到rsCustomers处于EOF(EOF = True,即End-Of-Recordset).

自从我处理VBA以来已经有一段时间了,所以我有点生疏,但到目前为止,这是我想出来的:

Private Sub Command31_Click()

'On Error GoTo ErrHandler

Dim intCustomer As Integer
Dim intSalesperson As Integer
Dim rsCustomers As DAO.Recordset
Dim rsSalespeople As DAO.Recordset
Dim strSQL As String

strSQL = "SELECT CustomerID, SalespersonID FROM Customers WHERE SalespersonID Is Null"
Set rsCustomers = CurrentDb.OpenRecordset(strSQL)

strSQL = "SELECT SalespersonID FROM Salespeople"
Set rsSalespeople = CurrentDb.OpenRecordset(strSQL)

rsCustomers.MoveFirst
rsSalespeople.MoveFirst

Do While Not rsCustomers.EOF

    intCustomer = rsCustomers!CustomerID
    intSalesperson = rsSalespeople!SalespersonID

    strSQL = "UPDATE Customers SET SalespersonID = …
Run Code Online (Sandbox Code Playgroud)

sql ms-access vba loops recordset

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

VBA循环并编写ADODB Recordset

我刚开始使用记录集,我正在研究从sql server检索记录集然后我需要循环遍历excel电子表格中的值.

记录集中字段的顺序已经是正确的,所以我应该能够在一个范围内从一个单元移动到单元格粘贴每个值,但我不确定如何做到这一点.我知道记录集是正确的,因为我把它输出到一个文件,一切都按顺序查看.

到目前为止这是我的代码:

Public Sub retrieve()

Dim rsTest As ADODB.Recordset
Set rsTest = New ADODB.Recordset
Set rsTest = DataManager.GetData()

Sheets("Planners").Activate
Dim cel As Range
Dim i As Integer
Dim rsFields As Variant

Do While Not rsTest.EOF

   For Each cel In ActiveSheet.Range("A3:H1000").Cells
     For Each rsFields In rsTest.Fields

     cel = rsTest(rsFields.Name)

     Next
  Next

Loop

End Sub
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

excel vba recordset excel-vba

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

数据集是否与Recordset相同

我以前在VB.net工作并且在使用ADO时一直使用Dataset,但现在我正在使用C#,而研究正在向我展示很多Recordset.

它们是一样的吗?

如果没有什么区别?

c# vb.net ado.net recordset dataset

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

ADODB - 为什么我的记录集是只读的?

在 Excel 中,我使用 ADODB 连接来构建记录集,从其自己的工作簿中的工作表中获取数据,如下所示:

Public Sub test()
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim strSQL As String
    Dim k As Variant

    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
       "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & _
        "Extended Properties=""Excel 12.0;HDR=No;IMEX=1;Readonly=False"";"

    strSQL = "SELECT F1 FROM [Workbench$];"

    rst.Open strSQL, cnn, adOpenStatic, adLockOptimistic
    rst.MoveFirst

    While Not rst.EOF
        rst("F1") = "NewValue"
        rst.Update
        rst.MoveNext
    Wend

End Sub
Run Code Online (Sandbox Code Playgroud)

但是,运行代码时出现错误:

运行时错误“-2147217911 (80040e09)”:
无法更新。数据库或对象是只读的。

我已经检查了我打开的工作簿的权限,没问题(每个人都可以完全控制访问)。

我在这里做错了什么?

excel vba adodb recordset

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

对象关闭VBS时不允许记录集操作

在下面的代码中,我在行读取时出错recset.Close.

字符:5
错误:关闭对象时不允许操作.
代码:800A0E78
来源:ADODB.Recordset

如果程序到达该行PQ_ID_number = InputBox("Enter PQ Database ID number, Do not use / ? < > \ : * | !", "PQ ID Number", "Replace Text")似乎工作正常(采取手动输入),但当它试图从浏览器的URL(自动)获取ID时,它会给出错误.

valid_name = 0
Dim objInstances, objIE, counterTab

Do While valid_name = 0  'Flag to exit the loop if the Id  number has content in the SQL Database'

    '-----------------------------------------------------------------------------------------'

    Set objInstances = CreateObject("Shell.Application").windows
    If objInstances.Count > 0 Then '/// make sure we have IE instances open.
        'Loop through …
Run Code Online (Sandbox Code Playgroud)

vbscript recordset

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

从 RecordSet 填充字典

我想知道是否有人可以帮助我。我正在尝试从 sql 表返回的记录集填充公共字典。

除了一部分外,一切似乎都很好。我不知道它是否没有正确计算字典中的键数,或者它们没有被正确输入,但是无论出于何种原因,当我尝试显示总计数时,它总是只返回 1(应该是大约 15) 并且只显示第一行详细信息。

任何人都可以帮忙吗?

Public UserList As New scripting.Dictionary
Sub UserDL()
Dim USList As Range
Dim USArr(0 To 11) As Variant

Call ConnecttoDB

Set Cmd = New adodb.Command: Set rs = New adodb.Recordset

With Cmd
    .CommandTimeout = 30
    .ActiveConnection = cn
    .CommandText = "CSLL.DLUsers"

    Set rs = .Execute
End With

With rs
    If Not .BOF And Not .EOF Then
        .MoveLast
        .MoveFirst
        While (Not .EOF)
            For i = 1 To 11
                USArr(i - 1) = rs(i)
            Next …
Run Code Online (Sandbox Code Playgroud)

sql excel vba dictionary recordset

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

访问 VBA:在连续子窗体中编辑 RecordSet

我正在尝试编写一个函数来循环遍历连续子表单中的记录并清除每个记录的特定字段(Entity_Under_Consideration,它是由子表单上的组合框表示的查找字段)中的值。

以下不起作用。它也不会抛出任何错误。谁能看到我哪里出错了?

Public Function clearEUCData(subform As Control)

    'take a clone of the subform's recordset
    Dim entityRecSet As Recordset
    Set entityRecSet = subform.Form.Recordset.Clone()

    'if there are any records in the subform...
    If entityRecSet.RecordCount > 0 Then

        'start with the first record
        entityRecSet.MoveFirst

        'iterate through each row, clearing the data in the EUC field
        Do Until entityRecSet.EOF

            With entityRecSet
                .Edit
                    Entity_Under_Consideration = 0
                .Update
            End With

        entityRecSet.MoveNext
        Loop

    End If

    'close and purge the cloned recordset
    entityRecSet.Close
    Set entityRecSet = Nothing

End …
Run Code Online (Sandbox Code Playgroud)

ms-access vba recordset

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

标签 统计

recordset ×10

vba ×5

excel ×3

ms-access ×3

sql ×3

access-vba ×1

ado ×1

ado.net ×1

adodb ×1

c# ×1

dataset ×1

delphi ×1

dictionary ×1

excel-vba ×1

loops ×1

mysql ×1

php ×1

vb.net ×1

vbscript ×1