Nano Hash - криптовалюты, майнинг, программирование

VBA RecordSet.RecordCount = -1 при использовании хранимой процедуры и команды

Я вызываю хранимую процедуру с помощью команды. Я получаю результат в наборе записей. Теперь мне нужно сделать некоторые вычисления и, следовательно, мне нужно знать количество возвращенных записей. RecordSet.RecordCount должен дать мне это, но возвращает только -1. Я пробовал разные значения CursorType и CursorLocation, пробовал MoveLast. Ничего не помогает.

Я сделал временное решение, предполагая фиксированное число для количества записей.

Здесь есть много тем о RecordCount, а также статьи, которые я читал, но ничего не помогает. Проблема в том, что я использую команду? Большинство примеров, которые я вижу, не используют команды.

Я опытный программист, но не так привык к SQL и VBA. Кто-нибудь, кто может мне помочь?

С уважением, Вольфганг

Sub CallStoredProcedure()

Dim Conn As ADODB.Connection, RecordSet As ADODB.RecordSet

Dim Command As ADODB.Command
Dim ConnectionString As String, StoredProcName As String
Dim LoginID As ADODB.Parameter, Entity_Id As ADODB.Parameter

Application.ScreenUpdating = False

Set Conn = New ADODB.Connection
Set RecordSet = New ADODB.RecordSet
Set Command = New ADODB.Command

'w
RecordSet.CursorType = adOpenStatic
RecordSet.CursorLocation = adUseClient


ConnectionString = "Provider=SQLOLEDB;Data Source=HIQARBL218\SQLEXPRESS;Initial Catalog=SweSalaryStore;Trusted_Connection=yes;"

On Error GoTo CloseConnection

Conn.Open ConnectionString

StoredProcName = "dbo.getInfoFromSQLDB"

With Command
    .ActiveConnection = Conn
    .CommandType = adCmdStoredProc
    .CommandText = StoredProcName
End With

Set EMPNR = Command.CreateParameter("@EMPNR", adVarChar, adParamInput, 100, "107")
Command.Parameters.Append EMPNR

Set PERNR = Command.CreateParameter("@PERNR", adVarChar, adParamInput, 100, "1111110008")
Command.Parameters.Append PERNR

Set CMPNR = Command.CreateParameter("@CMPNR", adVarChar, adParamInput, 100, "5612")
Command.Parameters.Append CMPNR

Set PERIODFROM = Command.CreateParameter("@PERIODFROM", adVarChar, adParamInput, 100, "1001")
Command.Parameters.Append PERIODFROM

Set PERIODTO = Command.CreateParameter("@PERIODTO", adVarChar, adParamInput, 100, "1701")
Command.Parameters.Append PERIODTO

Set RecordSet = Command.Execute


Sheets("Sheet1").Range("A5").CopyFromRecordset RecordSet


'loop to get column headings.
For i = 0 To RecordSet.Fields.Count - 1
    Sheets("Sheet1").Cells(1, i + 1).Value = RecordSet.Fields(i).Name
Next i


'Calculate last row in RecordSet
Dim lastRow As Integer
lastRow = 2000
'lastRow = RecordSet.RecordCount 'NOT WORKING!!!

'Average OB
Dim AvgOB As Double
AvgOB = Excel.WorksheetFunction.Average(Range(Sheets("Sheet1").Cells(5, 2), Sheets("Sheet1").Cells(lastRow, 2)))
AvgOB = Excel.WorksheetFunction.Round(AvgOB, 2)
Sheets("Sheet1").Cells(2, 2).Value = AvgOB
Sheets("Sheet1").Cells(3, 2).Value = AvgOB * 12


RecordSet.Close
Conn.Close
On Error GoTo 0
Application.ScreenUpdating = True
Exit Sub

CloseConnection:
    Application.ScreenUpdating = True
    MsgBox "SQL Stored Procedure Did Not Execute Sucessfully!", vbCritical, "SQL Error"
    Conn.Close

End Sub

Ответы:


1

Вы сделали

 Sheets("Sheet1").Range("A5").CopyFromRecordset RecordSet  

поэтому в этот момент количество возвращаемых записей равно количеству строк, занятых от a5 вниз:

 Dim lastrow as long  'not integer!
 lastrow = Sheets("Sheet1").Range("A5").currentregion.rows.count + 4

плюс четыре, так как вы начинаете в строке 5

11.12.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..