|
|
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXЕсли работать с базами не используя всю мощь RV, то чем тогда VFP лучше Дельфи? Опять слушаем только себя? Ведь никто не сказал, что RV использовать нельзя. RV - это инструмент. Как любой другой инструмент, он имеет достоинства и недостатки. Надо всего-лишь понимать его ограничения. При чем здесь "вся мощь", если эта самая "мощь" используется неправильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 11:53 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
ВладимирМ FoXXXЕсли работать с базами не используя всю мощь RV, то чем тогда VFP лучше Дельфи? Опять слушаем только себя? Ведь никто не сказал, что RV использовать нельзя. RV - это инструмент. Как любой другой инструмент, он имеет достоинства и недостатки. Надо всего-лишь понимать его ограничения. При чем здесь "вся мощь", если эта самая "мощь" используется неправильно? ВладимирМ! В чем неправильность, не уточните? Но не забывайте - ведение owner_id - у нас обязательно.. так в чем? С уважением FoXXX А дельфисты действительно работают через функции.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 13:21 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXВладимирМ! В чем неправильность, не уточните? Но не забывайте - ведение owner_id - у нас обязательно.. так в чем? Еще раз! Да сколько можно! Понимате, Вы работаете в очень конкретной постановке задача. Это Ваша задача и Ваша постановка. В пределах Вашей задачи это работает (хотя, даже здесь с оговорками). Оговорки для Вашей задачи: -) Два пользователя не могут (не должны) войти в приложение с одинаковым owner_id. -) Пользователь не может (не должен) модифицировать (видеть) данные другого пользователя Плюс ограничения, накладываемые на собственно способ хранения данных, синтаксис RV и механизм его использования. Т.е. собственно постановка задачи. Как универсальное решение для любой задачи это не годится. Задач, когда Ваше решение не сработает достаточно много. Т.е. даже нельзя сказать, что Ваше решение сколько-нибудь распространенное. Очень уж оно узкоспециализированное. Очень частное. Хуже того, Ваше решение не масштабируемое. Т.е. в случае изменений требований к задаче Вам придется менять весь механизм получения значения ID. Переделывать всю программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 14:09 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
ВладимирМ FoXXXВладимирМ! В чем неправильность, не уточните? Но не забывайте - ведение owner_id - у нас обязательно.. так в чем? Еще раз! Да сколько можно! Понимате, Вы работаете в очень конкретной постановке задача. Это Ваша задача и Ваша постановка. В пределах Вашей задачи это работает (хотя, даже здесь с оговорками). Оговорки для Вашей задачи: -) Два пользователя не могут (не должны) войти в приложение с одинаковым owner_id. -) Пользователь не может (не должен) модифицировать (видеть) данные другого пользователя Плюс ограничения, накладываемые на собственно способ хранения данных, синтаксис RV и механизм его использования. Т.е. собственно постановка задачи. Как универсальное решение для любой задачи это не годится. Задач, когда Ваше решение не сработает достаточно много. Т.е. даже нельзя сказать, что Ваше решение сколько-нибудь распространенное. Очень уж оно узкоспециализированное. Очень частное. Хуже того, Ваше решение не масштабируемое. Т.е. в случае изменений требований к задаче Вам придется менять весь механизм получения значения ID. Переделывать всю программу. И можно и нужно, но здраво без эмоций.. Давайте по существу п.1 а разве это допустимо? Для меня нет, в любой многопользовательской задаче.., если вы пишете однопользовательскую задачу, тогда да, один пользователь входит в систему сколько угодно раз.. это не узкоспециализированннное решение, а другая школа програмирования если хотите, другой метод програмирования, другая постановка, другая аналитика, другое отношение к процессу создания продукта.. если вы так не делаете, и ваши знакомые не делают, это не значит, что так не делает никто, если вы не говорите по французки, и ваши знакомые не говорят по французки, то это не значит, что в мире никто не говорит по французки.. если вы не бывали на ямайке, и ваши знакомые там не бывали, то это не значит что ямайки нет, что она не правильная, ошибочная и подозрительная.. Вы можете с этим согласиться? п.2 пользователь может, должен и обязан видеть, модифицировать, редактировать, использовать записи других пользователей, для этого существует другой RV, для этого существует тотже RV с "пустым" параметром, для этого существует set filter, для этого существует view на сервере, для этого достаточно возможностей, способов и методов работы с RV. п.3 поясните какие ограничения я должен применять к способу хранения данных? в чем вы видете ограничения? дополнительное поле owner_id? или вы что-то другое имели ввиду? непонятно, уточните если сможете пожалуйста. п.4 универсальное для любой задачи.. не могу придумать многопользовательской задачи в которой отработанный годами (10 лет) метод перестанет работать.. если вы знаете такие задачи, озвучте их пожалуйста, возможно это поможет мне найти другие подходы в моей методике.. п.5 маштабируемость.. что вы имеете ввиду, увеличение клиентов? распределенные базы данных? вот как раз распределенные базы данных у нас работают очень хорошо.. RV так же хорошо работает с ORACLE как и с MSSQL, если в сетке несколько серверов, наша система работает со всеми.. вот попробуйте настройте свою программу если поменялись сервера.. вам прийдется искать и менять строку коннекта в текстах программ. Наши все коннекты лежат в базе VFP, легко настраиваются и конфигурируются.. Мой (наш) метод решения задач выработан в течении последних 15ти лет как плавная миграция из FOXBASE в VFP9-SQL,ORACLE и др. Ваш метод больше похож на работу молодых программистов дельфи, не знакомых со всей гаммой возможностей VFP.. не пытаюсь обидеть, но это общие наблюдения. Обратите внимание, я не критикую ваш подход, он верный и правильный(безошибочный). С уважением FoXXX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 15:42 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Освободился немного, встряну в разговор с вопросами. FoXXX 1. Поясните пожалуйста метод получения owner_id, те за что надо зацепиться, что бы получить уникальный идентификатор и кто его генерит. 2. Каким образом и где (намекну - на сервере или клиенте) происходит расчет каких-нибудь интегральных цифр, а так же где находится код обрабатывающий получение интегральных цифр. 3. Каким образом в Вашей идеологии (КС) достигается вложенность транзакций 4. Каким образом Вы разграничиваете доступ к данным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 16:07 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
PaulWistОсвободился немного, встряну в разговор с вопросами. FoXXX 1. Поясните пожалуйста метод получения owner_id, те за что надо зацепиться, что бы получить уникальный идентификатор и кто его генерит. 2. Каким образом и где (намекну - на сервере или клиенте) происходит расчет каких-нибудь интегральных цифр, а так же где находится код обрабатывающий получение интегральных цифр. 3. Каким образом в Вашей идеологии (КС) достигается вложенность транзакций 4. Каким образом Вы разграничиваете доступ к данным Пауль, вы меня извините, но я не в состоянии дискутировать сразу с неопределенным кругом лиц, мне бы хотелось сначала довести разговор с ВладимироМ, тогда более детально смогу отвечать на ваши вопросы.. вкратце: п.1 нужно зацепиться за администратора.. :-) он ведет пользователей в специальной таблице на сервере.. и только он имеет особые права на работу с этой таблицей. если админа нет,можно учитывать имя р.станции п.2 основной расчет на сервере, RV видит результат работы сервера.. мелкие (текущие) расчеты на клиенте (локальные view). п.3 этим занимается VFP п.4 мы его не разграничиваем.. :-) извиняюсь за краткость.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 17:11 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Спасибо. авторп.1 нужно зацепиться за администратора.. :-) он ведет пользователей в специальной таблице на сервере.. и только он имеет особые права на работу с этой таблицей. если админа нет,можно учитывать имя р.станции Если у Вас не возникают проблемы, то у меня вопросов нет авторп.2 основной расчет на сервере, RV видит результат работы сервера.. мелкие (текущие) расчеты на клиенте (локальные view). Вот здесь мне не понятно, как RV получает расчеты с сервера, НО вопросов тоже нет авторп.3 этим занимается VFP Те вложенные транзакции сервера обеспечивает Фокс, тоже вопросов нет авторп.4 мы его не разграничиваем.. Доступ не разграничивается, ну что же - вопросов тоже нет. PS Спасибо за ответы, думаю всем ребятам многое стало понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 17:21 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
ага, смешно, смешно задавать глупые вопросы и смеяться над ними же.. и что, вопросы кончились? или у вас иссяк запас умных слов? вы в доку загляните, там еще много интересных выражений, вы не стесняйтесь, спрашивайте, вместе посмеёмся :-) да, чуть не забыл, за спасибо - пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 17:44 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Ну что же, Вы пригласили к диалогу, тогда ответьте на вопрос (приведите простой пример кода) - как обеспечить вложенные транзакции на сервере средствами Фокса используя RV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 17:52 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXДавайте по существу Давайте. FoXXXп.1 а разве это допустимо? Для меня нет, в любой многопользовательской задаче.., если вы пишете однопользовательскую задачу, тогда да, один пользователь входит в систему сколько угодно раз.. "Разрешено все, что не запрещено". Если Вы пишите однопользовательскую задачу, то программа вообще может быть запущено только один раз. Вне зависимости от того, с одним логином и паролем Вы входите или с разным. Что значит "допустимо"? У Вас есть в программе перехват такой ситуации? Т.е. Вы можете отследить, что приложение было запущено дважды с логином и паролем одного и того же пользователя? Насчет практического смысла - например, пользователь жалуется "у меня не работает, а у соседа все в порядке". Первая проверка - это войти в программу с его логином и паролем и посмотреть. Имеем 2 запущенных экземпляра с одним логином и паролем. Другая "житейская" ситауция. Пришел новичек, а администратора (программиста) нет. Запускаем на его машине приложение с моим логином и паролем, а я продолжаю работать на своей машине. FoXXXэто не узкоспециализированннное решение, а другая школа програмирования если хотите, другой метод програмирования, другая постановка, другая аналитика, другое отношение к процессу создания продукта.. Применяя термин "узкоспециализированное решение" я имел в виду, что оно будет работать только и исключительно при выполнении рада очень жестких условий. FoXXXесли вы так не делаете, и ваши знакомые не делают, это не значит, что так не делает никто, если вы не говорите по французки, и ваши знакомые не говорят по французки, то это не значит, что в мире никто не говорит по французки.. если вы не бывали на ямайке, и ваши знакомые там не бывали, то это не значит что ямайки нет, что она не правильная, ошибочная и подозрительная.. Вы можете с этим согласиться? С чем? Я уже говорил. Ваш подход работает, но при выполнении ряда дополнительных, очень жестких ограничений. FoXXXп.2 пользователь может, должен и обязан видеть, модифицировать, редактировать, использовать записи других пользователей, для этого существует другой RV, для этого существует тотже RV с "пустым" параметром, для этого существует set filter, для этого существует view на сервере, для этого достаточно возможностей, способов и методов работы с RV. Ну, вот, начинается. Вы же сами пишете, что вместо одного RV для отображения одной и той же информации используется целый набор самых разных RV. Именно в силу того, что Ваш подход требует ряда серьезных ограничений на используемый RV. FoXXXп.3 поясните какие ограничения я должен применять к способу хранения данных? в чем вы видете ограничения? дополнительное поле owner_id? или вы что-то другое имели ввиду? непонятно, уточните если сможете пожалуйста. Если в RV не используется ORDER BY - это предполагает, применительно к MS SQL, использование кластерного индекса по полю Id. В противном случае, нет гарантии, что последняя запись выборки окажется последней созданной записью. FoXXXп.4 универсальное для любой задачи.. не могу придумать многопользовательской задачи в которой отработанный годами (10 лет) метод перестанет работать.. если вы знаете такие задачи, озвучте их пожалуйста, возможно это поможет мне найти другие подходы в моей методике.. Пример в рамках Вашей задачи я уже привел. 2 пользователя вошли с одинковым owner_id. Более экзотические случаи - это отсутствие кластерного индекса и отсутствие ORDER BY в RV. FoXXXп.5 маштабируемость.. что вы имеете ввиду, увеличение клиентов? распределенные базы данных? Нет. Прежде всего - это расширение функциональности программы. Новые модули, новые задачи, модификация старых задач и т.п. Вы уже упоминали, что для решения разных задач Вам пришлось пойти на "размножение" RV. Хотя все они отображают одну и ту же информацию, но "чуть чуть по разному". FoXXXвот попробуйте настройте свою программу если поменялись сервера.. вам прийдется искать и менять строку коннекта в текстах программ. Наши все коннекты лежат в базе VFP, легко настраиваются и конфигурируются.. Какое отношение имеет способ установки коннекта к обсуждаемой проблеме? Почему Вы считаете, что настроечная информация у меня хранится в тексте программы? FoXXXМой (наш) метод решения задач выработан в течении последних 15ти лет как плавная миграция из FOXBASE в VFP9-SQL,ORACLE и др. Ваш метод больше похож на работу молодых программистов дельфи, не знакомых со всей гаммой возможностей VFP.. не пытаюсь обидеть, но это общие наблюдения. Обратите внимание, я не критикую ваш подход, он верный и правильный(безошибочный). Один-в-один могу повторить все то же самое в адрес Вашего решения. Было взято наиболее простое (понятное) решение, а насколько оно корректно и удобно для пользователей - это уже второй вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 18:12 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Уважаемый ВладимирМ! Извините за краткость, но отвече сначала на очевидные вопросы: авторЧто значит "допустимо"? У Вас есть в программе перехват такой ситуации? Т.е. Вы можете отследить, что приложение было запущено дважды с логином и паролем одного и того же пользователя? таблица пользователей имеет поле "активации" авторНасчет практического смысла - например, пользователь жалуется "у меня не работает, а у соседа все в порядке". Первая проверка - это войти в программу с его логином и паролем и посмотреть. Имеем 2 запущенных экземпляра с одним логином и паролем. вариант 1 - снять активацию на сервере (если мешает) вариант 2 - зайти с правами супервизора(администратора) авторДругая "житейская" ситауция. Пришел новичек, а администратора (программиста) нет. Запускаем на его машине приложение с моим логином и паролем, а я продолжаю работать на своей машине. в банке новичек?? если это не финансовая организация - всегда есть дежурный администратор - старший в отделе, начальник сектора, материально-ответственное лицо, дежурный администратор имеет полномочия выдавать логи если он логинится как (д.администратор) д. администратор не может выдавать пароли другим подразделениям (функция не доступна). все это элементарное распределение ролей... авторЕсли в RV не используется ORDER BY - это предполагает, применительно к MS SQL, использование кластерного индекса по полю Id. В противном случае, нет гарантии, что последняя запись выборки окажется последней созданной записью. ключевое поле в сервере по id (ident) используется, order by используется, фильтр по owner_id используется, но в основном при создании новой записи для быстрого получения id. авторНет. Прежде всего - это расширение функциональности программы. Новые модули, новые задачи, модификация старых задач и т.п. никаких препятствий, новые формы, новые таблицы, новые RV, view и т.д. авторКакое отношение имеет способ установки коннекта к обсуждаемой проблеме? Почему Вы считаете, что настроечная информация у меня хранится в тексте программы? а где, базы VFP нет, в переменных?, в таблицах?- так их же нет.. автора насколько оно корректно и удобно для пользователей - это уже второй вопрос. уверяю вас, пользователь понятия не имеет кокое мы применяем решение, ваше или наше, ограничения по логам - чистая безопасность.. если вы категорически против системы регистрации пользователей, можно это делать автоматически используя функции в тригерах SQL suser_sname(),app_name(),host_name() хотя чесно, регистрация никого не напрягает.. некотрые клиенты по ней ведут учет рабочего времени.. :-) ну вот вроде кратенько, может где-то неточность или неясность, поправте .. С уважением FoXXX ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 18:56 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Кое что о ведении пользователей. Учет пользователей позволяет применять дополнительные функции в системе, например: пользователь Иванов(а) не имеет(имеет) доступ к формам f1,f2,f3... не видит(видит) опции меню a,b,c,d.. имеет активными(неактивными) в форме кнопки k1,k2,k3... пользователь Петров(а) не видит все что связано со счетами №хххх но видит только склад, пользователь Сидоров(а) работает только с учетом материальных ценностей п. Пупыркиной доступен только учет кадров п. Запупыркиной только Расчет зарплаты п. Пупкин может заполнять табель, работать в ОТиЗе Все это называется распределением привелегий.. привелегиями занимается админ или д.админ.. уровень доступа определяется должностными обязанностями пользователя системы. Весь доступ содержится в таблице пользователей, которая содержит всех пользователей, их состояние (активный, не активный); привилегии, допуски, статус, период допуска и т.д. Нормальный подход к проектированию, созданию и эксплуатации системы.. Без этого как-то и не солидно, вроде как на коленке карандашиком сделать.. да и еще по поводу получения ID, еще способ: sele RV append Blank (или insert) =Requery() select p1 as id,p2,... from RV where owner_id=m.owner_id order by id into CURSOR ident sele ident go bottom sele RV LOCATE FOR id=ident.id use in ident sele RV brows ну и так далее, методов работы тьма.. для нас RV - обычная таблица VFP вот такая система.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 01:09 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
PaulWistНу что же, Вы пригласили к диалогу, тогда ответьте на вопрос (приведите простой пример кода) - как обеспечить вложенные транзакции на сервере средствами Фокса используя RV один из: By default, Visual FoxPro automatically wraps every data-writing operation sent to the remote server in a transaction. This default automatic transaction handling is provided when the Transactions property is set to 1, or DB_TRANSAUTO. To use automatic transaction mode Use the DBSETPROP( ) Function to set the Transactions property on the connection to 1 or DB_TRANSAUTO. -or- Use the SQLSETPROP( ) Function to set the Transactions property on the active connection to 1 or DB_TRANSAUTO. Transaction processing for the remote table is automatically handled. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 07:25 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX Выдержка из хелпа как раз говорит о том, что отдельная команда выданная со свойством соединения SQLGETPROP('Transaction') = 1, оборачивает каждый пакет посылаемый на сервер как одну транзакцию. Свойство SQLGETPROP('Transaction') = 2 говорит, что транзакция явно задана "руками" и завершение её должно быть командами SQLCOMMIT/SQLROLLBACK. Всё, больше ничего. Видимо, я неправильно задал вопрос, имелось в виду конструкция Код: plaintext 1. 2. 3. 4. 5. Так вот средствами Фокса через RV это никак не реализовать, те Вы основываясь на своём методе заведомо ограничиваете себя в бизнес логике. Тогда ещё вопрос (тот, что был с улыбкой), приведите пример кода, как Вы получаете в RV промежуточные/конечные расчеты выполненные на сервере, те примерно такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Думаю, что через RV такое вряд ли получится (Попробуйте выполнить в QA), а через SPT одно удовольствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 10:37 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
авторВидимо, я неправильно задал вопрос, имелось в виду конструкция к счастью конструкция не понадобилась :-) авторВы основываясь на своём методе заведомо ограничиваете себя в бизнес логике. что вы называете бизнеслогикой? если то что я подумал, то у нас другая "бизнеслогика".. авторкак Вы получаете в RV промежуточные/конечные расчеты выполненные на сервере, те примерно такой код на серверах существуют процедуры, тригеры, представления.. задача программиста Баз данных представить результат в представлении (view), пока он с этим справляется.. т.е. все расчеты находятся не в VFP а на сервере.. наш програмист БД успешно реализует поставленную задачу в SQL, PROGRESS, ORACLE Я сильно в его работу не встреваю, мое дело постановка, бизнес-систем анализ, моделирование процессов, ну и выдача требований БД программисту, иногда вместе думаем как поступить в том или другом случае Вообще у вас вопросы интересные, вы как бы не метод получения ident обсуждаете, а просто критикуете RV, CAD.. Вам что, не нравятся эти инструменты? Но ведь это дело вкуса, не так ли, хотите работать с сервером напрямую, работайте, я ведь не принуждаю вас использовать RV.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 13:44 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX авторВидимо, я неправильно задал вопрос, имелось в виду конструкция к счастью конструкция не понадобилась :-).. Ну, что же не понадобилась, значит не судьба :) FoXXX[ авторВы основываясь на своём методе заведомо ограничиваете себя в бизнес логике. что вы называете бизнеслогикой? если то что я подумал, то у нас другая "бизнеслогика".. Бизнес логика - это цепь взаимосвязанных событий, прождающаяся либо действием либо другим событием, хрестоматийный пример выписаная накладная порождает событие товар отгружен, которое порождает событие возникла/не возникла задолжность итд, те логическая модель, в данном случае, хозяйственной деятельности. FoXXX авторкак Вы получаете в RV промежуточные/конечные расчеты выполненные на сервере, те примерно такой код на серверах существуют процедуры , тригеры, представления.. Так не могли бы Вы привести пример как вызываются процедуры с использованием RV (не будем усугублять ХП не возвращающая набора данных) FoXXX задача программиста Баз данных представить результат в представлении (view), пока он с этим справляется.. т.е. все расчеты находятся не в VFP а на сервере.. наш програмист БД успешно реализует поставленную задачу в SQL, PROGRESS, ORACLE Я сильно в его работу не встреваю, мое дело постановка, бизнес-систем анализ, моделирование процессов, ну и выдача требований БД программисту, иногда вместе думаем как поступить в том или другом случае Ну, что же нормальный подход к постановке задачи. FoXXX Вообще у вас вопросы интересные, вы как бы не метод получения ident обсуждаете, а просто критикуете RV, CAD.. Вам что, не нравятся эти инструменты? Но ведь это дело вкуса, не так ли, хотите работать с сервером напрямую, работайте, я ведь не принуждаю вас использовать RV.. Форум существует, что бы задавать вопросы, и цель моих вопросов - узнать что-то что мне не знакомо или не умею, поэтому прошу Вас дать примеры кода, как у Вас реализовна та или иная технология. Нет, критики RV/CAD, просто мне интересно как с их помощью реализуются некоторые моменты КС, в своё время я не нашел как на них это сделать, поэтому и вопрошаю :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 14:30 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX Интересно получается, когда Вы первый раз вышли со своей идеологией, то позиционировали ее как верную без ограничений. Теперь выясняется, что у Вас есть в каждой записи каждой таблицы дополнительный идентификатор пользователя; используется ORDER BY по ключевому полю в RV; журнал активизации для исключения повторного входа с одним логином (кстати, если произошел аварийны выход - метка осталась, вход невозможен, зови админа); речь идет о банковской системе (определенная специфика работы); программа одновременно работает с несколькими серверными базами данных (SQL, PROGRESS, ORACLE). Ничего не пропустил? Чувствуете разницу? Когда говорили о получении ID через SCOPE_IDENTITY(), то все это не имело никакого значения, поскольку решение было универсальное для любой задачи работающей с MS SQL. Никаких ограничений не накладывалось на систему. А у Вас "чем дальше в лес, тем больше ..." не дров, конечно, но ограничений, о которых в самом начале дискуссии Вы скромно умолчали. Более того, поскольку у Вас происходит одновременная работа с несколькими серверными базами данных, то разумеется, такой пожход не применим в принципе. Я не в курсе, но кажется, у Oracle просто нет полей типа Identity, т.е. бессмысленно пытаться применить синтаксис MS SQL в запросах к Oracle. Вообще-то, еще более универсальный способ - это генерить ID записи на "среднем слое". Т.е. введите в Вашу базу VFP дополнительную служебную табличку (имя таблицы - последний использованный код записи) и стандартно наращивайте это значение. Т.е. функция NewID() в стандартном проекте примеров от VFP. Насчет прав доступа. Вообще-то я в курсе. Однако опять же, Ваша проблема в том, что Вы делаете универсальную систему под несколько баз данных. Существует своя собственная идеология разграничения прав доступа в самом MS SQL. Т.е. готовая . Подозреваю, что подобная система должна быть в любой серверной базе данных. По сути, Вы дублируете готовую систему разграничения прав доступа именно потому, что не можете привязаться к какой-то одной базе данных. Насчет собственно использования RV и T-SQL Я никогда не утверждал, что использовать RV - не надо. RV - это еще один инструмент, а пользоваться им или нет, зависит от конкретной задачи. Весьма странно, что Вы так настойчиво выступаете против прямой работы через T-SQL. Для сколько-нибудь развитой банковской системы работать только и исключительно через RV - невозможно в принципе. Точнее, можно, если Вас не интересует производительность. Вы как-то забываете, что RV - это всего-лишь надстройка над T-SQL. Т.е. нечто вроде визарда, для решения некоторых стандартных задач . Еще раз подчеркну - некоторых . По самой своей сути RV не может решить все возможные задачи. Насчет способов хранения настроечной информации. Во-первых, данный вопрос никак не относится к обсуждаемой проблеме. Во-вторых, на основании каких высказываний Вы сделали вывод, что я не использую таблицы FoxPro при работе с серверной базой данных. В-третьих, настроечную информацию можно хранить в любом файле (INI, свободная DBF-таблица, текстовый файл, в системном реестер и т.д. и т.п.) или передавать как параметр в EXE. В общем, есть "вагон и маленькая тележка" способов отдельного хранения настроечной информации от файла EXE. PS: пожалуйста, не надо больше приводить код вида append blank =requery() Как описание идеи - это еще сойдет, но как действующий код - он говорит о полной безграмотности разработчиков или об умолчании ряда допущений и ограничений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 17:17 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
HI ВладимирМ! авторА у Вас "чем дальше в лес, тем больше ..." не дров, конечно, но ограничений, о которых в самом начале дискуссии Вы скромно умолчали я бы не называл все это ограничениями, я бы называл все это "вновь открывшимися возможностями!" авторЯ не в курсе, но кажется, у Oracle просто нет полей типа Identity, т.е. бессмысленно пытаться применить синтаксис MS SQL в запросах к Oracle. я в курсе, у ORACLE есть поля типа ident, там есть функция которая считает (счетчик) авторВообще-то, еще более универсальный способ - это генерить ID записи на "среднем слое". Т.е. введите в Вашу базу VFP дополнительную служебную табличку (имя таблицы - последний использованный код записи) и стандартно наращивайте это значение. Т.е. функция NewID() в стандартном проекте примеров от VFP. как будем разводить клиентов в таблицах VFP? где эти таблицы будут лежать? это не лучший вариант.. автор Существует своя собственная идеология разграничения прав доступа в самом MS SQL. Т.е. готовая. Подозреваю, что подобная система должна быть в любой серверной базе данных да, привилегии есть везде, но как их использовать для блокировок кнопок на форме, опций меню и т.д.? в серверах привилегии по таблицам,полям, представлениям и т.д. авторВы как-то забываете, что RV - это всего-лишь надстройка над T-SQL вы так думаете? почему тогда не надстройка над PL-SQL? авторПо самой своей сути RV не может решить все возможные задачи RV вообще не решает задач, он представляет(показывает) решения серверов.. PS извините за дежавю :-) еще способ: sele RV append Blank (или insert) =Requery() select max(id) as id from RV where owner_id=m.owner_id into CURSOR ident sele RV LOCATE FOR id=ident.id brows или sele RV append blank requery() CALCULATE max(id) for owner_id=m.owner_id to ident LOCATE FOR id=ident brows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 18:27 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
ВладимирМ! у меня вопрос по вашей рекомендации: автор1) Из открытого RV можно прочитать используемый им номер соединения. CursorGetProp("ConnectHandle"). Далее по этому номеру сделать запрос через SQLExec() и прочитать @@Identity или SCOPE_IDENTITY() sqlexec(k,'SELECT @@IDENTITY as id','id') sqlexec(k,'SELECT SCOPE_IDENTITY()as id','id') дают NULL после tableupd() дают результат, но в этот промежуток м-ду tableupd() и 'SELECT @@IDENTITY может вставиться чужая запись, не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 18:51 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Топик длинный. Что-то прочитал, что-то пропустил. Не мог ли кто-либо из увыжаемых дискутантов кратко резюмировать - как НАДО делать? Скажем если вставка происходит через ХП, то она может вернуть в фокс SCOPE_IDENITY. А ежели вставка происходит путём фоксовского TABLEUPDATE()? SCOPE_IDENITY использовать нельзя, потому как scope уже другой. @@IDENTITY может вернуть тоже неизвестно что (при наличии триггеров, вставляющих записи в другие таблицы). Как быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:10 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXX "Ты, Мань, на грубость нарываешся" Я могу поверить, что Ваш проект существует 15 лет, но как-то сомневаюсь, что Вы занимаетесь программированием столько же. Вопросы у Вас... FoXXXя бы не называл все это ограничениями, я бы называл все это "вновь открывшимися возможностями!" Которые имеют принципиальное значение для работоспособности предлагаемого кода. FoXXXя в курсе, у ORACLE есть поля типа ident, там есть функция которая считает (счетчик) Тогда Вы должны быть в курсе, чем отличается функция , от полей типа Identity. Функция может дать значение ДО момента физического создания записи. Поле Identity только ПОСЛЕ. Это два принципиально разных подхода. FoXXXкак будем разводить клиентов в таблицах VFP? где эти таблицы будут лежать? это не лучший вариант.. Какое отношение имеет код записи к коду клиента? Вы вообще в курсе, что делает пример (форма) NewId.scx в стандартном примере Solution.pjx поставляемом с FoxPro? Он формирует код записи ДО момента физического создания записи. Т.е. поля типа Identity вообще не используются, а код записи формируется на стороне клиента. Напомню: назначение кода записи - это однозначная идентификация записи. Все. Код клиента - это уже реквизиты записи. Они призваны решать другие задачи. FoXXXда, привилегии есть везде, но как их использовать для блокировок кнопок на форме, опций меню и т.д.? в серверах привилегии по таблицам,полям, представлениям и т.д. Не надо путать права доступа к данным и интерфейс. Это два разных направления. Да, они взаимосвязаны, но это не одно и то же. FoXXXвы так думаете? почему тогда не надстройка над PL-SQL? В данном случае, я неудачно выразился. Под T-SQL я подразумевал "прямой" доступ к данным по аналогии с SQLExec(). В литературе это называется "pass-through query" Т.е. RV - это "обертка", некий "класс", который реализует часть задач обработки данных. Расширением этого "класса" в старших версиях FoxPro стал Cursor Adapter. FoXXXRV вообще не решает задач, он представляет(показывает) решения серверов Вы уверены, что программированием - это то, чем Вам стоит заниматься? По сути Вы сказали: Программист не рашает задачи, он представляет (показывает) решения программы. А саму программу кто пишет? Вы показывали то, что возвращает профайлер. Где этот код в RV? Надо думать, он его как-то сам сформировал. На основании чего? На основании тех данных, которые были введены и с учетом настроек сделанных при создании структуры RV. Т.е. RV сформулировал (создал) запрос к серверу, передал ему этот запрос, получил ответ, трансформировал этот ответ в соответсвующий вид. Это еще не считая того, что делает RV на стороне клиента ДО формирования запроса серверу. PS: Дело в том, что большинство людей не могут ясно выражать свои мысли. Поэтому я стараюсь понять, что человек хотел сказать. По-возможности, не цепляюсь к словам, если в этом нет какого-то особого смысла. Например, неверная трактовка или понимание какого-то термина или определения. Но не по-мелочи, а могущая привести к серьезным ошибкам в рамках поставленной задачи. В том как Вы ведете дискуссию я не вижу стремления понять . Пока Вы просто цепляетесь к отдельным словам. Причем Вы демонстрируете потрясающую безграмотность и самоуверенность именно в программировании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:36 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXВладимирМ! у меня вопрос по вашей рекомендации: автор1) Из открытого RV можно прочитать используемый им номер соединения. CursorGetProp("ConnectHandle"). Далее по этому номеру сделать запрос через SQLExec() и прочитать @@Identity или SCOPE_IDENTITY() sqlexec(k,'SELECT @@IDENTITY as id','id') sqlexec(k,'SELECT SCOPE_IDENTITY()as id','id') дают NULL после tableupd() дают результат, но в этот промежуток м-ду tableupd() и 'SELECT @@IDENTITY может вставиться чужая запись, не так ли? прогнал, @@IDENTITY возвращает правильное значение, т.к. K разный у клиентов.. но вот человек правильно спрашивает, а если тригеры, тогда как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:45 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
FoXXXВладимирМ! у меня вопрос по вашей рекомендации: автор1) Из открытого RV можно прочитать используемый им номер соединения. CursorGetProp("ConnectHandle"). Далее по этому номеру сделать запрос через SQLExec() и прочитать @@Identity или SCOPE_IDENTITY() sqlexec(k,'SELECT @@IDENTITY as id','id') sqlexec(k,'SELECT SCOPE_IDENTITY()as id','id') дают NULL после tableupd() дают результат, но в этот промежуток м-ду tableupd() и 'SELECT @@IDENTITY может вставиться чужая запись, не так ли? Я уже объяснял в чем тут дело. Конструкция append blank Requery() с точки зрения программиста - безграмотна или здесь опущенно много дополнительных условий. Эта конструкция будет работоспособна только и исключительно при строковой буферизации данных (3). Этот режим, в котором, по умолчанию, открывается любое View. Он характерен тем, что сброс буфера происходит автоматически в момент перехода на другую запись или при закрытии таблицы. Другими словами, APPEND BALNK создает новую запись в буфере Local View. Поскольку сброса буфера не произошло, то и на самом сервере новая запись создана не будет и @@IDENTITY вернет NULL. Команда Requery() первым делом "передернет" указатель записи. Т.е. произойдет автоматический сброс буфера (но только если RV в строковом режиме буферизации). Другими словами, автоматически даст команду TableUpdate(). Только после этого будет создана запись на сервере и возможно будет прочитать значение @@IDENTITY. Т.е. на самом деле здесь не одна команда Requery(), а еще и неявная команда TableUpdate(). Проблема именно в том, что "неявная". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:47 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Oopyr Скажем если вставка происходит через ХП, то она может вернуть в фокс SCOPE_IDENITY. 1. При вставке через ХП логично было бы, и вернуть вставляемую запись, не так ли?! Т.е. в код ХП добавить в конце код вида: SELECT... FROM ... WHERE KeyID = SCOPE_IDENTITY() Вот пример:http://www.caws.atnet.ru/vfox/vfox-sql5.html - хранимая процедура Currency_AddNew Oopyr А ежели вставка происходит путём фоксовского TABLEUPDATE()? SCOPE_IDENITY использовать нельзя, потому как scope уже другой. @@IDENTITY может вернуть тоже неизвестно что (при наличии триггеров, вставляющих записи в другие таблицы). Как быть? А в этом случае вы и так получает новую запись. Разумеется, это поле (IDENTITY) должно присутствовать в списке полей, как правило, оно является ключом таблицы. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 19:49 |
|
||
|
VFP + SQL поле IDENTITY
|
|||
|---|---|---|---|
|
#18+
Aleksey-K1. При вставке через ХП логично было бы, и вернуть вставляемую запись, не так ли?! Т.е. в код ХП добавить в конце код вида: SELECT... FROM ... WHERE KeyID = SCOPE_IDENTITY() Да в общем-то необязательно. Ведь я все равно REQUERY() буду делать - она и проявится. А вот значение ключевого поля мне нужно. Чтобы найти эту новую запись. Aleksey-KА в этом случае вы и так получает новую запись. Разумеется, это поле (IDENTITY) должно присутствовать в списке полей, как правило, оно является ключом таблицы. Запись-то есть, но ключевое поле ведь пустое, пока я REQUERY() не сделаю. А после REQUERY() как мне эту запись найти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2006, 20:11 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33603393&tid=1592046]: |
0ms |
get settings: |
5ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 529ms |

| 0 / 0 |
