|
|
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Пожалуйста, приведите пример кода, который добавляет строчку в remote view, а затем посылает изменения на сервер. Мое “творчество” по прочтении helpa ничего не делает, видимо, я все совершенно не так поняла. И еще очень хотелось бы узнать, что за зверь такой – INSERT INTO…FROM MEMVAR Может, именно его я и использую неправильно. До экспериментов с MEMVAR я пыталась использовать INSERT…непосредственно результата SELECT’а, но fox ругается. В чем фишка написания запросов на foxe? Например, почему требуется переносить после ‘;’ на новую строчку каждый кусок SELECTа? В общем после MS SQL как-то непонятна специфика fox pro… LOCAL o_role_id LOCAL rname LOCAL ARRAY rid(1) LOCAL Nnorg_id LOCAL r_norg_id Nnorg_id=rv_slorg.norg_id r_norg_id=nNorg_id rname=ThisForm.o_ListBox1.List(1) SELECT role_id; from rv_role; where role_name=rname; INTO ARRAY rid o_role_id=rid(1) GO BOTTOM IN rv_orgroles INSERT INTO rv_orgroles FROM MEMVAR =TABLEUPDATE() =REQUERY("rv_rorg") GO TOP IN rv_rorg =REQUERY("rv_norole") GO TOP IN rv_norole ThisForm.o_ListBox1.Requery() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2007, 23:31 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Вы не пробовали делать все "как в MS SQL"? "Базовый" синтаксис команд Select-SQL одинаковый во всех языках программирования. Просто потому, что он и разрабатывался как некий универсальный стандарт, не зависящий от какого-либо языка программирования. Да, в каждом языке программирования есть некоторые отличия. Так называемые "диалекты". Но эти диалекты дополняют стандартный функционал ни в коем случае его не заменяя. Так вот, стандартный синтаксис команды INSERT-SQL во всех языках программирования это Код: plaintext Этот синтаксис также работает и в FoxPro. Кроме того, начиная с версии FoxPro 8 добавили и другой вариант Код: plaintext Но в FoxPro есть "расширение" этого синтаксиса. Т.е. некоторые дополнительные возможности сделать вставку. Дополнения касаются того, откуда еще можно получить те значения, которые будут вставляться в поля таблицы. Т.е. альтернативу директивы VALUE. Ну, очевидно, что значения могут быть взяты из переменных памяти. В FoxPro имя переменной памяти и имя поля таблицы может совпадать. Так вот, если на момент подачи команды INSERT-SQL в памяти есть переменные, имена которых совпадают с именами полей, перечисленных в директиве INSERT INTO, то вместо "тупого" перечисления всех полей в директиве VALUE можно просто указать ключевое слово MEMVAR Код: plaintext Этот синтаксис предполагает, что на момент подачи команды существуют переменные памяти с именами m.Field1, m.Field2, m.Field3, ... Разумеется, можно создавать эти переменные "поштучно" вручную, но обычно подобный синтаксис используется после использования команды Код: plaintext Которая копирует содержимое полей таблицы в одноименные переменные памяти. Это имеет смысл, когда требуется скопировать содержимое одной строки в новую строку. Возможно, с некоторыми изменениями. Существенным недостатком подобной идеологии работы является дополнительный контроль области видимости подобных переменных. По русски, синтаксис команды Insert-SQL для VFP9 описан здесь INSERT - SQL Команда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 11:25 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что я как раз-таки попробовала сначала так: INSERT INTO MyTab (Field1, Field2) SELECT f1, f2 FROM MyTab2 WHERE ... Точнее LOCAL Nnorg_id Nnorg_id=rv_slorg.norg_id INSERT INTO rv_orgroles(o_role_id ,norg_id ) SELECT role_id, nNorg_id from rv_role where role_name=rname и оно не заработало. Может потому, что значение одного поля надо брать из переменной, а второго -- запросом и я в селекте помимо имени поля указывала имя переменной. Но ведь возможны же конструкции типа: SELECT 10 FROM tab1, где имя поля не фигурирует. Что касается мемвара, я как раз и создаю руками 2 переменных LOCAL o_role_id LOCAL r_norg_id которые называются как поля во вьюшке, но вот обновлний не происходит. Хотя ошибка может быть совсем не здесь, а, скажем, в определении в listbox'е выбранного элемента: rname=ThisForm.o_ListBox1.List(1) Спасибо, что отвечаете на глупые вопросы:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 13:50 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Вот на такую строку fox говорит syntax error.. INSERT INTO rv_orgroles (o_role_id,r_norg_id) SELECT role_id, norg_id from rv_role CROSS JOIN rv_slorg where role_name=rname специально сейчас перепроверила, когда вы написали, что ... INSERT INTO MyTab (Field1, Field2, Field3, ...) SELECT f1, f2, f3 FROM MyTab2 WHERE ... должно работать. кстати, fox у меня 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 14:08 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Посмотрела че творится в debuggere Оказалось, что до этого момента =TABLEUPDATE() =REQUERY("rv_rorg") GO TOP IN rv_rorg =REQUERY("rv_norole") GO TOP IN rv_norole ThisForm.o_ListBox1.Requery() все нормально работает.Т.е. в rv_orgroles появляется строка с теми данными, что мне нужны. Может пролблема в том, что там есть третье поле - or_id Но оно автоинкрементируемое, по идее само должно чего-то добавиться..так что даж не знаю.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 14:27 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
CROSS JOIN - это "фишка" дизайнеров (построителей). При программном использовании команды Select-SQL такой тип объединения в FoxPro не существует. Точнее, "декартово объединение" реализуется другим способом. Поэтому Вы и получили сообщение о синтаксической ошибке, что использовали неизвестную опцию. Сообщения обработчика ошибок FoxPro, как правило, надо понимать буквально. Если он говорит "syntax error", значит действительно синтаксическая ошибка. Некорректная команда. Попробуйте выполнить инструкцию Select-SQL отдельно. Без "привязки" к команде Insert-SQL Код: plaintext 1. 2. 3. 4. 5. Если пройдет, потом можно уже будет "цеплять" ее к Insert-SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 14:39 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
AmbeeПосмотрела че творится в debuggere Оказалось, что до этого момента =TABLEUPDATE() =REQUERY("rv_rorg") GO TOP IN rv_rorg =REQUERY("rv_norole") GO TOP IN rv_norole ThisForm.o_ListBox1.Requery() все нормально работает.Т.е. в rv_orgroles появляется строка с теми данными, что мне нужны. Может пролблема в том, что там есть третье поле - or_id Но оно автоинкрементируемое, по идее само должно чего-то добавиться..так что даж не знаю.. Так есть сообщение об ошибке? Если есть, то какое и на какой именно команде возникает? TableUpdate() - сброс изменений из Remote View в исходную таблицу Requery() - заново выполняет запрос из исходных таблиц и заново наполняет Remote View ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 14:42 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
нет, сообщения об ошибке нет. Просто я проверила, что переменнные заполняются правильно и remote view меняется соответственно - появляется строка с новыми данными(и нулевым пока полем с первичным ключом). но вот на сервере ничего не меняется.и в rv после того как все проработает - строки уже нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 18:42 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
нет, наврала..есть ошибка: Table buffer for alias "rv_orgroles" contains uncommited changes ошибка в строке =REQUERY("rv_orgroles") эта строка сразу после TABLEUPDATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 18:49 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Кажется, некорректная работа должна быть связана с наличием третьего поля - первичного ключа, которое в rv я не заполняю. но оно же автоинкрементируемое! Установки такие: Identity YES Identity Seed 1 Identity Increment 1 Или я, опять же, не понимаю принцип работы таких полей.. А может быть, в TABLEUPDATE надо как-то указать, что именно за таблицу я хочу обновить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2007, 18:56 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Вы создавали Remotw View каким образом? Через дизайнер? Там есть закладка Update Criterias. На ней обязательно должны быть указаны: -) Ключевое поле - поставить птичку в столбце под иконкой ключа -) Обновляемые поля - поставить птичку в столбце под иконкой карандаша - это те поля, изменения в которых будут сброшены в исходную таблицу. Автоинкрементное поле помечать как обновляемое - не надо -) Выставлен флажок "Send SQL Updates" Результат работы функции TableUpdate() надо обязательно проверять. Код: plaintext 1. 2. 3. 4. 5. Судя по описанию, произошла какая-то ошибка при попытке сброса буфера, о чем и свидетельствует сообщение об ошибке о том, что буфер не сброшен. Поэтому нельзя выполнить перезапрос по Requery() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 00:17 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
воспользуйтесь курсорадаптером (тем более у Вас 9-ка) КАД - это виз класс, с которым оч.удобно работать пример для ODBC автоинкриментное поле апдейтить не нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 09:40 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
alex11100КАД - это виз класс, с которым оч.удобно работать Небольшое уточнение. Cursor Adapter - это НЕ визуальный класс. С ним удобно работать, если ты понимаешь назначение всех его свойств и методов. К сожалению, на его освоение надо затратить довольно значительное количество времени и сил. Он значительно сложнее в понимании, чем Remote View. Я бы советовал все-таки сначала заставить работать Remote View, а потом, с полученным опытом, переходить на Cursor Adapter. Т.е. использовать Remote View как инструмент обучения работы с Cursor Adapter. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:36 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
о достал - вредитель лучше изучить - и затем быстро летать Cursor Adapter - визуальный класс разберитесь с понятиями и определениями в фокспро что такое визуальный, а что нет ну раз для Вас визуальный. это то, что вы видите на форме, то тогда для Вас подправлю мысль КАД - класс, который можно создавать, изменять и наследовать в Дизайнере классов, хранить в библиотеке визуальных классов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 12:52 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Visual and Non-Visual Classes In Visual FoxPro, objects and controls created from visual classes display a visual element at design time and run time. Objects and controls based on non-visual classes, such as the Custom class and Timer control, display a visual element only at design time but not at run time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:01 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
немного не ту выдержку дал, по-позже на вики найду -выложу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:07 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
alex11100, вот тут ты заврался ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:09 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
A visual class library is .VCX file containing classes that can be edited with the Visual Class Designer or, since a .VCX file is just a table, it can also be manipulated programmatically with standard VFP data manipulation commands, or interactively with a BROWSE or EDIT window. подмена понятий класс, содержащийся в библиотеке виз классов - визуальный видимый на форме и для отобр-я значений нужно по-другому и именовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:14 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
alex11100подмена понятий Да. С этим согласен. alex11100класс, содержащийся в библиотеке виз классов - визуальный видимый на форме и для отобр-я значений нужно по-другому и именовать Только я делаю прямо противоположный вывод. Класс, который может иметь некое визуальное представление в Run-Time - визуальный. А то, можно ли создать наследника от класса, который, в свою очередь, может быть добавлен в визуальную библиотеку классов, никак не характеризует класс с точки зрения его "визуальности". Это определяет возможность его редактирования визуальными средствами. Все-таки главным является использование класса (для чего его создали), а не процесс его создания. Поэтому в данном случае, я иду от способа его использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:11 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
ООП предполагает представлять какие-то сущности и атомарные составляющие в виде объектов. Основное преимущество ООП - возможность абстрагироваться. КАД в отличии от РВ прост для понимания и для настройки с пом. дизайнера классов просто и удобно настраивать свойства. для автомат.настройка КАД возможно написание своего собственного билдера. заготовки классы-КАДы могут создаваться автоматически для хранения КАД достаточно включить vcx-библиотеку в проект и не заморачиваться с dbc. привожу пример-построитель КАД Author: Mark E. McCasland показан пример обвязки базового класса и автомат построения шаблонов-заготовок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:54 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
автор ВладимирМ Вы создавали Remote View каким образом? Через дизайнер? Там есть закладка Update Criterias. На ней обязательно должны быть указаны: -) Ключевое поле - поставить птичку в столбце под иконкой ключа -) Обновляемые поля - поставить птичку в столбце под иконкой карандаша - это те поля, изменения в которых будут сброшены в исходную таблицу. Автоинкрементное поле помечать как обновляемое - не надо -) Выставлен флажок "Send SQL Updates" Судя по описанию, произошла какая-то ошибка при попытке сброса буфера, о чем и свидетельствует сообщение об ошибке о том, что буфер не сброшен. Поэтому нельзя выполнить перезапрос по Requery() Птички действительно проставлены не были. дело в том, что вьюшки создавались программно. Ну да неважно, я проставила птички - а буфер по-прежнему не сбрасывается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 23:04 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
AmbeeПтички действительно проставлены не были. дело в том, что вьюшки создавались программно. Ну да неважно, я проставила птички - а буфер по-прежнему не сбрасывается... Так какая ошибка-то? Кокое содержимое массива laError после использования функции AERROR()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 00:19 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
TableUpdate возвращает true, а ошибка та же - в строке =REQUERY("rv_orgroles") table orgroles contains uncommited changes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 18:33 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
Это сообщение надо понимать БУКВАЛЬНО! У тебя остались еще в буфере не сброшенные данные. Дело в том, что функция TableUpdate() без указания параметра сбросит буфер только у одной (текущей) записи. Видимо, ты работаешь в табличной буферизации (5) и изменил более одной записи. Укажи параметр, чтобы сбросить весь буфер Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2007, 19:22 |
|
||
|
как добавить строчку в remote view и посылать на сервер
|
|||
|---|---|---|---|
|
#18+
спасибо, select rv_orgroles помогло! Владимир М Видимо, ты работаешь в табличной буферизации (5) и изменил более одной записи. Только я женского пола!!! Ну, наверно,у меня не слишком удачный ник:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2007, 21:20 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34369809&tid=1589770]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 230ms |
| total: | 437ms |

| 0 / 0 |
