Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
Пытаюсь «взнуздать» CursorAdapter. Как я понимаю, его возможности двунаправлены: из исходных таблиц/курсоров в результирующий курсор и из результирующего курсора в исходные таблицы/курсоры. Первая часть у меня получается, а вторая - нет.
Пожалуйста, подскажите, что не так в моём простом примере.
![]() |
Re: Помогите с CursorAdapter | |
---|---|
PaulWist Сообщений: 14432 Дата регистрации: 01.04.2004 |
Убрать коммент. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
Re: Помогите с CursorAdapter | |
---|---|
dimag Сообщений: 450 Откуда: Одинцово Дата регистрации: 17.12.2002 |
Почитай журнал FoxTalk за 0309 mega.nz там про курсор адаптер есть статья
------------------ Глупость - это не отсутствие ума, это такой ум. ![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
К сожалению, это не помогло. У меня .DataSourceType = "Native". В номере за март 2009 года нет статьи о CursorAdapter. Я просмотрел все выпуски за 2009 год. Нигде нет. Может быть другой год? ![]() |
Re: Помогите с CursorAdapter | |
---|---|
dimag Сообщений: 450 Откуда: Одинцово Дата регистрации: 17.12.2002 |
|
Re: Помогите с CursorAdapter | |
---|---|
Burn Сообщений: 5609 Откуда: Днепр Дата регистрации: 02.01.2002 |
Использовал такую структуру:
.InsertCmd = "INSERT INTO Sbit (Tovar, Cena, Kolvo) SELECT ?Temp.Tovar,?Temp. Cena,?Temp. Kolvo" А впринципе если что выбираешь то и возвращаешь можно вполне обойтись без задания InsertCmd Исправлено 1 раз(а). Последнее : Burn, 26.10.22 20:26 ![]() |
Re: Помогите с CursorAdapter | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
А можно уточнить, что именно "не получается"? Какие симптомы, как проверял?
![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
В том примере, что я привёл: формирую CursorAdapter, получаю результирующий курсор Temp с помощью .CursorFill, добавляю данные в Temp, выполняю TABLEUPDATE. Смотрю исходную таблицу. Туда ничего не добавилось. Видимо, что-то в параметрах CursorAdapter я задаю неправильно. ![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
К сожалению, твой совет не помог. Что с заданием InsertCmd, что без него - не работает. А что это за синтаксис с вопросительными знаками? Это Fox? Где про такое можно почитать? ![]() |
Re: Помогите с CursorAdapter | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Sbit - исходная таблица
Temp - курсор, в котором происходят изменения данных CursorAdapter - это "обертка", которая отслеживает изменения в Temp. Поскольку Вы установили 5 режим буферизации, то событие, по которым изменения из таблицы Temp надо будет перенести в таблицу Sbit - это TableUpdate(). Но! Сброс буфера надо делать на таблице Temp. Ведь именно факт изменения в этой таблице отслеживает CursorAdapter
![]() |
Re: Помогите с CursorAdapter | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Да. Это синтаксис FoxPro. Это пришло из параметризированных View Как создать параметрические представления В оригинальной справке по Visual FoxPro это статья "How to: Create Parameterized Views" Хотя отдельно для CursorAdapter такого не прописали То, что идет после вопросительного знака - интерпретируется как "параметр" (константа). Там можно указать и имя переменной памяти. Надо будет только следить, чтобы эта переменная существовала на момент обращения к ней Т.е. прежде, чем выполнить указанную команду FoxPro сделает "макроподстановку". Вместо параметра подставит его значение. Константу ![]() |
Re: Помогите с CursorAdapter | |
---|---|
ssa Сообщений: 12922 Откуда: Москва Дата регистрации: 23.03.2005 |
Если точнее, то вставит результат вычисления выражения. Например:
------------------ Лень - это неосознанная мудрость. ![]() |
Re: Помогите с CursorAdapter | |
---|---|
of63 Сообщений: 24232 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() почему разрабы-фоксисты не сделали символ макроподстановки (?) внутри выражений SELECT, а символ (?) (символы на одной клавише русской размечены, может и на не русской) ?
Доб. ой, не правильно написал про клавишу "7"... () Про помощь "с курсор-адаптером" , боюсь сбить адептов этого адаптера оболочки над SELEC-ом /(абстрактным, как пытались его сделать рарзрабы фокса). Проще понять, если ты умеешь сделать SQLSУЛУ...-конструкцию, то тебе не нужна оболочка "что-то там" () Затупил, не стер для развлечения вашего ) Исправлено 2 раз(а). Последнее : of63, 27.10.22 21:29 ![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
Я умею составлять SELEC-запросы, а потом вручную вносить изменения отредактированного курсора в исходные таблицы. Меня подкупила именно автоматизация второй части процесса. То, что это универсальный механизм при изменении входных данных – для меня не актуально. Я не представляю, где могут быть задачи, в которых не определён источник входных данных, и нужно изначально закладываться и на базы/таблицы VFP, ODBC, ADO и XML. Спасибо Владимиру Макмимову за объяснение работы механизмов работы буферов. Можно долго перечитывать Help, а просветление так и не наступает. dimag подсказал хорошую статью Дуга Хеннига про CursorAdapter. На его сайте есть 3 статьи с примерами на эту тему. Они мне так понравились, что я их перевёл. Можно посмотреть в приложении. Честно говоря, 3 статью я не осилил. Это пока не мой уровень. Программа заработала после того, как я выкинул всё лишнее и добавил совет от Владимира Макмимова. Странно, что потребовалось указать ключевое поле Kod в свойствах UpdatableFieldList и UpdateNameList, хотя оно не обновляется, а формируется автоматически. Без этого появляется сообзщение об ошибке: «Для таблицы обновления "Sbit" не заданы столбцы ключей. Воспользуйтесь свойством KeyFieldList курсора.» , хотя в оно указано в KeyFieldList. Сейчас программа выглядит так:
![]() |
Re: Помогите с CursorAdapter | |
---|---|
Taran Сообщений: 13522 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Вот молодец человек.
И результатами поделился и статьями по теме. Не часто такое у вопрошающих бывает. ![]() ![]() |
Re: Помогите с CursorAdapter | |
---|---|
Burn Сообщений: 5609 Откуда: Днепр Дата регистрации: 02.01.2002 |
Потеряли Kod в списках обновляемых полей?
![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
Нет, не потерял, а думал, что его не нужно указывать, ведь у него свойство Autoinc. Оказалось, что указывать обязательно. Кажется, я рано радовался. Если я добавляю записи в курсор, а затем помечаю их как удалённые, то они добавляются в исходную таблицу как неудалённые. [attachment 36424 Q1.png] [attachment 36425 Q2.png] Как это исправить? ![]() |
Re: Помогите с CursorAdapter | |
---|---|
Burn Сообщений: 5609 Откуда: Днепр Дата регистрации: 02.01.2002 |
Делать Tableupdate() после удаления ?
Я просто с Naitiv не работал ![]() |
Re: Помогите с CursorAdapter | |
---|---|
lemenev Автор Сообщений: 80 Дата регистрации: 23.06.2022 |
Я в browse делаю все изменения (добавления, исправления, удаления), а затем выполняю Tableupdate(). Старые записи из исходной таблицы правильно помечаются как удалённые, а новые - нет. ![]() |
Re: Помогите с CursorAdapter | |
---|---|
Владимир Максимов Сообщений: 14041 Откуда: Москва Дата регистрации: 02.09.2000 |
Физически, пометка на удаление - это заполнение определенного байта. Можно сказать, что это некое служебное поле таблицы. Но установить это значение можно, разумеется, только у существующей записи. А если запись новая, то и установить этот признак некуда. Т.е. теоретически, для подобных ситуаций надо было бы давать 2 команды подряд. Сначала Insert, чтобы создать запись, а потом Delete, чтобы установить метку на удаление
Но сама по себе ситуация не вполне обычная. Создать запись чтобы тут же ее удалить. Вероятно по этой причине такая ситуация в штатном механизме обновления не была предусмотрена. Такие случаи надо обрабатывать "вручную" ![]() |
© 2000-2023 Fox Club  |