powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как добавить строчку в remote view и посылать на сервер
25 сообщений из 25, страница 1 из 1
как добавить строчку в remote view и посылать на сервер
    #34369296
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, приведите пример кода, который добавляет строчку в 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()
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369499
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не пробовали делать все "как в MS SQL"? "Базовый" синтаксис команд Select-SQL одинаковый во всех языках программирования. Просто потому, что он и разрабатывался как некий универсальный стандарт, не зависящий от какого-либо языка программирования.

Да, в каждом языке программирования есть некоторые отличия. Так называемые "диалекты". Но эти диалекты дополняют стандартный функционал ни в коем случае его не заменяя.

Так вот, стандартный синтаксис команды INSERT-SQL во всех языках программирования это

Код: plaintext
INSERT INTO MyTab (Field1, Field2, Field3, ...) VALUES (Val1, Val2, Val3)

Этот синтаксис также работает и в FoxPro. Кроме того, начиная с версии FoxPro 8 добавили и другой вариант

Код: plaintext
INSERT INTO MyTab (Field1, Field2, Field3, ...) SELECT f1, f2, f3 FROM MyTab2 WHERE ...

Но в FoxPro есть "расширение" этого синтаксиса. Т.е. некоторые дополнительные возможности сделать вставку.

Дополнения касаются того, откуда еще можно получить те значения, которые будут вставляться в поля таблицы. Т.е. альтернативу директивы VALUE. Ну, очевидно, что значения могут быть взяты из переменных памяти. В FoxPro имя переменной памяти и имя поля таблицы может совпадать.

Так вот, если на момент подачи команды INSERT-SQL в памяти есть переменные, имена которых совпадают с именами полей, перечисленных в директиве INSERT INTO, то вместо "тупого" перечисления всех полей в директиве VALUE можно просто указать ключевое слово MEMVAR

Код: plaintext
INSERT INTO MyTab (Field1, Field2, Field3, ...) FROM MEMVAR

Этот синтаксис предполагает, что на момент подачи команды существуют переменные памяти с именами m.Field1, m.Field2, m.Field3, ...

Разумеется, можно создавать эти переменные "поштучно" вручную, но обычно подобный синтаксис используется после использования команды

Код: plaintext
SCATTER MEMVAR

Которая копирует содержимое полей таблицы в одноименные переменные памяти. Это имеет смысл, когда требуется скопировать содержимое одной строки в новую строку. Возможно, с некоторыми изменениями. Существенным недостатком подобной идеологии работы является дополнительный контроль области видимости подобных переменных.

По русски, синтаксис команды Insert-SQL для VFP9 описан здесь

INSERT - SQL Команда
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369600
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том, что я как раз-таки попробовала сначала так:
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)
Спасибо, что отвечаете на глупые вопросы:)
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369612
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот на такую строку 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.
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369629
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 Но оно автоинкрементируемое, по идее само должно чего-то добавиться..так что даж не знаю..
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369645
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CROSS JOIN - это "фишка" дизайнеров (построителей). При программном использовании команды Select-SQL такой тип объединения в FoxPro не существует. Точнее, "декартово объединение" реализуется другим способом. Поэтому Вы и получили сообщение о синтаксической ошибке, что использовали неизвестную опцию.

Сообщения обработчика ошибок FoxPro, как правило, надо понимать буквально. Если он говорит "syntax error", значит действительно синтаксическая ошибка. Некорректная команда.

Попробуйте выполнить инструкцию Select-SQL отдельно. Без "привязки" к команде Insert-SQL

Код: plaintext
1.
2.
3.
4.
5.
LOCAL Nnorg_id, rname
Nnorg_id = rv_slorg.norg_id 
rname = ThisForm.o_ListBox1.List( 1 ) 

SELECT role_id, m.nNorg_id from rv_role where role_name = m.rname 

Если пройдет, потом можно уже будет "цеплять" ее к Insert-SQL
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369648
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369799
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, сообщения об ошибке нет. Просто я проверила, что переменнные заполняются правильно и remote view меняется соответственно - появляется строка с новыми данными(и нулевым пока полем с первичным ключом). но вот на сервере ничего не меняется.и в rv после того как все проработает - строки уже нет
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369806
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, наврала..есть ошибка:
Table buffer for alias "rv_orgroles" contains uncommited changes
ошибка в строке
=REQUERY("rv_orgroles")
эта строка сразу после TABLEUPDATE
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34369809
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, некорректная работа должна быть связана с наличием третьего поля - первичного ключа, которое в rv я не заполняю. но оно же автоинкрементируемое!
Установки такие:
Identity YES
Identity Seed 1
Identity Increment 1
Или я, опять же, не понимаю принцип работы таких полей..
А может быть, в TABLEUPDATE надо как-то указать, что именно за таблицу я хочу обновить?
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34370038
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы создавали Remotw View каким образом? Через дизайнер? Там есть закладка Update Criterias. На ней обязательно должны быть указаны:

-) Ключевое поле - поставить птичку в столбце под иконкой ключа
-) Обновляемые поля - поставить птичку в столбце под иконкой карандаша - это те поля, изменения в которых будут сброшены в исходную таблицу. Автоинкрементное поле помечать как обновляемое - не надо
-) Выставлен флажок "Send SQL Updates"

Результат работы функции TableUpdate() надо обязательно проверять.

Код: plaintext
1.
2.
3.
4.
5.
IF TableUpdate(.T.) = .F.
	LOCAL laError( 1 )
	=AERROR(laError)
	* Анализ массива laError для уточнения причины ошибки
