Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Вадюшка
Member

Откуда:
Сообщений: 17
У мя снова чайниковский вопрос :)

Есть две таблицы. В них в обеих есть поле с данными. Мне нужно, пройдясь по всем записям первой таблицы, присвоить данные этого поля соответствующему полю второй таблицы.

Я делаю так:

Dim G As Database
Dim TestRST As Recordset
Dim OutRST As Recordset
Dim fldLoop As Field
Dim fldLoopOut As Field

Set G = CurrentDb
Set TestRST = G.OpenRecordset("t_A7Dynamic")
Set OutRST = G.OpenRecordset("t_A7Deltas")

Do While Not TestRST.EOF
    For Each fldLoop In TestRST.Fields
        Select Case fldLoop.Name
            Case "Дата"
            Set OutRST.Fields("Дата").Value = TestRST.Fields("Дата").Value
        Case Else
            Debug.Print "Stop"
        End Select
    Next fldLoop
Loop

На строке Set VBA ругается, что "нужен объект". Хелп к ошибке прочел, но не понял. :) Как всё-таки правильно написать, подскажите, плз. Заранее данке ;)
22 сен 06, 16:17    [3173936]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Larr`
Member

Откуда: у парня сирийская грусть?
Сообщений: 748
Убери set, он для объектов!

А вообще, если тебе надо перебрать все записи, где movenext?
22 сен 06, 16:25    [3173987]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Программист-Любитель
Member

Откуда:
Сообщений: 16839
Делается одним запросом на обновление. Одна строка кода.
22 сен 06, 16:30    [3174012]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Вадюшка
Member

Откуда:
Сообщений: 17
Larr`
Убери set, он для объектов!

Без Set ругается "Ошибка 3020. Update или CancelUpdate без AddNew или Edit"

Larr`

А вообще, если тебе надо перебрать все записи, где movenext?

Имеется в виду MoveNext в результирующей таблице? Я до него еще не добрался :)

Программист-Любитель

Делается одним запросом на обновление. Одна строка кода.

Дело в том, что я описал лишь часть задачи. Полностью ситуация выглядит так. В первой таблице есть значения некоторых показателей за три даты. Во вторую мне нужно слить изменения этих значений от даты к дате. При этом часть полей исходной таблицы (наименование показателя, код показателя) остается неизменной -- значения этих полей тоже копируются в новую таблицу. Если подскажете, как SQL'ем эти дельты посчитать -- тогда, конечно, я воспользуюсь запросом на обновление. ;)

Если изложил непонятно, то вот визуальный вариант :)

Табл1. (исходная)
Дата Код Наименование Значение
01.9.6 1.1 Показатель1 100
11.9.6 1.1 Показатель1 150
21.9.6 1.1 Показатель1 80


Табл2. (нужно получить)
Дата Код Наименование Значение Дельта
01.9.6 1.1 Показатель1 100 0
11.9.6 1.1 Показатель1 150 50
21.9.6 1.1 Показатель1 80 -70


Я, собсно, полез в VBA, в котором пока страшный чайник, из-за того, что в SQL эти дельты посчитать не получилось. В VBA это таки вышло, но вот затык возник на этапе заполнения данными -- о чем, собственно, и топик. :)
22 сен 06, 16:57    [3174214]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Ёжик`
Member

Откуда:
Сообщений: 5992
Dim TestRST As Recordset
Dim OutRST  As Recordset

Set TestRST = CurrentDb.OpenRecordset("t_A7Dynamic")
Set OutRST  = CurrentDb.OpenRecordset("t_A7Deltas")

While Not TestRST.EOF
    OutRST.AddNew
    OutRST.Fields("Дата") = TestRST.Fields("Дата")
    OutRST.Update
    TestRST.MoveNext
Wend
Такая фигня должна работать - но фигней от этого не перестанет быть.
И причем тут Дата в коде - если дельту надо проставлять...
22 сен 06, 17:10    [3174324]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Ёжик`
Member

Откуда:
Сообщений: 5992
Set TestRST = CurrentDb.OpenRecordset("t_A7Dynamic")
Set OutRST = CurrentDb.OpenRecordset("t_A7Deltas")
'чистим получателя
CurrentDb.Execute("Delete From t_A7Deltas;")

'заполняем получателя
CurrentDb.Execute("INSERT INTO t_A7Deltas ( Дата, Код, Наименование, Значение, Дельта ) SELECT Дата, Код, Наименование, Значение, 0 as Дельта FROM t_A7Dynamic;")

'творим Дельту
Dim rs  As Recordset, p as Integer
Set rs  = CurrentDb.OpenRecordset("Select * From t_A7Deltas Order By Дата, Код, Наименование;")
if Not rs.EOF Then p = rs.Fields("Значение") 
While Not rs.EOF
    rs.Edit
    rs.Fields("Дельта") = rs.Fields("Значение") - p
    p = rs.Fields("Значение")
    rs.Update
    rs.MoveNext
Wend
rs.close: Set rs = Nothing
22 сен 06, 17:21    [3174408]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Ёжик`
Member

Откуда:
Сообщений: 5992
верхние две строки - не нужны Set TestRST = ... и Set OutRST = ...
22 сен 06, 17:22    [3174418]     Ответить | Цитировать Сообщить модератору
 Re: Присвоить значение поля из одного Recordset полю другого Recordset  [new]
Вадюшка
Member

Откуда:
Сообщений: 17
Ёжик`
верхние две строки - не нужны Set TestRST = ... и Set OutRST = ...

Большой tnx, щас буду пробовать :)
25 сен 06, 10:32    [3178143]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить