Помогите с CursorAdapter

Пытаюсь «взнуздать» CursorAdapter. Как я понимаю, его возможности двунаправлены: из исходных таблиц/курсоров в результирующий курсор и из результирующего курсора в исходные таблицы/курсоры. Первая часть у меня получается, а вторая - нет.
Пожалуйста, подскажите, что не так в моём простом примере.
[code]CLOSE TABLES
SET MULTILOCKS ON
IF .f.
CREATE CURSOR Sbit (Kod I Autoinc, Tovar C(50), Cena Y, Kolvo N(9,2))
ELSE
IF NOT FILE('Sbit.dbf')
CREATE TABLE Sbit (Kod I Autoinc, Tovar C(50), Cena Y, Kolvo N(9,2))
ENDIF
IF NOT USED('Sbit')
USE Sbit
ENDIF
ENDIF
=CURSORSETPROP('Buffering', 5, 'Sbit' ) && оптимистическая буферизация для таблицы
loCAD = CREATEOBJECT('CursorAdapter')
IF VARTYPE(loCAD)='O'
WITH loCAD
.Alias = 'temp' && результат команды SELECT
.AllowDelete = .T.
.AllowInsert = .T.
.AllowUpdate = .T.
.DataSourceType = "Native" && тип исходных данных
* .DataSource = && для Native не определяется
.BufferModeOverride = 5 && 5 - буферизация таблицы, 3 - буферизация строк
.SelectCmd = "SELECT Kod, Tovar, Cena, Kolvo, Cena*Kolvo AS Summa "+;
"FROM Sbit " && WHERE Kod = xKod"
* && структура результирующего курсора
.CursorSchema = "Kod I, Tovar C(50), Cena Y, Kolvo N(9,2), Summa Y"
.Tables = "Sbit" && список исходных таблиц
.InsertCmd = "INSERT INTO Sbit (Tovar, Cena, Kolvo) SELECT ALL Tovar, Cena, Kolvo FROM Temp "
.InsertCmdDataSourceType = ""
* .UpdateCmd =
.KeyFieldList = "Kod" && список ключевых полей
.UpdatableFieldList = "Tovar, Cena, Kolvo" && список обновляемых полей
* список обновляемых имен
.UpdateNameList ="Tovar Sbit.Tovar, Cena Sbit.Cena, Kolvo Sbit.Kolvo"
* .SendUpdates = .T. && посылать ли запрос на обновления
.WhereType = 3 && как используется секция параметров WHERE
* .DeleteCmd =
* .UseTransactions = .T. && использовать транзакции через ADO или ODBC
.ConflictCheckType = 3 && тип проверки конфликта
IF .CursorFill(.T.) && заполнить курсор данными
ELSE
AERROR(laErrors)
MESSAGEBOX(laErrors[2])
DISPLAY MEMORY LIKE laErrors
ENDIF
ENDWITH
ELSE
MESSAGEBOX('Ошибка подключения к базе!')
ENDIF
************************************************************************
INSERT INTO Temp (Tovar, Cena, Kolvo) VALUES ('Винт', 1, 1)
INSERT INTO Temp (Tovar, Cena, Kolvo) VALUES ('Гайка', 2, 2)
SELECT Temp
BROWSE TITLE "Temp" &&LAST
IF .F.
* Этот вариант работает
SCAN FOR !DELETED()
IF EMPTY(Kod)
INSERT INTO Sbit (Tovar, Cena, Kolvo) VALUES (Temp.Tovar, Temp.Cena, Temp.Kolvo)
ELSE
UPDATE Sbit SET Tovar=Temp.Tovar, Cena=Temp.Cena, Kolvo=Temp.Kolvo ;
WHERE Sbit.Kod=Temp.Kod AND Sbit.Tovar=Temp.Tovar
ENDIF
ENDSCAN
ENDIF
IF NOT TABLEUPDATE(1,.T.,'Sbit')
AERROR(laErrors)
MESSAGEBOX(laErrors[2])
ENDIF
SELECT Sbit
BROWSE TITLE "Sbit" &&LAST
[/code]

0

Автор публикации

Пользователи не найдены
Оставить комментарий
Авторизация
*
*
Генерация пароля