ENDIF

Судя по описанию, произошла какая-то ошибка при попытке сброса буфера, о чем и свидетельствует сообщение об ошибке о том, что буфер не сброшен. Поэтому нельзя выполнить перезапрос по Requery()
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34370365
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
воспользуйтесь курсорадаптером (тем более у Вас 9-ка)

КАД - это виз класс, с которым оч.удобно работать

пример для ODBC

автоинкриментное поле апдейтить не нужно
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371001
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100КАД - это виз класс, с которым оч.удобно работать
Небольшое уточнение.

Cursor Adapter - это НЕ визуальный класс. С ним удобно работать, если ты понимаешь назначение всех его свойств и методов.

К сожалению, на его освоение надо затратить довольно значительное количество времени и сил. Он значительно сложнее в понимании, чем Remote View. Я бы советовал все-таки сначала заставить работать Remote View, а потом, с полученным опытом, переходить на Cursor Adapter. Т.е. использовать Remote View как инструмент обучения работы с Cursor Adapter.
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371087
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о достал - вредитель

лучше изучить - и затем быстро летать


Cursor Adapter - визуальный класс

разберитесь с понятиями и определениями в фокспро
что такое визуальный, а что нет

ну раз для Вас визуальный. это то, что вы видите на форме,
то тогда для Вас подправлю мысль

КАД - класс, который можно создавать, изменять и наследовать
в Дизайнере классов, хранить в библиотеке визуальных классов
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371128
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371152
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
немного не ту выдержку дал, по-позже на вики
найду -выложу
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371169
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100, вот тут ты заврался ;-)
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371197
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.


подмена понятий

класс, содержащийся в библиотеке виз классов - визуальный

видимый на форме и для отобр-я значений нужно по-другому и именовать
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371427
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100подмена понятий
Да. С этим согласен.

alex11100класс, содержащийся в библиотеке виз классов - визуальный

видимый на форме и для отобр-я значений нужно по-другому и именовать
Только я делаю прямо противоположный вывод. Класс, который может иметь некое визуальное представление в Run-Time - визуальный.

А то, можно ли создать наследника от класса, который, в свою очередь, может быть добавлен в визуальную библиотеку классов, никак не характеризует класс с точки зрения его "визуальности". Это определяет возможность его редактирования визуальными средствами.

Все-таки главным является использование класса (для чего его создали), а не процесс его создания. Поэтому в данном случае, я иду от способа его использования.
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34371582
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ООП предполагает представлять какие-то сущности и атомарные составляющие
в виде объектов.
Основное преимущество ООП - возможность абстрагироваться.

КАД в отличии от РВ прост для понимания и для настройки
с пом. дизайнера классов просто и удобно настраивать свойства.

для автомат.настройка КАД возможно написание своего собственного билдера.

заготовки классы-КАДы могут создаваться автоматически

для хранения КАД достаточно включить vcx-библиотеку в проект
и не заморачиваться с dbc.

привожу пример-построитель КАД Author: Mark E. McCasland
показан пример обвязки базового класса и автомат построения
шаблонов-заготовок
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34372758
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор ВладимирМ
Вы создавали Remote View каким образом? Через дизайнер? Там есть закладка Update Criterias. На ней обязательно должны быть указаны:

-) Ключевое поле - поставить птичку в столбце под иконкой ключа
-) Обновляемые поля - поставить птичку в столбце под иконкой карандаша - это те поля, изменения в которых будут сброшены в исходную таблицу. Автоинкрементное поле помечать как обновляемое - не надо
-) Выставлен флажок "Send SQL Updates"

Судя по описанию, произошла какая-то ошибка при попытке сброса буфера, о чем и свидетельствует сообщение об ошибке о том, что буфер не сброшен. Поэтому нельзя выполнить перезапрос по Requery()



Птички действительно проставлены не были. дело в том, что вьюшки создавались программно. Ну да неважно, я проставила птички - а буфер по-прежнему не сбрасывается...
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34372826
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmbeeПтички действительно проставлены не были. дело в том, что вьюшки создавались программно. Ну да неважно, я проставила птички - а буфер по-прежнему не сбрасывается...
Так какая ошибка-то? Кокое содержимое массива laError после использования функции AERROR()?
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34375593
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TableUpdate возвращает true, а ошибка та же - в строке
=REQUERY("rv_orgroles")
table orgroles contains uncommited changes
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34375721
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это сообщение надо понимать БУКВАЛЬНО! У тебя остались еще в буфере не сброшенные данные.

Дело в том, что функция TableUpdate() без указания параметра сбросит буфер только у одной (текущей) записи. Видимо, ты работаешь в табличной буферизации (5) и изменил более одной записи. Укажи параметр, чтобы сбросить весь буфер

Код: plaintext
1.
2.
3.
4.
5.
6.
select rv_orgroles 
IF TableUpdate(.T.) = .F.
	LOCAL laError( 1 )
	AERROR(laError)
	* Анализ массива laError для уточнения причины ошибки
ENDIF
...
Рейтинг: 0 / 0
как добавить строчку в remote view и посылать на сервер
    #34378564
Ambee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, select rv_orgroles помогло!
Владимир М Видимо, ты работаешь в табличной буферизации (5) и изменил более одной записи. Только я женского пола!!! Ну, наверно,у меня не слишком удачный ник:)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как добавить строчку в remote view и посылать на сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]