powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + SQL поле IDENTITY
25 сообщений из 215, страница 2 из 9
VFP + SQL поле IDENTITY
    #33587184
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды,

вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все...

То что Вы привели код взятый из профайлера, думаю ни кого не удивил, теперь прокоментируйте те команды которые Вы привели и обоснуйте почему во время TableUpdate или во время Requery невозможно добавить запись удовлетворяющую условию отбора или модификации. Некоторые наводки я Вам дал в пердыдущем посте.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33587210
C++FoXORASQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в этом примере я не использовал конструкций типа sqlexec(h,'selekt kjdsfkjsdhf'),
просто обьявил ремоут вью, там и задал все настройки,
далее просто
=tableup
=requer
go bottom
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33587217
C++FoXORASQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды,

вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все...

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

ну почему же нельзя, теоретически можно, но у меня не получалось на практике, с двух машин клацал, команды не перемешивались..
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33587241
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды,

вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все...
Замечательно. Это значит, что когда в FoxPro даются команды:

TableUpdate()
Requery()

то на MS SQL получаем 2 (ДВА) пакета команд

INSERT INTO ...
GO
SELECT * FROM ...
GO

Напоминаю, это НЕ один пакет. Это два РАЗНЫХ пакета. Значит, втиснуться между ними другому пакету вполне под силу.

Cобственно процесс чтения данных в команде SELECT происходит постранично. Это значит, что вполне допустима ситуация, когда команда SELECT читает первую страницу, а в то же самое время другой процесс делает вставку, например, в 10 страницу. После чего, команда SELECT считывает и эти данные. Т.е. происходит вставка в процессе чтения.

Это все к тому, что вставка другим пользоваителем между вставкой первого пользователя и считыванием текущего состояния - вполне реальная возможность, которую просто необходимо учитывать.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33587272
C++FoXORASQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
убедили, возможность реальная, раньше проходило, теперь буду об этом думать..

наверно здесь критично к-во клиентов...

спасибо за приятную беседу, удачи
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33587417
Pavel_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё боится времени

АВТОРЕФРЕШ КУРСОР АДАПТЕРА
ЗАМЕНИТЕ СТРОКУ СОЕДИНЕНИЯ С СЕРВЕРОМ
VFP9SP1

В BROWSE НОВАЯ ЗАПИСЬ ctrl+y

**********************************
*<> Author: a-davand
*<> Description: Demonstrate CursorAdaptor Auto-Refresh capabilities
*<>************************************************************************
CLOSE DATABASES ALL
SQLDISCONNECT(0)
CLEAR
SET MULTILOCKS ON

PUBLIC nAutoRefreshConn AS INTEGER
PUBLIC oca AS CURSORADAPTER
LOCAL lcThisDir AS STRING
lcThisDir = ADDBS(JUSTPATH(SYS(16)))
CD (lcThisDir)

* Change connection string to connect to a different SQL Server
nAutoRefreshConn=SQLSTRINGCONNECT( "DRIVER=SQL Server;SERVER=TIT;Trusted_Connection=Yes;")
IF (nAutoRefreshConn <1)
? "Failed to connect!!!"
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
RETURN
ENDIF

TEXT TO cSQL NOSHOW
CREATE TABLE #CAAutoRefreshDemo
(
f_identity int NOT NULL IDENTITY PRIMARY KEY,
f_int_unique int NOT NULL UNIQUE,
f_varchar varchar(10) NULL DEFAULT '00000',
f_timestamp timestamp
)
ENDTEXT

IF SQLEXEC(nAutoRefreshConn ,cSQL)!=1
? "Failed to create demo table!!!"
AERROR(aerrs)
DISPLAY MEMORY LIKE aerrs
ENDIF

SQLEXEC(nAutoRefreshConn ,"INSERT INTO #CAAutoRefreshDemo (f_int_unique,f_varchar) VALUES (1,'demo1')")
SQLEXEC(nAutoRefreshConn ,"INSERT INTO #CAAutoRefreshDemo (f_int_unique,f_varchar) VALUES (2,'demo1')")
SET PROCEDURE TO (PROGRAM()+".PRG")

* use this code to create the cursor
oca=CREATEOBJECT("CAAutoRefreshDemo")
IF NOT oca.AUTOOPEN()
=AERROR(AERR)
LIST MEMORY LIKE AERR *
ENDIF

BROWSE TITLE ' ' IN screen

SQLEXEC(nAutoRefreshConn ,"INSERT INTO #CAAutoRefreshDemo (f_int_unique,f_varchar) VALUES (3,'demo3')")
BROWSE TITLE ' ' IN screen
read
*CLEAR ALL


