|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Добавляю заполненную строку. В коде click() кнопки "Добавить": Код: 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.
В гриде появилась строка. Далее командой browse проверяю что в курсорадаптере. Далее пытаюсь сохранить Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2011, 14:40 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМДобавляю заполненную строку. В коде click() кнопки "Добавить": Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В гриде появилась строка. Далее командой browse проверяю что в курсорадаптере. Далее пытаюсь сохранить Ошибаетесь, Вы уже сохранили. И не проверили Ваше сохранение. Внимательно смотрим последнюю строку процитированного кода. Зачем там TableUpdate()? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2011, 15:06 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Sergey Sizov, Тоесть мне вместо tableupdate() нужно вставить эту проверку?: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2011, 15:19 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМДобавляю заполненную строку. В коде click() кнопки "Добавить": Код: 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.
Строка появилась потому что это локальный курсор, а исчезла после cursorrefresh() потому, что в базе этой записи не появлялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2011, 16:19 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМSergey Sizov, Тоесть мне вместо tableupdate() нужно вставить эту проверку?: ЗАЧЕМ? 1. Зачем сразу поле добавления пустой записи проверять наличие изменений в курсоре? А добавление не есть изменение? 2. Зачем на сервер гнать пустую запись? Потом ее заполнять и опять изменения гнать на сервер? Кстати, сколько уже пустых записей туда загнали? А допустима ли на сервере пустая запись? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2011, 16:37 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Sergey SizovНадеждаМSergey Sizov, Тоесть мне вместо tableupdate() нужно вставить эту проверку?: ЗАЧЕМ? 1. Зачем сразу поле добавления пустой записи проверять наличие изменений в курсоре? А добавление не есть изменение? 2. Зачем на сервер гнать пустую запись? Потом ее заполнять и опять изменения гнать на сервер? Кстати, сколько уже пустых записей туда загнали? А допустима ли на сервере пустая запись? 1. согласна. 2. так задумано природой :). 3. Пустая запись допустима, сколько их там, не могу сказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 08:28 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Dima TВ простых случаях оно само разрулится. не бывает "простых" случаев, а бывают универс-е методы взаим-я, в которых всегда стоит поднимать транзакции как на стороне клиента, так и на стороне сервера. Dima TЛично я предпочитаю явно открывать транзакцию для сложных случаев. Примерно так: предпочитайте. эти команды sqlsetprop() sqlcommit() sqlrollback() делают то-же самое ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 09:26 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМ Append Blank TABLEUPDATE() зачем? зачем Вы суете везде где надо и не надо? еще раз вопрос: Вы реальный человек или это обладателям ресурса нечем заняться и так поддерживается активность на умирающем форуме? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 09:28 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
прошелмимоНадеждаМ Append Blank TABLEUPDATE() зачем? зачем Вы суете везде где надо и не надо? еще раз вопрос: Вы реальный человек или это обладателям ресурса нечем заняться и так поддерживается активность на умирающем форуме? Я просто не понимаю надо оно или нет и куда его сунуть. Конечно я реальный человек и реальный нуб. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 10:01 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМЯ просто не понимаю надо оно или нет и куда его сунуть. гмм... пальцы в розетку тоже "суете" ? с примерами какими-то игрались? смотрели? классически то делается так: изменения на сервер отправлять нужно единожды, когда уже все ввели, изменили и т.д. пробуем "сохраняться" и проверяем результат. не получилось - откатываемся до момента начала сохранения, иначе - ладушки - сообщаем об успехе. что не понятно в таком принципе работы посредством буфера ? зачем этот принцип в Вашем случае необходимо ставить "на уши" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2011, 10:55 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМЯ просто не понимаю надо оно или нет и куда его сунуть. Физически, данные находятся на SQL-сервере. CursorAdapter посылает запрос к серверу и получает из него выборку , которая физически хранится уже у клиента. Другими словами, то, что отображает CursorAdapter - не есть то, что реально хранится на SQL-сервере. Это уже другая (физически другая) таблица. Следовательно, все манипуляции с CursorAdapter - это манипуляции с локальными данными, хранящимися на машине клиента. Чтобы перенести изменения, сделанные на клиенте на SQL-сервер необходимо выполнить ряд операций. Ну, чтобы не "заморачиваться" считаем, что надо дать команду TableUpdate(). Хотя, возможны варианты, но сейчас не будем углубляться... Чтобы понять дальнейшие рассуждения, еще раз напомню, что у нас есть. - Есть некий курсор на клиенте, как результат открытия и наполнения CursorAdapter - Есть некая таблица на SQL-сервере, которая послужила источником данных для наполнения курсора на клиенте Обращаю особое внимание - это две таблицы между собой никак не связаны. Т.е. вообще. Это две разные (физически разные) таблицы. Теперь, ставим себя на место разработчиков FoxPro. Есть две таблицы. Необходимо перенести изменения, сделанные в одной из этих таблиц (CursorAdapter) в другую таблицу (SQL-сервер). Как это сделать? Собственно, существуют всего 3 команды, которые это и делают - Вставка новой записи - Insert-SQL - Удаление существующей записи - Delete-SQL - Изменение существующей записи - Update-SQL Это значит, что после внесения изменения в CursorAdapter по команду TableUpdate() формируется одна из указанных команд, которая и переносит изменения на SQL-сервер. Что произойдет, если сделать вот это Код: plaintext 1. 2.
Ну, очевидно, первая команда создаст новую пустую запись в CursorAdapter, а вторая команда попытается сформировать команду Insert-SQL, чтобы передать ее на SQL-сервер и создать там новую строку . А сможет она это сделать? Напомню, что синтаксис команды Insert-SQL выглядит следующим образом Код: plaintext
Т.е. для успешного формирования (создания) команды Insert-SQL необходимо: - Имя таблицы, в которую пойдет вставка - Имена полей, значение которых будет записано - Значения для наполнения указанных полей FoxPro, по умолчанию, пытается оптимизировать формируемые команды. Т.е., как правило, он передает на SQL-сервер только то, что было введено. Если в новой записи CursorAdapter какое-то поле не было заполнено, то это поле не попадет в список полей, формирующих команду Insert-SQL. Зачем передавать "пустоту"? Это все хорошо работает, до тех пор, пока есть хотя бы одно значение. А что передавать, если еще ни одно поле не было заполнено? Чисто формально, получится вот такая команда Код: plaintext
Т.е. просто нет ни списка полей, ни значений. Ведь на момент подачи команды TableUpdate() ни одно из полей еще не было изменено. Естественно, что подобная команда вызовет синтаксическую ошибку. Невозможно выполнить такую команду. В принципе, если бы Вы поставили проверку успешности выполнения команды TableUpdate(), то сразу же и получили бы сообщение об ошибке о том, что невозможно сформировать "пустую" команду Insert-SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2011, 16:18 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
чего-то я все-таки недопонимаю... в ините формы: WITH THIS SET MULTILOCKS ON .AddProperty('lo_CA') .lo_CA = CREATEOBJECT("CursorAdapter") .lo_CA.Alias='fin' .lo_CA.DataSourceType = 'ODBC' .lo_CA.DataSource=PubCon .lo_Ca.fetchsize=-1 .lo_ca.FetchAsNeeded=.f. .lo_CA.SelectCmd = 'select * from test_fin2 order by fin_id, god' .lo_CA.Tables = 'test_fin2' .lo_CA.BufferModeOverride = 3 .lo_CA.AllowUpdate=.t. .lo_CA.AllowInsert=.t. .lo_CA.UpdateType=1 .lo_CA.keyFieldList = 'fin_id' .lo_CA.UpdateNameList=" LPUCODE fin.LPUCODE, DATE fin.DATE, SUM fin.SUM, PRIM fin.PRIM, SKIND fin.SKIND, NDOC fin.NDOC, RF fin.RF, GOD fin.GOD, PRIZ fin.PRIZ, OSTATOK fin.OSTATOK" .lo_CA.UpdatableFieldList=" LPUCODE, DATE, SUM, PRIM, SKIND, NDOC, RF, GOD, PRIZ, OSTATOK" IF .lo_CA.AutoOpen()=.t. .grid1.recordsource=.lo_CA.Alias ELSE MESSAGEBOX('Ïðîèçîøëà îøèáêà ïðè ñîçäàíèè êóðñîðàäàïòåðà') ENDIF ENDWITH в кнопке: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 16:44 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
> Автор: НадеждаМ > чего-то я все-таки недопонимаю... Вопрос то в чем? :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 17:03 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
НадеждаМчего-то я все-таки недопонимаю... TABLEUPDATE() а мне кажется, что просто "троллите". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 17:04 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Странный код: НадеждаМ Код: plaintext 1. 2. 3. 4. 5.
первый TABLEUPDATE() тут не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2011, 17:05 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
http://forum.foxclub.ru/read.php?29,527868 натолкну на мысль. для того, чтобы "мониторить" что такое происходит на сервере и понять причину, почему что-то не происходит и т.д. у сервера есть инструмент под названием "профайлер" http://msdn.microsoft.com/ru-ru/library/ms181091.aspx покажите нам трейс ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 14:43 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Очевидно, что не хватает прописанного поля in_id (keyFieldList) в строках UpdateNameList и UpdatableFieldList. Без этого обновление работать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2011, 11:45 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Доброго времени суток Данный топ нашел по ключевым CAD TABLEUPDATE синтаксическая ошибка, и решил написать здесь. Существовала много лет обертка обновления таблиц кадом которая без проблем работала и сам туда давно не лазил(и основательно забыл, что там да как делал)- и тут перестала в связи с этим 1й Вопрос: кроме If !tableupdate(.....) ...=aerror(...) есть возможность чуть поконкретней узнать что "не нравится". "синтаксическая ошибка"-не о чем, облазил все что можно и последняя догадка:"А хрен его знает как tableupdate вообще обновляет, а у меня в источниках есть поля с именами group и sort - может он их за ключевые слова перепутает"- сработала, переименовав поля все заработало. 2й вопрос: где бы поподробней прочитать tableupdate- где и откуда что берет, как "действует" Грузить общество своими тараканами(исходниками)- не хочется, тем более довольно много нагромождений о которых и сам подзабыл зачем. Собирает нормально, а обновляет при отсутствии полей которые можно воспринять за ключевое, те надо еще tableupdate покататься - дайте ссылку или что еще плиз ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 13:02 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
rock-n-rollв связи с этим 1й Вопрос: кроме If !tableupdate(.....) ...=aerror(...) есть возможность чуть поконкретней узнать что "не нравится". "синтаксическая ошибка"-не о чем, Надо просто научиться читать всё сообщение, а не отдельные его части. В частности, обращать внимание на номер фоксоыой ошибки. Если номер 1526 - ругается сервер, иначе - фокс. Тогда и ясно будет кто и на что ругается.2й вопрос: где бы поподробней прочитать tableupdate- где и откуда что берет, как "действует"Использует стандартный механизи буферизации таблиц, ищет изменения и сочиняет по ним команды insert/delete/update, которые и отсылает на сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 13:27 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
првильный проходящий.rock-n-rollв связи с этим 1й Вопрос: кроме If !tableupdate(.....) ...=aerror(...) есть возможность чуть поконкретней узнать что "не нравится". "синтаксическая ошибка"-не о чем, Надо просто научиться читать всё сообщение, а не отдельные его части. В частности, обращать внимание на номер фоксоыой ошибки. Если номер 1526 - ругается сервер, иначе - фокс. Тогда и ясно будет кто и на что ругается.2й вопрос: где бы поподробней прочитать tableupdate- где и откуда что берет, как "действует"Использует стандартный механизи буферизации таблиц, ищет изменения и сочиняет по ним команды insert/delete/update, которые и отсылает на сервер. а как научиться читать, в данном случае номер 10 - наверно есть какой то справочник где хотя бы намеком примерно где копать так меня и интересует как он сочинает insert/delete/update .Повторюсь обертка работала многие годы и тут нарвался когда имена полей можно воспринять как ключевое слово(хотя может и я гоню) - поэтому и интересует как ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 13:51 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
rock-n-rollпрвильный проходящий.пропущено... Надо просто научиться читать всё сообщение, а не отдельные его части. В частности, обращать внимание на номер фоксоыой ошибки. Если номер 1526 - ругается сервер, иначе - фокс. Тогда и ясно будет кто и на что ругается.пропущено... Использует стандартный механизи буферизации таблиц, ищет изменения и сочиняет по ним команды insert/delete/update, которые и отсылает на сервер. а как научиться читать, в данном случае номер 10 - наверно есть какой то справочник где хотя бы намеком примерно где копатьКак ни странно некотроым покажется, но это документация по фоксу, родная. В ней есть список всех выдаваемых фоксом ошибок. Если ошибка серверная - то документация по серверу. Внезапно, да? так меня и интересует как он сочинает insert/delete/update .Повторюсь обертка работала многие годы и тут нарвался когда имена полей можно воспринять как ключевое слово(хотя может и я гоню) - поэтому и интересует какВы думаете, что, например, команду Insert into ... кад генерерит каким-то особенным способом, отличным от самой обычной конкатенации строк? Вы доку по функции GetFieldState() не пробовали читать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2017, 15:51 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
правильный проходящий.rock-n-rollпропущено... а как научиться читать, в данном случае номер 10 - наверно есть какой то справочник где хотя бы намеком примерно где копатьКак ни странно некотроым покажется, но это документация по фоксу, родная. В ней есть список всех выдаваемых фоксом ошибок. Если ошибка серверная - то документация по серверу. Внезапно, да?так меня и интересует как он сочинает insert/delete/update .Повторюсь обертка работала многие годы и тут нарвался когда имена полей можно воспринять как ключевое слово(хотя может и я гоню) - поэтому и интересует какВы думаете, что, например, команду Insert into ... кад генерерит каким-то особенным способом, отличным от самой обычной конкатенации строк? Вы доку по функции GetFieldState() не пробовали читать? 1. Файлсервер,номер ошибки 10- просто попросил ссылку.К чему весь пафос о не о чем? 2. Вообще к чему это? Вопрос к другим форумчанам, НЕ К првильный проходящий. код - вроде работает на любых полях таблиц источников Код: sql 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.
если в первой строке имя поля заменить на GROUP сразу ругается tableupdate Да, я подозреваю что он в своих апдейтах воспринимает GROUP за ключевое слово- может и я гоню- вразумите ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 11:50 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
rock-n-rollВопрос к другим форумчанам, НЕ К првильный проходящий. Все правильно проходящий тебе написал, телепатов тут нет. Откуда мне или ему догадаться что у тебя целый генератор курсор-адаптеров? Сразу надо было свое поделие показать. Посмотри что пишется в this.SelectCmd Код: sql 1. 2. 3.
Если сам не разберешься - сюда запости. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 12:43 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
Dima T, Вообще,совсем не догадываюсь что в SelectCmd не так. В "оригинале"тоже вместо * и после where "макроподстановки", но что там, что там получается запрос как запрос и поведение то же Вообщем совсем не догадываюсь, нужна еще подсказка ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 13:03 |
|
Помогите с добавлением данных через курсорадаптер
|
|||
---|---|---|---|
#18+
rock-n-rollDima T, Вообще,совсем не догадываюсь что в SelectCmd не так. В "оригинале"тоже вместо * и после where "макроподстановки", но что там, что там получается запрос как запрос и поведение то же Вообщем совсем не догадываюсь, нужна еще подсказка Сохрани в буфер обмена Код: sql 1. 2. 3. 4.
Затем что получилось вставь в prg и запусти. Запустится или ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2017, 13:15 |
|
|
start [/forum/topic.php?fid=41&msg=37352924&tid=1581993]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
23ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 391ms |
0 / 0 |