|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
Уважаемые ГУРУ Помогоите разобоаться с обновлением таблиц через КАД This.PayICADPtr = CreateObject('CursorAdapter') && PayI With This.PayICADPtr .DataSource = CAdSourceHdr && Указатель на источник данных .DataSourceType = CAdSourceType && Тип источника данных .Tables = "PayI" .Alias = "cPayI" .BufferModeOverride = 5 .SelectCmd = "Select * from PayI where RecIdent=?RecID" EndWith if !This.PayICADPtr.CursorFill() && Заполнение курсора (1 запись) AError(laErrors) MessageBox(laErrors[2]) return(.F.) endif Scatter memo NAME ThisForm.PayIDataPtr && Считать поля записи в об"ект Scatter * Редактирование полей записи в об"екте PayIDataPtr на форме * обновление таблицы Select cPayI && Курсор от PayI With ThisForm.PayICADPtr .UpdateType = 1 .KeyFieldList = 'RecIdent' m.NameList = Field(1) +Space(1) + .Tables + "." + Field(1) m.FieldList = Field(1) for i=2 to FCount() m.NameList = m.NameList + "," + Field(i) +Space(1) + .Tables + "." + Field(i) m.FieldList = m.FieldList + "," + Field(i) endfor .UpdateNameList = m.NameList && Список изменяемых полей .UpdatableFieldList = m.FieldList EndWith UPDATE cPayI where RecIdent = ThisForm.DocID SET; PayDocNum = ThisForm.PayIDataPtr.PayDocNum Дает ошибку Alias PAYDATAPTR not found хотя вариант m.aaa = ThisForm.PayIDataPtr.PayDocNum UPDATE cPayI where RecIdent = ThisForm.RecID SET; PayDocNum = m.aaa проходит без проблем. Получается , что все поля из об'екта придется перенести в локальные переменные, а потом запускать Update ? Или есть другое решение ? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2009, 16:50 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60, 1. Настройки КАД обычно делаются один раз при начале работы с ним, а не динамичски в коде переписывается один и тот же список полей. Фоксу и Вам делать нечего? 2. Команда select в первую очередь работает с таблицами. Аесли это еще и на сервере, то только с таблицами. ThisForm.PayIDataPtr для нее - таблица ThisForm с полем PayIDataPtr. 3. Зачем перегонять scatter'ом данные в свойства объекта? Их нельзя/трудно редактировать прямо в курсоре? Кстати, и п.2 тогда сразу отпадет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2009, 17:31 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
авторИли есть другое решение ? вот пример для родных таблиц ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 08:54 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий Редактировать прямо в курсоре не трудно, если это существующая запись, а как редактировать добавляемую запись - добавить в курсор пустую запись и встать на нее ? и чем добавлять: append blank или Insert SQL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:01 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60to проходящий Редактировать прямо в курсоре не трудно, если это существующая запись, а как редактировать добавляемую запись - добавить в курсор пустую запись и встать на нее ? Да. А это настолько неочевидно? и чем добавлять: append blank или Insert SQL ? Чем удобнее, тем и вставлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:03 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий А если User в дальнейшем отказался от добавления записи в форме, что делать с курсором ? Пустая запись уже не нужна. Обновить курсор? И чем ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:29 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60to проходящий А если User в дальнейшем отказался от добавления записи в форме, что делать с курсором ? Пустая запись уже не нужна. Обновить курсор? И чем ? Tablerevert() ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:32 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий Еще один вопрос В записи есть поля, которые непосредственно не редактируются, например номер (ID) организации, а находятся в свойстве формы. Чем их перенести в запись - через Replace ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:42 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
авторЧем их перенести в запись - через Replace ? да, можно автоматом, создать функцию - могу показать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:43 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий Если можно, буду благодарен ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:45 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
пока уехал за вином и конфетами ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:50 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий Спасибо, попробую разобраться ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 13:55 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
to проходящий Есть еще одна проблема. В каждой записи есть вычисляемое поле RecIdent - идентификатор записи Для его получения и наращивания на +1 используется процедура, которая напрямую через Use открывает таблицу идентификаторов, блокирует ее по FLock(), находит тек. значение RecIdent для нужной таблицы, увеличивает его на 1 и возвращает новое значение. Таблицы от FoxPro for DOS, т.е. Identity не поддерживают, поменять на новый формат не могу - их FPD не открывает. Напрямую я, как понимаю, через КАД заблокировать таблицу идентификаторов на время поиска и вычисления след. идентификатора не смогу. Из тех вариантов, которые нашел - хранимая процедура в DBC файле, но при добавлении в DBC таблиц от FPD VFOX 9.0 сразу пытается их конвертировать в новый формат - засада для FPD Есть ли еще варианты решения этой проблемы ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 15:00 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60Напрямую я, как понимаю, через КАД заблокировать таблицу идентификаторов на время поиска и вычисления след. идентификатора не смогу. А каким боком тут КАД? Вы не умеете получать значения из процудур/функций? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 15:14 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
Мне хотелось все сделать однообразно через ODBC ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 15:26 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60Мне хотелось все сделать однообразно через ODBC И что это изменило? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 15:49 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
КАД - это обьект имеющий Befor и After методы для добавления и модификации. Все свои танцы с бубном вы можете вынести туда. Ну и для чего включать таблицы в DBC ? Если вам нужно написать хранимку - создайте себе базу , но таблицы в нее не включайте - используйте как хранилище хранимок. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 16:04 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
AlexiS, за идею хранилища хранимок спасибо. Обязательно попробую По КАДу: неужели возможно, используя события Befor и After, четко гарантировать что между созданием курсора из таблицы идентификаторов, его модификацией и сбросом на сервер туда не вклинится еще кто-нибудь и не получит старое значение идентификатора и получим 2 записи с одним ID соответственно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 16:47 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60AlexiS, за идею хранилища хранимок спасибо. Обязательно попробую По КАДу: неужели возможно, используя события Befor и After, четко гарантировать что между созданием курсора из таблицы идентификаторов, его модификацией и сбросом на сервер туда не вклинится еще кто-нибудь и не получит старое значение идентификатора и получим 2 записи с одним ID соответственно Указанные события тут совершенно не причем. Гарантии должна обеспечивать процедура получения нового идентификатора. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 16:58 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
А есть какой-либо рабочий вариант процедуры расчета и получения ID Можно его сделать достоянием публики ? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 17:17 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60А есть какой-либо рабочий вариант процедуры расчета и получения ID Можно его сделать достоянием публики ? А это кто писал? Для его получения и наращивания на +1 используется процедура, которая напрямую через Use открывает таблицу идентификаторов, блокирует ее по FLock(), находит тек. значение RecIdent для нужной таблицы, увеличивает его на 1 и возвращает новое значение. Что еще Вы хотите? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 17:28 |
|
Обновление записи через КАД
|
|||
---|---|---|---|
#18+
antonov60А есть какой-либо рабочий вариант процедуры расчета и получения ID Можно его сделать достоянием публики ? 1. В приведенном коде Код: plaintext
2. Поиск со словом NewID (масса примеров) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2009, 17:57 |
|
|
start [/forum/topic.php?fid=41&msg=35853184&tid=1586701]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 320ms |
total: | 478ms |
0 / 0 |