|
|
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Спасибо, C++FoXORASQL ! Значит, стоит на 9 версию переходить. Всем спасибо! Что хотел - выяснил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2006, 16:45 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всё боится времени тотже пример почти, но через адо и без уникального поля создайте REMout_.udl В директории запуска Поставщик данных MS ole db provider for sql server .... и только время боится пирамид! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2006, 16:58 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
по первому примеру, проследил что там происходит в SQL, выяснил, что при вставке и запрпосе информации SQL ориентируется на уникальное поле. и еще, CAD похож на вью, таким образом CAD тянет все записи на клиента? точнее все ваши записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2006, 17:46 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Hi FoXXX! PaulWist даёт дельный совет! >> Ещё раз REQUERY() - GO BOTTOM в ОБЩЕМ случае не дадут требуемый результат >> последней тобой добавленной записи, если сейчас не можешь этого понять, >> то прими на веру - это в дальнейшем избавит от множества ошибок. > собственно не ставил целью навязать свое решение, у меня этот метод > работает, думаю и дальше будет работать Это похоже на заявления гражданина любящего ходить через улицу на красный свет - "вот я хожу, пять лет уже хожу и ничего - никому конечно не навязываю, но зачем ждать зелёного если и так всё хорошо" > вью конечно по ключу Т.е. всегда установлен ORDER BY Id - мягко говоря это НЕтипичное решение - упорядочивают выборку обычно по более значимому параметру нежели ID (и опосредовано через ID - время создания записи). Конечно часто упорядочение делают уже на клиенте (временные индексы) - НО и тогда эта схема точно разрушается. Кроме того ДОПОЛНИТЕЛЬНО всегда в запросы добавлять Order by Id (т.е. когда он реально нам совсем не нужен) - это намеренно снижать производительность сервера (пусть и не существенно, т.к. объём выборки я надеюсь не велик, но всё же это надо учитывать). И дополнительно исходя из целой кучи предположений: - что нагрузка на базу мизерная и событие одновременной вставки записи двумя (или более) пользователями крайне маловероятно (давай уж тогда честно признавайся, что у тебя обычно один пользователь и работает в базе на вводе данных). - что вновь добавляемая запись ВСЕГДА удовлетворяет тем условиям с которыми выполняется перезапрос - для этого видимо надо ВООБЩЕ исключить те поля по кторым идёт параметризация из того набора, что может редактировать пользователь - т.е. у тебя "параметризуются" какие-то служебные, автозаполняемые поля, а вовсе не реальные поля данных. Т.е. общности твоё решение не имеет (слишком много всяких "если" и "но") - о чём собственно и было сказано. > на мой взгляд две команды - лучше нескольких строк типа На мой взгляд писать надо прежде всего ПРАВИЛЬНО - а уж потом из правильных вариантов и выбирать какой будет "короче", или какой "быстрее работает"... Сравнивать же правильный вариант с неправильным - по меньшей мере глупо. > я все-таки предпочитаю факты, Для этого достаточно просто ПРОЧИТАТЬ то что я написал, и пошагово выполнить - ничего более. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 03:37 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всем привет! 1. про view, ну конечно тащить на клиента всю таблицу смысла нет, поэтому: ограничение №1 (параметр1) - признак клиента, каждая таблица должна иметь этот признак(поле), это нужно для того чтобы: всегда сказать что эту запись(проводку) занес мистер пупкин.. откуда он берется? при регистрации в программе пупкин получает свой код, это не привязано к рабочему месту, пупкин может работать с любой машины. ограничение №2(параметр2) - временной период, разумеется необходим, запись введена сегодня -> она получает сегодняшнюю дату, прошу не путать занесение новой записи и работу состарыми записями(редактирование). Вопрос был как получить id новой записи, не так ли? ограничение №3(параметр3) - могут быть другие параметры, зависит от типа задачи.. 2.было предложенно что-то типа: sqlexec(cn,'insert into ... ;SELECT SCOPE_IDENTITY() as SCOPE_IDENTITY',crsr) но перед этим необходимо получить cn, значит sqlconnect(connect) потом sqldisconnect(cn) ну и масса других лишних обращений к серверу.. в моем случае все проще, requery - это: sqlexec(cn,'insert into ... ;SELECT SCOPE_IDENTITY() as SCOPE_IDENTITY',crsr) выполненое пакетом на сервере. 3. /*Конечно часто упорядочение делают уже на клиенте (временные индексы) - НО и тогда эта схема точно разрушается.*/ вот этим никогда не пользуюсь, есть плохой опыт.. 4./*- что нагрузка на базу мизерная и событие одновременной вставки записи двумя (или более) пользователями крайне маловероятно (давай уж тогда честно признавайся, что у тебя обычно один пользователь и работает в базе на вводе данных).*/ - нет, не признаемся :-), работает столько сколько нужно, не заморачиваюсь на этом и не делаю клиентам ограничений.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 08:29 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Aleksey-KВ дополнении к замечаниям PaulWist и ВладимирМ для FoXXX: А если нет кластерного индекса, данные лежат в HEAP - куче, т.е. страницы по 8 кб, связанные ТОЛЬКО через специальные страницы IAM (Index Allocation Map). Это означает, что при операции вставки, удалении и тем более при SHRINK (при сжатии базы данных) может происходить ФИЗИЧЕСКОЕ перемещение записей внутри страницы, что приводит к ДРУГОМУ порядку расположения и ИЗВЛЕЧЕНИЯ данных сервером с диска в кэш, ну и затем клиенту. С уважением, Алексей ну чтож, проведем эксперимент: создадим простенький view: SELECT Proba.id, Proba.time, Proba.kod; FROM ; dbo.proba Proba DBSetProp(ThisView,"View","SendUpdates",.F.) DBSetProp(ThisView,"View","BatchUpdateCount",1) DBSetProp(ThisView,"View","CompareMemo",.T.) DBSetProp(ThisView,"View","FetchAsNeeded",.F.) DBSetProp(ThisView,"View","FetchMemo",.T.) DBSetProp(ThisView,"View","FetchSize",-1) DBSetProp(ThisView,"View","MaxRecords",-1) DBSetProp(ThisView,"View","Prepared",.F.) DBSetProp(ThisView,"View","ShareConnection",.F.) DBSetProp(ThisView,"View","AllowSimultaneousFetch",.F.) DBSetProp(ThisView,"View","UpdateType",1) DBSetProp(ThisView,"View","UseMemoSize",255) DBSetProp(ThisView,"View","WhereType",1) DBSetProp(ThisView+".id","Field","DataType","I") DBSetProp(ThisView+".id","Field","UpdateName","dbo.proba.id") DBSetProp(ThisView+".id","Field","KeyField",.F.) DBSetProp(ThisView+".id","Field","Updatable",.F.) DBSetProp(ThisView+".time","Field","DataType","T") DBSetProp(ThisView+".time","Field","UpdateName","dbo.proba.time") DBSetProp(ThisView+".time","Field","KeyField",.F.) DBSetProp(ThisView+".time","Field","Updatable",.F.) DBSetProp(ThisView+".kod","Field","DataType","I") DBSetProp(ThisView+".kod","Field","UpdateName","dbo.proba.kod") DBSetProp(ThisView+".kod","Field","KeyField",.F.) DBSetProp(ThisView+".kod","Field","Updatable",.F.) далее прогоним код: USE proba IN 0 SELECT proba FOR i=0 TO 1000 APPEND BLANK REPLACE time WITH datetime(), kod WITH 1 ENDFOR =TABLEUPDATE() FOR i=0 TO 1000 APPEND BLANK replace time WITH dateTIME(),kod WITH 2 ENDFOR =TABLEUPDATE() посмотрим что в таблице: все лежит по-порядочку и по времени и по дате, далее, зайдем в SQL Server Enterpris, глянем на табличку SELECT *FROM proba - все по порядочку, далее сделаем shrink ,смотрим - все попорядочку... открываем вью, все упорядочено.. чтобы нам еще сделать такое, чтобы нарушить порядок записей???? думаем... не выходит, но ведь это КУЧА!!! просто КУЧА!! не так ли? интересно в этой куче поля не перемешиваются??? а буквы в словах?? страшное слово КУЧА!!! вспомним файловую систему, как лежат байты в секторах и кластерах??? и понимаем, что любой файл есть не куча- а структура, т.е. информация структурирована, иначе это не файл а куча дйствительно... можно ли вставить запись внутрь файла? можно, но нужно пол файла переписать, так зачем это делать, ресурсов много?? потому новая запись в конец структуры, и нет никакой кучи, работает быстро, и байты не перемешиваются... да, а как же /*специальные страницы IAM (Index Allocation Map). */??? ну здесь не мешало бы вспомнить принцып работы контроллера жесткого диска, выделение памяти... итак память выделена(создан буфер), далее головка контроллера двигается к кластеру №х и... чик, буфер полон, выделяем следующий буфер.. и чик, буфер полон, вот они страницы IAM.... и т.д. А допустимо ли перемешивание информации????? ДА!!! Допустимо!!! Если у разработчиков системы в голове КУЧА!!! Если нет.. то не допустимо... возможно.. возможно вы ребята правы... возможно это и правда куча байтов и бит.. но это уверяю вас не очевидно по логике вещей... так что Алексей, ПаУль и ВладимирМ ... ваши представления нуждаются в корректировке... или не так? Да, а если взглянуть на поднятый атором топика вопрос, важно ли это (куча)? Не важно, потому что записи упорядочены по id, view имеет order, так зачем было нужно поднимать этот вопрос ??? Работайте так как привыкли, но это не значит что ваш метод единственно верный.. возможны и другие подходы, для вас не стандартные.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 09:10 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Aleksey-KВ дополнении к замечаниям PaulWist и ВладимирМ для FoXXX: А если нет кластерного индекса, данные лежат в HEAP - куче, т.е. страницы по 8 кб, связанные ТОЛЬКО через специальные страницы IAM (Index Allocation Map). Это означает, что при операции вставки, удалении и тем более при SHRINK (при сжатии базы данных) может происходить ФИЗИЧЕСКОЕ перемещение записей внутри страницы, что приводит к ДРУГОМУ порядку расположения и ИЗВЛЕЧЕНИЯ данных сервером с диска в кэш, ну и затем клиенту. С уважением, Алексей ну чтож, проведем эксперимент: создадим простенький view: SELECT Proba.id, Proba.time, Proba.kod; FROM ; dbo.proba Proba DBSetProp(ThisView,"View","SendUpdates",.F.) DBSetProp(ThisView,"View","BatchUpdateCount",1) DBSetProp(ThisView,"View","CompareMemo",.T.) DBSetProp(ThisView,"View","FetchAsNeeded",.F.) DBSetProp(ThisView,"View","FetchMemo",.T.) DBSetProp(ThisView,"View","FetchSize",-1) DBSetProp(ThisView,"View","MaxRecords",-1) DBSetProp(ThisView,"View","Prepared",.F.) DBSetProp(ThisView,"View","ShareConnection",.F.) DBSetProp(ThisView,"View","AllowSimultaneousFetch",.F.) DBSetProp(ThisView,"View","UpdateType",1) DBSetProp(ThisView,"View","UseMemoSize",255) DBSetProp(ThisView,"View","WhereType",1) DBSetProp(ThisView+".id","Field","DataType","I") DBSetProp(ThisView+".id","Field","UpdateName","dbo.proba.id") DBSetProp(ThisView+".id","Field","KeyField",.F.) DBSetProp(ThisView+".id","Field","Updatable",.F.) DBSetProp(ThisView+".time","Field","DataType","T") DBSetProp(ThisView+".time","Field","UpdateName","dbo.proba.time") DBSetProp(ThisView+".time","Field","KeyField",.F.) DBSetProp(ThisView+".time","Field","Updatable",.F.) DBSetProp(ThisView+".kod","Field","DataType","I") DBSetProp(ThisView+".kod","Field","UpdateName","dbo.proba.kod") DBSetProp(ThisView+".kod","Field","KeyField",.F.) DBSetProp(ThisView+".kod","Field","Updatable",.F.) далее прогоним код: USE proba IN 0 SELECT proba FOR i=0 TO 1000 APPEND BLANK REPLACE time WITH datetime(), kod WITH 1 ENDFOR =TABLEUPDATE() FOR i=0 TO 1000 APPEND BLANK replace time WITH dateTIME(),kod WITH 2 ENDFOR =TABLEUPDATE() посмотрим что в таблице: все лежит по-порядочку и по времени и по дате, далее, зайдем в SQL Server Enterpris, глянем на табличку SELECT *FROM proba - все по порядочку, далее сделаем shrink ,смотрим - все попорядочку... открываем вью, все упорядочено.. чтобы нам еще сделать такое, чтобы нарушить порядок записей???? думаем... не выходит, но ведь это КУЧА!!! просто КУЧА!! не так ли? интересно в этой куче поля не перемешиваются??? а буквы в словах?? страшное слово КУЧА!!! вспомним файловую систему, как лежат байты в секторах и кластерах??? и понимаем, что любой файл есть не куча- а структура, т.е. информация структурирована, иначе это не файл а куча дйствительно... можно ли вставить запись внутрь файла? можно, но нужно пол файла переписать, так зачем это делать, ресурсов много?? потому новая запись в конец структуры, и нет никакой кучи, работает быстро, и байты не перемешиваются... да, а как же /*специальные страницы IAM (Index Allocation Map). */??? ну здесь не мешало бы вспомнить принцып работы контроллера жесткого диска, выделение памяти... итак память выделена(создан буфер), далее головка контроллера двигается к кластеру №х и... чик, буфер полон, выделяем следующий буфер.. и чик, буфер полон, вот они страницы IAM.... и т.д. А допустимо ли перемешивание информации????? ДА!!! Допустимо!!! Если у разработчиков системы в голове КУЧА!!! Если нет.. то не допустимо... возможно.. возможно вы ребята правы... возможно это и правда куча байтов и бит.. но это уверяю вас не очевидно по логике вещей... так что Алексей, ПаУль и ВладимирМ ... ваши представления нуждаются в корректировке... или не так? Да, а если взглянуть на поднятый атором топика вопрос, важно ли это (куча)? Не важно, потому что записи упорядочены по id, view имеет order, так зачем было нужно поднимать этот вопрос ??? Работайте так как привыкли, но это не значит что ваш метод единственно верный.. возможны и другие подходы, для вас не стандартные.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 09:16 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Да.. батенька... это у вас в голове куча. Вы для начала почитайте BOL о структуре хранения данных MS SQL Server 2000 (хотя и SQL 7.0 годится). Heap в понятии SQL Server это набор СТРАНИЦ данных, а не байт! Да, внутри страницы данные могут при операциях перемещаться ФИЗИЧЕСКИ, но это всего-навсего 8192 байта (1 страница = 8КБ). А сами страницы данных (и индексов) связаны ТОЛЬКО через IAM и, разумеется, ни куда не перемещается физически (кроме операций типа DBCC SHRINKDATABASE и пр.). А для того, чтобы увидеть изменения в порядки извлечения данных из таблицы в вашем примере надо заставить сервер этот порядок поменять физически, например: Постройте кластерный индекс, скажем, по полю time DESC или, что лучше и нагляднее: добавьте поле типа VARCHAR(1000) DEFAULT '' и попробуйте заполнять это поле данными под завязку в разных строках (а не у всех и все одинаково), а потом смотрите в каком порядке будет сервер извлекать данные по сравнению с первоначальным. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 09:52 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Sorry for double message, my internet connection is fucking bad... Hi, Igor Korolev! Even if our names are same, I have my own opinion. And I think I have this right. Greetings to sunny Belarus! I was in Mogelev region in July 2005, visiting my relatives. I'd liked it. It is exelent in culture. Streats are clean, greenhedges and bushes are cutted. I wish you success in learning personal computer... 8<-------------------------------------------------------------------------- Bonjour, Igor! Je m'appele Igor et tu es appeles Igor aussi. Mes Je voudrais parler tu mon opinion n'est pas pareil et j'ai un vraiment. Je desire tu succes a l'etude de computer personal. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 10:18 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Aleksey-KДа.. батенька... это у вас в голове куча. Вы для начала почитайте BOL о структуре хранения данных MS SQL Server 2000 (хотя и SQL 7.0 годится). Heap в понятии SQL Server это набор СТРАНИЦ данных, а не байт! Да, внутри страницы данные могут при операциях перемещаться ФИЗИЧЕСКИ, но это всего-навсего 8192 байта (1 страница = 8КБ). А сами страницы данных (и индексов) связаны ТОЛЬКО через IAM и, разумеется, ни куда не перемещается физически (кроме операций типа DBCC SHRINKDATABASE и пр.). А для того, чтобы увидеть изменения в порядки извлечения данных из таблицы в вашем примере надо заставить сервер этот порядок поменять физически, например: Постройте кластерный индекс, скажем, по полю time DESC или, что лучше и нагляднее: добавьте поле типа VARCHAR(1000) DEFAULT '' и попробуйте заполнять это поле данными под завязку в разных строках (а не у всех и все одинаково), а потом смотрите в каком порядке будет сервер извлекать данные по сравнению с первоначальным. С уважением, Алексей поменять физически... мнда... физичесики поменять можно.. получается SQL производит не индексацию таблицы, не построение индексного ключа, а осуществляет сортировку... т.е. физическую сортироку записей... но ведь это откат, может это и оправданно, но.. мы от этого в DBF отказались давно.. если в SQL действительно используется метод сортировки (физического упорядочения записей), то порядок следования записей действительно изменится.. с другой стороны, а зачем нам все это нужно??? мы ведь просто хотим видеть id сразу после вставки новой записи, к чему лезть в дебри?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 13:16 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX с другой стороны, а зачем нам все это нужно??? мы ведь просто хотим видеть id сразу после вставки новой записи, к чему лезть в дебри?? Точно.. не будет лезть в дебри, но для общего образования вы все-таки загляните в BOL на предмет разницы между кластерным и не кластерным индексами. И не кому не говорите,что: FoXXX .. получается SQL производит не индексацию таблицы, не построение индексного ключа, а осуществляет сортировку... т.е. физическую сортироку записей... но ведь это откат, может это и оправданно, но.. мы от этого в DBF отказались давно.. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 13:32 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Залезть в BOL оно конечно можно, но чесслово - лень.. ну не в этом суть.. пример вам я прогнал, впринципе порядок соблюдается, зачем копать MSSQL если используется кей по id? он используется везде по умолчанию, на мой взгляд это логично, нужен другой порядок -пжалуста ORDER.. в select.. /*И не кому не говорите,что:*/ - я не говорю, а скорее, рассуждаю о принципах организации базы данных, так сказать отвлеченно, ничего конкретно при этом не утверждая, потому и не ссылаюсь на BOL.. если возникнет конкретный вопрос о дебрях базы - будем разбираться предметно, думаю не мало накопаю интересного, но в данный момент это будет уход от темы.. др. словами флуд.. вот если бы вы раскрыли мне почему перезапрос не приемлем в данном случае, я был бы вам благодарен, но ничего конкретного небыло сказано ни игорем ни вами, так - общие слова: так не пишем, так не программируем.. вся критика свелась к промежутку tableupd() и requery(), ну убрал я, как в самом начале сказал, tableupd(), оставил requery(), и что? шквал критики не прекратился - усилися но не по существу к сожалению.. в ваших рядах убыло сегодня, однако, суббота, вы по выходным трудитесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 14:15 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Да.., приходится и по выходным работать, но из дома. А насчет вашего вопроса, то я в своих разработках при работе с SQL Server НЕ использую технологию RemoteView (RV) и CursorAdapter (CA) - только pass-through (PH). Почему - я подробно рассмотрел на своем сайте (http://www.caws.atnet.ru/vfox/sql.html). Вот если бы вы тоже использовали PH, то я бы мог вам чем-нибудь помочь, наверное, а в RV и CA я не силен, извините. С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 14:42 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
вашим сайт иногда, по мере необходимости использую, спасибо. С уважением FoXXX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 16:09 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXвашим сайт иногда, по мере необходимости использую, спасибо. С уважением FoXXX. извиняюсь, очепятка, ваш сайт разумеется.. С уважением FoXXX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 16:11 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX Здесь я вычеркнул массу слов, которые обычно заменяются звуковым сигналом или многоточием. Прочтите, пожалуйста вот эту статью с данного сайта. Она на русском языке. http://www.sql.ru/articles/mssql/03013101Indexes.shtml Там в самом начале показывается как физически хранятся данные в MS SQL. Если Вы считаете, что ВСЕ отвечавшие Вам заблуждаются, то задайте свой вопрос в форуме по MS SQL на этом же сайте. Ведь Ваш вопрос не имеет к FoxPro никакого отношения. Это именно вопрос способа хранения в MS SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 19:56 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
ВладимирМ FoXXX Здесь я вычеркнул массу слов, которые обычно заменяются звуковым сигналом или многоточием. Прочтите, пожалуйста вот эту статью с данного сайта. Она на русском языке. http://www.sql.ru/articles/mssql/03013101Indexes.shtml Там в самом начале показывается как физически хранятся данные в MS SQL. Если Вы считаете, что ВСЕ отвечавшие Вам заблуждаются, то задайте свой вопрос в форуме по MS SQL на этом же сайте. Ведь Ваш вопрос не имеет к FoxPro никакого отношения. Это именно вопрос способа хранения в MS SQL. отвечаю вам то же самое.. я не заблуждаюсь, точнее сказать я не разбирался с этим вопросом предметно, поэтому все мои высказывания лишь рассуждения и предположения, о чем я уже говорил.. пример работает, но это не факт что он будет работать в любом случае, возможно при определенной ситуации он работать не будет.. и что вы так нервничаете? к чему все эти многоточия?? еще раз напоминаю вам что тема топика другая, вопрос не в способе хранения данных в SQL, вопрос в получении id. Кстати вопрос по хранению данных на SQL я не поднимал, это скорее ваш вопрос (или ваших единомышленников) лень перечитывать всю дискуссию.. Именно не я начал обсуждение: как же хранятся данные на SQL, я лишь предложил использовать requery() и не более того, но как видно вас раздражает любое мнение отличное от вашего, мне жаль, что вам хочется чередовать свою речь многоточиями.. чесслово не хотел лично вас обидеть, да и вообще никого не хотел обижать. Если говорить о хранени я лишь высказал общие принципы хранения данных (любых) в файловой системе DOS или Windows, помоему ничего крамольного? если я упомянул о последней записи, то говорил скорее о VFP, т.к. в нем я применяю те же методы обновления информации как и в SQL, что удобно, т.к. иногда мои системы работают без SQL с таблицами VFP. Практически без изменений в коде моя система может быть развернута и в SQL и в VFP.. достаточно в базе сформировать (подключить) таблицы или RV с совпадающими названиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 20:52 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX …еще раз напоминаю вам что тема топика другая, вопрос не в способе хранения данных в SQL, вопрос в получении id. Кстати вопрос по хранению данных на SQL я не поднимал, это скорее ваш вопрос (или ваших единомышленников) лень перечитывать всю дискуссию.. Именно не я начал обсуждение: как же хранятся данные на SQL, я лишь предложил использовать requery() и не более того, …. М-да… Скорее всего вы, действительно не понимаете, что способ получения id с сервера, предложенный вами - очень тесно завязан на ФИЗИЧЕСКОЕ хранение этой информации на сервере (вот откуда пошел разговор о хранении данных на MSSQL). Так вот вам и пытаются показать (рассказать), что ваша методика может не сработать в некоторых (далеко не единичных) случаях. Ну а ваше дело, прислушаться к этому или нет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2006, 22:59 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
вот о методе как раз по подробней и хотел бы услышать критику, а по поводу физического хранения - вы не правы, мой метод никак на связан с физическим хранением информации.. я уже обьяснял, что мои программы вообще не привязанны к базе, данные можно хранить в MSSQL, ORACLE, VFP.. я добивался универсальности.. вот ваши методы действительно не могут обеспечить универсальности, т.к. коннект каждый раз прописывается и T-SQL отличается от PL-SQL.. работая напрямую с базой получаем "узкую специализацию" программы.. RV - упорядочен по id, кроме того он параметризированный, что обеспечивает всем необходимым для использование requery(), как вы привязываете эту команду к физическому хранению данных непонятно.. requery работает с любыми данными, через ODBC, это уже ODBC разбирается как там на физическом уровне.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 08:11 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Всё боится времени to FoXXX На счёт универсальности программ под разные базы это все гипотетически либо вы не используете всю мощь T-sql , pl-sql ....... ,а они отличаются и мы об этом знаем. На сложных запросах просто потеряете в производительности. Или всё сводится к SQL-92 (select .... isert ....update.... delete)? Переписывать всё равно придётся серверные процедуры тригеры виды.... всю обработку которая на сервере функции которые вы вставляли в оракл и многое другое работы хватит. так что в универсальность я не верю - проходили..... есть системы в которые просто необходимо встраиваться так как разработаны не нами и там свои стандарты вставка только через процедуры, выборки только через серверные виды и опять же процедуры, и пользователю вообще закрыт доступ напрямую к таблицам из соображения безопасности , есть серверные роли и полномочия юзеров со всем этим нужно считаься. по поводу получения Id idetity встака оформляется ввиде процедуры которая принимает параметры на вход и возвращает id в виде выходного параметра есть и такие стандарты и её (процедуру) используйте хоть в VB Delphi VFP С++ она выполнит правильно свою работу остаётся только получить параметр не хочется спорить,упираться и убеждать каждый успользует то что умеет и верует своему пророку... .... и только время боится пирамид! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 10:03 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
/*Переписывать всё равно придётся серверные процедуры тригеры виды.... всю обработку которая на сервере функции которые вы вставляли в оракл и многое другое работы хватит. */ чудес не бывает, для создания баз приходится писать скрипты, для SQL свой, для ORACLE свой... что делать, но прога остается неизменной, все в RV, скрипты пускаем при инсталляции, выбор сервера и создание таблиц, привелегии разумеется нужно иметь, иначе что вы за программист? даже если у вас безопасность на высоте.. клиент же работает только с RV.. в отличие от CAD RV создается единожды, CAD же необходимо создавать в каждой форме, а их > 50... вот и весь фокус, но вам-то это зачем? вы привыкли писать функции - обращения к серверу, пишите.. я ведь не пытаюсь утверждать что ваш метод неправильный и не говорю что так не пишут, и так писать нельзя.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 11:39 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Да, разумеется, FoXXX ваш подход тоже имеет право на жизнь и работать с сервером ТОЛЬКО через RV можно. Но есть некоторые операции на сервере, которые просто НЕЛЬЗЯ выполнить через RV. Как вы потупаете в таком случае? С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 11:59 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXотвечаю вам то же самое.. я не заблуждаюсь, точнее сказать я не разбирался с этим вопросом предметно, поэтому все мои высказывания лишь рассуждения и предположения, о чем я уже говорил.. Однако вслед за этим следует предположение, что ВСЕ кто Вам что-то советовал заблуждаются! FoXXXпример работает, но это не факт что он будет работать в любом случае, возможно при определенной ситуации он работать не будет.. Тогда зачем его вообще приводить? FoXXXи что вы так нервничаете? к чему все эти многоточия?? еще раз напоминаю вам что тема топика другая, вопрос не в способе хранения данных в SQL, вопрос в получении id. Кстати вопрос по хранению данных на SQL я не поднимал, это скорее ваш вопрос (или ваших единомышленников) Да потому что вопрос получения ID тесно завязан на способ физического хранения данных. FoXXXлень перечитывать всю дискуссию.. А вот это-то и вызывает самое большое раздражение и кучу многоточий. Вам НЕОДНОКРАТНО, РАЗНЫМИ СПОСОБАМИ, объяснили что ТАК ДЕЛАТЬ НЕЛЬЗЯ! Более того, объянили ПОЧЕМУ нельзя. Однако Вы с постоянным упорством ИГНОРИРУЕТЕ все то, что Вам объяснили, да еще намекаете, что никто ничего не понимает! "У меня же работает". Вы хоть сами себе-то не противоречьте. Чуть раньше сами же сказали, что возможо работать не будет, а потом утверждаете, что все другие заблуждаются. FoXXXИменно не я начал обсуждение: как же хранятся данные на SQL, я лишь предложил использовать requery() и не более того, но как видно вас раздражает любое мнение отличное от вашего, мне жаль, что вам хочется чередовать свою речь многоточиями.. чесслово не хотел лично вас обидеть, да и вообще никого не хотел обижать. Если говорить о хранени я лишь высказал общие принципы хранения данных (любых) в файловой системе DOS или Windows, помоему ничего крамольного? Еще раз. Раздражает не другое мнение, а ИГНОРИРОВАНИЕ того, что Вам говорят. Причем не только я. Вы же игнорируете вообще ВСЕХ. "У меня же работает, значит Вы ВСЕ ничего не понимаете" FoXXXесли я упомянул о последней записи, то говорил скорее о VFP, т.к. в нем я применяю те же методы обновления информации как и в SQL, что удобно, т.к. иногда мои системы работают без SQL с таблицами VFP. Практически без изменений в коде моя система может быть развернута и в SQL и в VFP.. достаточно в базе сформировать (подключить) таблицы или RV с совпадающими названиями. Вот Вам и объяснили, что этот подход НЕ ПРИМЕНИМ к работе с серверными базами данных. И объяснили ПОЧЕМУ! Еще раз. В данной теме Вам неоднократно объяснили почему Ваш метод некорректен для серверных баз данных. Неоднократно объяснили как надо получать последний ID. Пожалуйста, перечитайте все эти объяснения еще раз, прежде чем приводить свои рассуждения и примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 13:19 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Aleksey-KДа, разумеется, FoXXX ваш подход тоже имеет право на жизнь и работать с сервером ТОЛЬКО через RV можно. Но есть некоторые операции на сервере, которые просто НЕЛЬЗЯ выполнить через RV. Как вы потупаете в таком случае? С уважением, Алексей Hi Алексей! с ходу не могу придумать такой ситуации, подскажите, отвечу.. о каких операциях речь? ВладимирМ! В том то все и дело, что вы всевремя говорите о том, что физическое хранение информации не позволяет мне использовать RV во всех случаях.. и главное ничего конкретного, одни общие рассуждения и многоточия, вот и в последнем посте тоже самое, ни слова конкретики.. RV для того и создан, чтобы работать с другими базами и источниками данных кроме VFP. Сотый раз говорю, зачем нам знать методы работы SQL со своими данными, мы знаем, что SQL или ORACLE присваивает id в соответствии со своими счетчиками, этого достаточно, далее requery() обновляет нам наш курсор, и не важно где данные лежали до этого, в VFP MSSQL ORACLE и т.д. RV упорядочен, т.е. order по ключу (по id), делаем go bottom и попадаем на новую запись с новым id.. может быть ваш метод работает быстрее (хотя я сомневаюсь в этом), но эта скорость не критична в данном случае, мы ведь просто добавили запись и работаем с ней, а не готовим отчет, не строим сложный запрос для аналитики не так ли? Ну что вам еще сказать, если вы не можете аргументированно отказаться от RView или CAD, то можно только сожалеть об этом. в конце концов можно ведь дискутировать придерживаясь фактов а не эмоций, иначе это не дискуссия а только показывание пальцев (веером). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 13:50 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXСотый раз говорю, зачем нам знать методы работы SQL со своими данными, мы знаем, что SQL или ORACLE присваивает id в соответствии со своими счетчиками, этого достаточно, далее requery() обновляет нам наш курсор, и не важно где данные лежали до этого, в VFP MSSQL ORACLE и т.д. RV упорядочен, т.е. order по ключу (по id) Ну, наконец-то Вы согласились с тем, что нужен ORDER BY. Хоть какой-то сдвиг. До сих пор, Вы утверждали, что ORDER BY не нужен о чем свидетельствует последний приведенный Вами пример. В приведенном Вами примере попробуйте удалить несколько записей в середине таблицы. Потом снова создайте НОВЫЕ записи. И ГДЕ они у Вас будут отображаться? Без ORDER BY именно на месте удаленных записей. FoXXXделаем go bottom и попадаем на новую запись с новым id. В очередной раз повторяю. Да, мы попадем на запись с новым значение ID. Вопрос в том, что неизвестно, КТО создал эту запись. Тот, кто и делает перезапрос или другой пользователь. Т.е. непонятно ID какой записи мы прочитаем. FoXXX. может быть ваш метод работает быстрее (хотя я сомневаюсь в этом), но эта скорость не критична в данном случае, мы ведь просто добавили запись и работаем с ней, а не готовим отчет, не строим сложный запрос для аналитики не так ли? Да при чем здесь скорость?! Главное, что требуется, это получить ID именно той записи, которую добавил данный конкретный пользователь. Метод с GO BOTTOM - этого НЕ ОБЕСПЕЧИВАЕТ. Кстати, о каком таком "моем методе" Вы говорите? FoXXXНу что вам еще сказать, если вы не можете аргументированно отказаться от RView или CAD, то можно только сожалеть об этом. Это уже даже комментировать невозможно. ГДЕ Вы видели аргументы о том что надо ОТКАЗАТЬСЯ от RV или CAD. Приведите цитату. Я говорил лишь о том, что метод через GO BOTTOM - не корректен. ВСЕ. Если Вы сделали из этого какие-то свои выводы - это ВАШИ проблемы. Не надо говорить за меня. FoXXXв конце концов можно ведь дискутировать придерживаясь фактов а не эмоций, иначе это не дискуссия а только показывание пальцев (веером). Вот именно. Проблема только в том, что Вы сами начали "гнуть пальцы". А когда Вам указали, что Вы, мягко говоря, заблуждаетесь, тут же пошли наезды типа "критики не любите", "возможно заблуждаетесь". Заметьте, НИКТО не сказал, что Ваш способ с Go Bottom - правильный. Тем не менее, Вы напрочь игнорируете ЧУЖИЕ аргументы. Т.е. не просто аргументировано опровергаете, а просто игнорируете. "У меня работает". Вам аргументированно объясняют, что Вы не учли того и сего. А что в ответ: "мне лень перечитывать топики", "мне лень читать BOL", "не вижу смысла изучать BOL", "не вижу необходимости знать ...". Я ЭТО не придумал. Это именно Ваши слова. Пролистайте данную тему со своими ответами. =========== Теперь о том, КАК можно получить ID через RV или CAD. 1) Из открытого RV можно прочитать используемый им номер соединения. CursorGetProp("ConnectHandle"). Далее по этому номеру сделать запрос через SQLExec() и прочитать @@Identity или SCOPE_IDENTITY() 2) Если у RV есть возможность ОДНОЗНАЧНО идентифицировать запись по ДРУГИМ полям, то после перезапроса надо найти запись с ранее запомненными значениями этих других полей. В найденной записи и прочитать значение ID. 3) Для CAD есть возможность "встроить" свой код для определения ID. Но здесь есть ряд проблем, решению которых и посвящена данная тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2006, 17:20 |
|
||
|
|

start [/forum/topic.php?fid=41&startmsg=33593415&tid=1592046]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 506ms |

| 0 / 0 |