DEFINE CLASS CAAutoRefreshDemo AS CURSORADAPTER
ALIAS = "CATest"
DATASOURCE= nAutoRefreshConn
DATASOURCETYPE="ODBC"
MapBinary= .T.
MapVarchar= .T.
SELECTCMD="select * from #CAAutoRefreshDemo"
FETCHMEMO= .T.
TABLES="#CAAutoRefreshDemo"
KEYFIELDLIST="f_identity"
UPDATABLEFIELDLIST="f_int_unique,f_varchar"
UPDATENAMELIST="f_int_unique #CAAutoRefreshDemo.f_int_unique, " + ;
"f_varchar #CAAutoRefreshDemo.f_varchar, " + ;
"f_timestamp #CAAutoRefreshDemo.f_timestamp, " + ;
"f_identity #CAAutoRefreshDemo.f_identity"
TimestampFieldList="f_timestamp"
&& automatically refresh Timestamp field after each Insert/Update
RefreshTimestamp= .T.
&& automatically refresh IDENTITY field and f2 field after Insert
InsertCmdRefreshFieldList="f_identity,f_int_unique"
&& use alternative key to refresh fields after Insert as we don't know
&& the value for f0 (IDENTITY)
InsertCmdRefreshKeyFieldList="f_int_unique"
WHERETYPE=4 && DB_KEYANDTIMESTAMP
ConflictCheckType= 3
ENDDEFINE

.... и только время боится пирамид!
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588020
C++FoXORASQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мнда.. вот это асссс...

может прокоментируете?
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588030
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за обсуждение темы!

Не могу нормально протестировать код Pavel_t, т.к. у меня VFP8. Я смотрю, в девятой версии в курсорадаптере появилось много нового : InsertCmdRefreshKeyFieldList, InsertCmdRefreshFieldList и др.

Кто-нибудь пробовал данный пример? Расскажите! Напомню, что интересовал вопрос о том, как при добавлении новой записи получить значение присвоенного поля Identity без повторной закачки всего курсора.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588613
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример прогнал
в курсоре последний инсерт не отражается

так и висит два первых
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588648
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кстати, команда: oca=CREATEOBJECT("CAAutoRefreshDemo1") в
SQL Profiler выглядит так: select * from #CAAutoRefreshDemo
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588649
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь,
команда oca=CREATEOBJECT("CAAutoRefreshDemo")
конечно..
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588716
Pavel_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FoXXXпример прогнал
в курсоре последний инсерт не отражается

так и висит два первых

SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор
адаптеру как и два первых - Это как добавление другого пользователя
по этому и не отражается в "CATest"
чтобы увидеть все изменения других пользователей
делай =requery([CATest])
если добавлять непосредственно в "CATest"
В Browse ctrl+Y
append или insert в "CATest"




.... и только время боится пирамид!
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588844
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel_t FoXXXпример прогнал
в курсоре последний инсерт не отражается

так и висит два первых

SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор
адаптеру как и два первых - Это как добавление другого пользователя
по этому и не отражается в "CATest"
чтобы увидеть все изменения других пользователей
делай =requery([CATest])
если добавлять непосредственно в "CATest"
В Browse ctrl+Y
append или insert в "CATest"
.... и только время боится пирамид!

темболее ничего не понятно, зачем нужен курсор адаптер?

я досих пор делал так

1. есть база фокс, в которой удаленные вью, соннект ну с соответствующей настройкой

2. в датеенвир формы из этой базы вставляю нужные вью

3. при добавлении записи делаю requery что равносильно select * from на скл

4. использую по умолчанию построчную буферизацию в формах, такж же использую параметричесике запросы

все работает и все хокей, зачем столько огородов городить и такой флуд разводить???
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588851
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и чем впринципе отлтчается remo view от курсорадаптера??

то же самое, что и вью, вью тоже настраивается...
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588916
Pavel_t
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё боится времени

to foxxx
и чем впринципе отлтчается remo view от курсорадаптера??
то же самое, что и вью, вью тоже настраивается...

зря вы так ...
Всё написано в доках в чём и как ....
перечислять времени не хватит

Работаю с Sql2000 так сложилось ну нет базы Vfp нет таблиц vfp
да и не нужны (удобно,надёжно,быстро)
есть только exe и udl
ADO
cursor adapter
ADODB.Command

Вы привыкли по другому ваше право никто не осуждает
был вопрос дали ответ ему решать

Если мы что-то не знаем, то это не значит, что этого нет.

.... и только время боится пирамид!
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33588974
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автори чем впринципе отлтчается remo view от курсорадаптера??


а чем отличается do form
от define window .... ???

вот тем и отличается, что это объект со всеми вытекающими
отсюда прелестями

настроил, поднял и живи спокойно
(да и на основе базового никто не мешает написать свой-поумнее)
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589014
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel_t Всё боится времени

to foxxx
и чем впринципе отлтчается remo view от курсорадаптера??
то же самое, что и вью, вью тоже настраивается...

зря вы так ...
Всё написано в доках в чём и как ....
перечислять времени не хватит

