Копировать записи в другой набор записей, используя страницу Active Server - PullRequest
1 голос
/ 12 ноября 2010

Я программирую на Classic ASP. Я пытаюсь сделать пейджинг. Мой бэкэнд - SQL CE 3.5. К сожалению, он не поддерживает подкачку в запросе SQL (как row_number () на сервере sql).

Итак, я использую ASP Paging. Но когда я прошу набор записей, дайте мне первые 10 записей, установив rs.PageSize и rs.AbsolutePage и все, это даст мне все записи. Поэтому я планировал скопировать только первые 10 строк из результирующего набора записей в другой новый набор записей. Поэтому я закодировал, как показано ниже:

<code>
Set rsTemp = CopyRecordsetStructure(objRs)
rsTemp.Open
iRecordsShown = 0
Set objFields = objRs.Fields
intFieldsCount = objFields.Count-1 
Do While iRecordsShown < intPageSize And Not objRs.EOF
 rsTemp.AddNew
 For Idx = 0 To intFieldsCount
  rsTemp.Fields(Idx).Value = objRs.Fields(Idx).Value
 Next
 rsTemp.Update
 iRecordsShown = iRecordsShown + 1
 objRs.MoveNext
Loop</p>

<p>Public Function CopyRecordsetStructure(ByVal rs)
 Dim rsTemp
 Set rsTemp = CreateObject("ADODB.Recordset")
 Set objFields = rsTemp.Fields
 intFieldCount = objFields.Count - 1
 For Idx = 0 To intFieldCount
  rsTemp.Fields.Append objFields(Idx).Name, _
        objFields(Idx).Type, _
        objFields(Idx).DefinedSize
 Next
 Set CopyRecordsetStructure = rsTemp
End Function

Проблема в том, что я не могу открыть "rsTemp". Выдает ошибку

<code>
The connection cannot be used to perform this operation. It is either closed or invalid in this context.

Если я использую какой-то фиктивный запрос и соединение, это не сработает.

Помогите, пожалуйста, скопировать записи из одного набора записей в другой новый набор записей.

Заранее спасибо Ганеш.

Ответы [ 2 ]

0 голосов
/ 04 января 2018

С комментариями и исправленными в вышеприведенных комментариях функцию следует обновить Установите objFields = rs.Fields в:

Использование:

Dim rsTemp
Set rsTemp = CopyRecordset(rsPadicon)

Обновить код

Public Function CopyRecordset(rs)

    Dim rsTemp, objFields, intFieldsCount, intPageSize
    Set rsTemp = CopyRecordsetStructure(rs)
    rsTemp.Open

    Set objFields = rs.Fields
    intFieldsCount = objFields.Count-1 

    response.write("<li> rs.RecordCount  :" & rs.RecordCount  & "</li>")
    ' response.write("<li> intFieldsCount  :" & intFieldsCount & "</li>")

    rs.MoveFirst 
    Do While Not rs.EOF
        rsTemp.AddNew

        Dim i
        For i = 0 to intFieldsCount 'use i as a counter
            ' response.write("<li> Name :" & rs.Fields(i).Name & "</li>")
            ' response.write("<li> Value :" & rs.Fields(i).Value & "</li>")
            if Not IsNull(rs.Fields(i).Value) then 
                rsTemp.Fields(i).Value = rs.Fields(i).Value
            End if
        Next

        rsTemp.Update

        rs.MoveNext
    Loop

    Set CopyRecordset = rsTemp


End Function


Public Function CopyRecordsetStructure(ByVal rs)
     Dim rsTemp, objFields, intFieldCount, Idx
     Set rsTemp = CreateObject("ADODB.Recordset")
     Set objFields = rs.Fields
     intFieldCount = objFields.Count - 1
     For Idx = 0 To intFieldCount
      rsTemp.Fields.Append objFields(Idx).Name, _
            objFields(Idx).Type, _
            objFields(Idx).DefinedSize
     Next
     Set CopyRecordsetStructure = rsTemp
End Function
0 голосов
/ 13 ноября 2010

Не уверен, но это выглядит неправильно

Set objFields = rsTemp.Fields

Разве это не должно быть

Set objFields = rs.Fields
...