|
|
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды, вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все... То что Вы привели код взятый из профайлера, думаю ни кого не удивил, теперь прокоментируйте те команды которые Вы привели и обоснуйте почему во время TableUpdate или во время Requery невозможно добавить запись удовлетворяющую условию отбора или модификации. Некоторые наводки я Вам дал в пердыдущем посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:47 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
в этом примере я не использовал конструкций типа sqlexec(h,'selekt kjdsfkjsdhf'), просто обьявил ремоут вью, там и задал все настройки, далее просто =tableup =requer go bottom ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 15:58 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
PaulWist C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды, вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все... То что Вы привели код взятый из профайлера, думаю ни кого не удивил, теперь прокоментируйте те команды которые Вы привели и обоснуйте почему во время TableUpdate или во время Requery невозможно добавить запись удовлетворяющую условию отбора или модификации. Некоторые наводки я Вам дал в пердыдущем посте. ну почему же нельзя, теоретически можно, но у меня не получалось на практике, с двух машин клацал, команды не перемешивались.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:01 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
C++FoXORASQLя нихочу коментариев, это я вам показал что происходит в сервере когда я работаю в клиенте фокса и использую вышеобозначенные команды, вопрос был что там происходит, я дал ответ: происходит это и привел пример, вот и все... Замечательно. Это значит, что когда в FoxPro даются команды: TableUpdate() Requery() то на MS SQL получаем 2 (ДВА) пакета команд INSERT INTO ... GO SELECT * FROM ... GO Напоминаю, это НЕ один пакет. Это два РАЗНЫХ пакета. Значит, втиснуться между ними другому пакету вполне под силу. Cобственно процесс чтения данных в команде SELECT происходит постранично. Это значит, что вполне допустима ситуация, когда команда SELECT читает первую страницу, а в то же самое время другой процесс делает вставку, например, в 10 страницу. После чего, команда SELECT считывает и эти данные. Т.е. происходит вставка в процессе чтения. Это все к тому, что вставка другим пользоваителем между вставкой первого пользователя и считыванием текущего состояния - вполне реальная возможность, которую просто необходимо учитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:10 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
убедили, возможность реальная, раньше проходило, теперь буду об этом думать.. наверно здесь критично к-во клиентов... спасибо за приятную беседу, удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 16:22 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всё боится времени АВТОРЕФРЕШ КУРСОР АДАПТЕРА ЗАМЕНИТЕ СТРОКУ СОЕДИНЕНИЯ С СЕРВЕРОМ 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 .... и только время боится пирамид! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2006, 17:16 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
мнда.. вот это асссс... может прокоментируете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 11:39 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всем спасибо за обсуждение темы! Не могу нормально протестировать код Pavel_t, т.к. у меня VFP8. Я смотрю, в девятой версии в курсорадаптере появилось много нового : InsertCmdRefreshKeyFieldList, InsertCmdRefreshFieldList и др. Кто-нибудь пробовал данный пример? Расскажите! Напомню, что интересовал вопрос о том, как при добавлении новой записи получить значение присвоенного поля Identity без повторной закачки всего курсора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2006, 11:59 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
пример прогнал в курсоре последний инсерт не отражается так и висит два первых ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 06:41 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
кстати, команда: oca=CREATEOBJECT("CAAutoRefreshDemo1") в SQL Profiler выглядит так: select * from #CAAutoRefreshDemo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 07:45 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
извиняюсь, команда oca=CREATEOBJECT("CAAutoRefreshDemo") конечно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 07:47 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXпример прогнал в курсоре последний инсерт не отражается так и висит два первых SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор адаптеру как и два первых - Это как добавление другого пользователя по этому и не отражается в "CATest" чтобы увидеть все изменения других пользователей делай =requery([CATest]) если добавлять непосредственно в "CATest" В Browse ctrl+Y append или insert в "CATest" .... и только время боится пирамид! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 09:21 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Pavel_t FoXXXпример прогнал в курсоре последний инсерт не отражается так и висит два первых SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор адаптеру как и два первых - Это как добавление другого пользователя по этому и не отражается в "CATest" чтобы увидеть все изменения других пользователей делай =requery([CATest]) если добавлять непосредственно в "CATest" В Browse ctrl+Y append или insert в "CATest" .... и только время боится пирамид! темболее ничего не понятно, зачем нужен курсор адаптер? я досих пор делал так 1. есть база фокс, в которой удаленные вью, соннект ну с соответствующей настройкой 2. в датеенвир формы из этой базы вставляю нужные вью 3. при добавлении записи делаю requery что равносильно select * from на скл 4. использую по умолчанию построчную буферизацию в формах, такж же использую параметричесике запросы все работает и все хокей, зачем столько огородов городить и такой флуд разводить??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 10:22 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
и чем впринципе отлтчается remo view от курсорадаптера?? то же самое, что и вью, вью тоже настраивается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 10:25 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всё боится времени to foxxx и чем впринципе отлтчается remo view от курсорадаптера?? то же самое, что и вью, вью тоже настраивается... зря вы так ... Всё написано в доках в чём и как .... перечислять времени не хватит Работаю с Sql2000 так сложилось ну нет базы Vfp нет таблиц vfp да и не нужны (удобно,надёжно,быстро) есть только exe и udl ADO cursor adapter ADODB.Command Вы привыкли по другому ваше право никто не осуждает был вопрос дали ответ ему решать Если мы что-то не знаем, то это не значит, что этого нет. .... и только время боится пирамид! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 10:45 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
автори чем впринципе отлтчается remo view от курсорадаптера?? а чем отличается do form от define window .... ??? вот тем и отличается, что это объект со всеми вытекающими отсюда прелестями настроил, поднял и живи спокойно (да и на основе базового никто не мешает написать свой-поумнее) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:03 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Pavel_t Всё боится времени to foxxx и чем впринципе отлтчается remo view от курсорадаптера?? то же самое, что и вью, вью тоже настраивается... зря вы так ... Всё написано в доках в чём и как .... перечислять времени не хватит Работаю с Sql2000 так сложилось ну нет базы Vfp нет таблиц vfp да и не нужны (удобно,надёжно,быстро) есть только exe и udl ADO cursor adapter ADODB.Command Вы привыкли по другому ваше право никто не осуждает был вопрос дали ответ ему решать Если мы что-то не знаем, то это не значит, что этого нет. .... и только время боится пирамид! у меня тоже нет таблиц vfp.. база есть, это удобно, в ней все настройки коннект и т.д прога тоже exe просто при инсталяции создается папка а в ней exe и база (без таблиц) это не мешает я не пытаюсь унизить ваш подход, мне интересны преимущества, проанализировав то что происходит в sql2000 при работе в курсорадаптере ,не нашел никаких отличий в плане преимуществ при вычислении id если вы их знаете то озвучте, для того и идет этот разговор, форум вроде для того чтобы делиться своими достижениями в фоксе? или я заблуждаюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:12 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Pavel_t FoXXXпример прогнал в курсоре последний инсерт не отражается так и висит два первых SQLEXEC(nAutoRefreshConn ..... это внешняя команда по отношению к курсор адаптеру как и два первых - Это как добавление другого пользователя по этому и не отражается в "CATest" чтобы увидеть все изменения других пользователей делай =requery([CATest]) если добавлять непосредственно в "CATest" В Browse ctrl+Y append или insert в "CATest" .... и только время боится пирамид! почему добавление другого пользователя если используется один номер коннекта? т.е. и инсерт и курсорад используют один коннект.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:16 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
lnId = this.oCura.getId() есть преимущество?? this.oCura.Update() this.oCura.DataRefresh() this.oCura.DataFill() есть преимущество?? this.oCura.Revert() this.oCura.ЧегоНибудь() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:17 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
alex11100lnId = this.oCura.getId() есть преимущество?? this.oCura.Update() this.oCura.DataRefresh() this.oCura.DataFill() есть преимущество?? this.oCura.Revert() this.oCura.ЧегоНибудь() не нашел этих свойств в хелпе по курсорадаптере.. и подозреваю что datarefresh() работает как рекьюри: select * from ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:38 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
и не найдете на основе базового класса можно породить свой курсорадаптер и научить его всем премудростям ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:42 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
alex11100и не найдете на основе базового класса можно породить свой курсорадаптер и научить его всем премудростям здесь долгий спор шел, о том, что происходит на скл в момент вставки и получения значения id, т.е. сможет ли в этот момент вставиться другая запись, курсорадаптер позволит другому клиенту вставиться? он ведь впринципе на скл выполняется как инсерт и селект.. значит вставиться можно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 11:49 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
сложно Вас понять чего Вы желаете проблему получить или решить ее по-простому и без лишних проблем вот в моем случае новую запись в курсорадаптере я вижу своим способом а вот то, что с ней станет на сервере и какой у нее станет ID я могу увидеть только после апдейта и это логично и нормально я ведь не провидец и не пророк я и предполагаю сразу, что какой будет ID у новой записи никогда не смогу в момент добавления ее на стороне фокса и что ?? у нашего курсорадаптера сразу есть каскады, в которые я добавляю запси с таким же хитрым ID как на стороне фокса и уже весь пакован апдейтим на стороне сервера и чего ?? делов та ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 12:03 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX я досих пор делал так ... ... 3. при добавлении записи делаю requery что равносильно select * from на скл Тянуть всю таблицу можно только в НЕБОЛЬШИХ проектах. В принципе, НЕТ необходимости после добавления строки тянуть таблицу назад в фокс. Я делаю так (без Identity): вычисляю значение уникального поля, прописываю в фоксе в соотв. поле курсора и делаю TableUpdate(). В фоксе у меyя строка есть. На SQL Server`е после TableUpdate() у тоже строка появилась. Зачем тянуть? Здесь, конечно начинаются извращения, чтобы с момента вычисления уникального поля и TableUpdate() не всунулся со своим инсертом другой юзер. Тут можно много нагородить и решить эту проблему, но я так понял, что "Большой Брат" для этого и придумал Identity. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 13:50 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
To: Pavel_t: Судя по этому куску кода в конце примера (проверить не могу, у меня VFP8): Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2006, 14:02 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33589032&tid=1592046]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 562ms |

| 0 / 0 |