Работаю с Sql2000 так сложилось ну нет базы Vfp нет таблиц vfp
да и не нужны (удобно,надёжно,быстро)
есть только exe и udl
ADO
cursor adapter
ADODB.Command

Вы привыкли по другому ваше право никто не осуждает
был вопрос дали ответ ему решать

Если мы что-то не знаем, то это не значит, что этого нет.

.... и только время боится пирамид!

у меня тоже нет таблиц vfp..
база есть, это удобно, в ней все настройки коннект и т.д

прога тоже exe

просто при инсталяции создается папка а в ней exe и база (без таблиц)

это не мешает

я не пытаюсь унизить ваш подход, мне интересны преимущества,
проанализировав то что происходит в sql2000 при работе в курсорадаптере ,не нашел никаких отличий в плане преимуществ при вычислении id

если вы их знаете то озвучте, для того и идет этот разговор, форум вроде для того чтобы делиться своими достижениями в фоксе? или я заблуждаюсь?
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589030
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Pavel_t FoXXXпример прогнал
в курсоре последний инсерт не отражается

так и висит два первых

SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор
адаптеру как и два первых - Это как добавление другого пользователя
по этому и не отражается в "CATest"
чтобы увидеть все изменения других пользователей
делай =requery([CATest])
если добавлять непосредственно в "CATest"
В Browse ctrl+Y
append или insert в "CATest"
.... и только время боится пирамид!

почему добавление другого пользователя если используется один номер коннекта? т.е. и инсерт и курсорад используют один коннект..
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589032
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lnId = this.oCura.getId()

есть преимущество??

this.oCura.Update()

this.oCura.DataRefresh()

this.oCura.DataFill()

есть преимущество??

this.oCura.Revert()

this.oCura.ЧегоНибудь()
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589119
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100lnId = this.oCura.getId()

есть преимущество??

this.oCura.Update()

this.oCura.DataRefresh()

this.oCura.DataFill()

есть преимущество??

this.oCura.Revert()

this.oCura.ЧегоНибудь()

не нашел этих свойств в хелпе по курсорадаптере..

и подозреваю что datarefresh() работает как рекьюри:
select * from
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589137
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и не найдете

на основе базового класса
можно породить свой курсорадаптер и
научить его всем премудростям
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589167
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100и не найдете

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

здесь долгий спор шел, о том, что происходит на скл в момент вставки и получения значения id, т.е. сможет ли в этот момент вставиться другая запись, курсорадаптер позволит другому клиенту вставиться? он ведь впринципе на скл выполняется как инсерт и селект.. значит вставиться можно..
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589232
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сложно Вас понять

чего Вы желаете
проблему получить или решить ее по-простому и без лишних проблем
вот

в моем случае новую запись в курсорадаптере я вижу
своим способом

а вот то, что с ней станет на сервере и какой у нее станет ID
я могу увидеть только после апдейта

и это логично и нормально
я ведь не провидец и не пророк
я и предполагаю сразу, что какой будет ID у новой записи никогда не смогу
в момент добавления ее на стороне фокса
и что ??
у нашего курсорадаптера сразу есть каскады, в которые я добавляю запси
с таким же хитрым ID как на стороне фокса
и уже весь пакован апдейтим на стороне сервера

и чего ?? делов та
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589801
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoXXX

я досих пор делал так

...
...

3. при добавлении записи делаю requery что равносильно select * from на скл


Тянуть всю таблицу можно только в НЕБОЛЬШИХ проектах.
В принципе, НЕТ необходимости после добавления строки тянуть таблицу назад в фокс. Я делаю так (без Identity): вычисляю значение уникального поля, прописываю в фоксе в соотв. поле курсора и делаю TableUpdate(). В фоксе у меyя строка есть. На SQL Server`е после TableUpdate() у тоже строка появилась. Зачем тянуть?
Здесь, конечно начинаются извращения, чтобы с момента вычисления уникального поля и TableUpdate() не всунулся со своим инсертом другой юзер. Тут можно много нагородить и решить эту проблему, но я так понял, что "Большой Брат" для этого и придумал Identity.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33589850
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: Pavel_t:

Судя по этому куску кода в конце примера (проверить не могу, у меня VFP8):
Код: plaintext
1.
2.
3.
4.
5.
&& automatically refresh IDENTITY field and f2 field after Insert
InsertCmdRefreshFieldList="f_identity,f_int_unique"
&& use alternative key to refresh fields after Insert as we don't know
&& the value for f0 (IDENTITY)
InsertCmdRefreshKeyFieldList="f_int_unique"
все должно работать и поле Identity после инсерта в фоксе само обновляется. Прошу подтвердить это для Фомы неверующего. Тогда можно будет более аргументированно ставить вопрос о приобретении 9 версии. Заранее спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 215, страница 2 из 9
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + SQL поле IDENTITY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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