Програмно создаю ADODB.Recordset, заполняю значениями и делаю источником формы. Что не так

Программист-Любитель
Дата: 13.09.2005 18:05:29
Собственно проблема. Програмно читаю содержимое XLS файла. Создаю рекордсет, добавляю в него столбцы (по первой строке файла). Затем пока строки не пустые читаю содержимое ячеек и вставляю записи в созданный рекордсет.

Затем, открываю форму, присваиваю ее источнику данных мой програмный рекордсет и в цикле перебираю поля, задавая Саption подписей и ControlSource всех полей формы равными именам полей рекордсета. На выходе - облом. Подписи на месте, количество записей - правильное, а сами ячейки - #Ошибка

Что-то делаю не так! Как напустить форму аксесса на програмно созданный рекордсет, который только в памяти и не существует в виде какой-либо таблицы ?

        Dim xls As Workbook, app As Excel.Application
        Set xls = GetObject(si)
        Set app = xls.Application
        Dim sh As Excel.Worksheet
        Set sh = xls.Sheets(1)
        Dim iRow As Integer, iCol As Integer, nCol As Integer
        iRow = 1
        iCol = 1
        
        Set rs = New ADODB.Recordset
        Do
            rs.Fields.Append sh.Cells(iRow, iCol), adChar, 128
            iCol = iCol + 1
        Loop While Len(sh.Cells(iRow, iCol)) > 0
        nCol = iCol - 1
        iRow = iRow + 1
        rs.Open
        Do
            rs.AddNew
            For iCol = 1 To nCol
Debug.Print sh.Cells(iRow, iCol)
                If Len(sh.Cells(iRow, iCol)) > 0 Then
                    rs.Fields(iCol - 1) = sh.Cells(iRow, iCol)
                End If
            Next iCol
Debug.Print
            rs.Update
            iRow = iRow + 1
        Loop While Len(sh.Cells(iRow, 1)) > 0
        xls.Close False
        app.Quit
        
        DoCmd.OpenForm "tblReuterFile", acNormal, , , acFormEdit, acWindowNormal
        Dim gr As Form
        Set gr = Forms!tblReuterFile!grReuterFile.Form
        Set gr.Recordset = rs
        
        For iCol = 1 To nCol
            Dim ctl As TextBox, lbl As Label
            Set ctl = gr.Controls("fld" & CStr(iCol))
            Set lbl = gr.Controls("lbl" & CStr(iCol))
            ctl.ControlSource = "[" & rs.Fields(iCol - 1).Name & "]"
            lbl.Caption = rs.Fields(iCol - 1).Name
        Next iCol
clerk
Дата: 13.09.2005 18:45:14
Если только я все правильно понял!
Я делал с DAO

Private Sub Fsg_Click()
Dim rstNov As DAO.Recordset
Set rstNov = CurrentDb.OpenRecordset("Qv1")' Qv-это запрос
Set Me.Recordset = rstNov
Me.Requery
rstNov.Close
Set rstNov = Nothing
End Sub

Не знаю .... но форма это принимает

_____________________________
Ой Дяденьки! Не бейте больно!
Программист-Любитель
Дата: 13.09.2005 18:54:13
Не, мне надо чуть по-другому - свежесделанный c gjvjom. New рекордсет расположенный в ПАМЯТИ, безо всяких таблиц и запросов.
aleks2
Дата: 13.09.2005 19:54:58
http://www.sql.ru/forum/actualthread.aspx?tid=189623&hl=aleks2