powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + SQL поле IDENTITY
25 сообщений из 215, страница 7 из 9
VFP + SQL поле IDENTITY
    #33603616
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ!

Странный у вас метод ведения разговора, чем вежливей вам отвечают тем больше вы хамите..

я думал вам интересен наш опыт, вы же просто пытаетесь представить лично меня плохим программистом.. уверяю вас это не лучший метод ведения беседы.

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

Вы демонстрируете потрясающую безграмотность и самоуверенность именно в программировании.

Вы уверены, что программированием - это то, чем Вам стоит заниматься?

Встречный вопрос - а вам??? вам стоит заниматься?

давайте не будем переходить на личности, и обсуждать особенности характера, давайте говорить по существу если вам это интересно, если не интересно, то можно закончить беседу..


авторФункция может дать значение ДО момента физического создания записи. Поле Identity только ПОСЛЕ. Это два принципиально разных подхода.
я это понимаю не хуже вас поверте, и не просто понимаю но применял, лично, но поля - счетчики имеются, -> с ними можно работать так же как и с полями ident в SQL, не верите мне, подключите ORACLe поработайте проверте, но не делайте своих умозаключений относительно собеседника.

авторТ.е. поля типа Identity вообще не используются, а код записи формируется на стороне клиента. мой ответ основывался на том, что таблиц VFP у нас нет(если проект вообще не на VFP).

авторНе надо путать права доступа к данным и интерфейс. Это два разных направления. Да, они взаимосвязаны, но это не одно и то же
я и не путаю, это было ваше предположение, я просто вам разьяснил, что есть привелегии базы, а есть привилегии системы(программы).
Есть люди которые не совсем понимают с первого раза что им говорят, поэтому приходится повторять. :-))

авторВы уверены, что программированием - это то, чем Вам стоит заниматься?

По сути Вы сказали: Программист не рашает задачи, он представляет (показывает) решения программы. А саму программу кто пишет?

Вы показывали то, что возвращает профайлер. Где этот код в RV? Надо думать, он его как-то сам сформировал. На основании чего? На основании тех данных, которые были введены и с учетом настроек сделанных при создании структуры RV.

Т.е. RV сформулировал (создал) запрос к серверу, передал ему этот запрос, получил ответ, трансформировал этот ответ в соответсвующий вид. Это еще не считая того, что делает RV на стороне клиента ДО формирования запроса серверу.
я вообще говорил о задачах приложения(программы), т.е. расчет начисления 13-ой зарплаты, или расчет посещаемости студентами лекций и т.д. я говорил о расчете - вы опять не правильно меня поняли и сделали заявления о моей профнепригодности. Я вообще не говорил о внутренней работе RV и ODBC.

авторДело в том, что большинство людей не могут ясно выражать свои мысли да и еще дело в том,что некоторые люди плохо понимают что им говорят, приходится обьяснять и обьяснять..

авторВы демонстрируете потрясающую безграмотность и самоуверенность именно в программировании. - вы демонстрируете потрясающую грамотность в одной узкой области... и самоуверенность основанную на знании этой узкой области, если бы вам в течении года приходилось по несколку раз пересаживаться на разные СУБД, я не знаю, готовы ли вы были бы так на вскидку цитировать коды програм, написанных вами, приводить куски документации для примера, говорить о конкретных приемах премененных в той или другой системе.
Я сомневаюсь что человек эрудированный в разных областях знаний, способен на вскидку возпроизвести теорию относительности, и тут же сесть за доказательство теоремы(гипотезы) ферма.. а потом расказать об особенностях воздействия укусов мухи ЦЦ крупно-рогатого скота на биржевые котировки
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603628
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OopyrДа в общем-то необязательно. Ведь я все равно REQUERY() буду делать - она и проявится. А вот значение ключевого поля мне нужно. Чтобы найти эту новую запись.

А какое отношение имеет хранимая процедура сервера на добавление к REQUERY() ? Или вы используете RV и SQLEXEC вместе?
Или я чего-то не понимаю?
С уважением, Алексей.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603673
Oopyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-K

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

Есть общая задача. Фоксовский грид показывает данные с SQL Server. Эти данные представлены в фоксе RV, CAD или курсором - не важно. Условно назову эти данные выборкой.
Рядом с гридом кнопка "Добавить". Юзер её нажимает, всплывает форма, заполняются поля, юзер нажимает кнопку "Сохранить". После сохранения нужно, чтоб указатель записи грида встал на вновь добавленную запись.

Здесь есть 2 пути:
1. Кинуть новую запись прямиком в SQL. Но тогда я её не увижу в гриде, пока не сделаю REQUERY(). После этого указатель будет на первой записи выборки. Тут-то мне и поможет ХП, возвращающая ключ. Но если в таблице 25 полей, то надо иметь ХП с 25-ю параметрами, что превращается в кошмар для программиста.

2. Вставлять записи в выборку, а потом делать TABLEUPDATE(). Гораздо удобнее для программиста. Но ключ-то генерируется на сервере, а в выборке он остаётся 0. Это вынуждает меня делать REQUERY(). Указатель идёт на первую запись и как мне теперь найти ту запись, что я только что вставил?
SCOPE_IDENTITY не поможет. @@IDENTITY тоже может вернуть совершенно левый ключ.

В общем по варианту 1 понятно как поступать. А вот по варианту 2 - нет.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603698
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oopyr...
Здесь есть 2 пути:
1. Кинуть новую запись прямиком в SQL. Но тогда я её не увижу в гриде, пока не сделаю REQUERY().

Каким образом вам поможет REQUERY() если вы получили выборку с сервера через SQL pass-through.
Я делаю не так. Я через ХП добавляю запись на сервер и получаю ее. А потом добавляю в локальный курсор INSERT INTO ... VALUES (...).
Но приусловии, что вся работа с сервером происходит через pass-through (SQLEXEC).
С уважением, Алексей.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603726
Oopyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом вам поможет REQUERY() если вы получили выборку с сервера через SQL pass-through.

То есть мы о разных вещах говорили. Я имел ввиду RV или CAD.

В Вашем варианте получается дублирование вставки: один раз в SQL, второй - в локальный курсор. Так? На мой взгляд нетривиальный подход, поэтому я не сразу понял.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603731
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oopyr Каким образом вам поможет REQUERY() если вы получили выборку с сервера через SQL pass-through.

То есть мы о разных вещах говорили. Я имел ввиду RV или CAD.

В Вашем варианте получается дублирование вставки: один раз в SQL, второй - в локальный курсор. Так? На мой взгляд нетривиальный подход, поэтому я не сразу понял.

сделайте так:

sqlexec(k,'insert into dbo.rasp(date_reg) values (GETDATE());select * from dbo.rasp where vhod_num=SCOPE_IDENTITY()','rasp')

получите сразу новую запись для работы
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603745
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oopyr Каким образом вам поможет REQUERY() если вы получили выборку с сервера через SQL pass-through.

То есть мы о разных вещах говорили. Я имел ввиду RV или CAD.

В Вашем варианте получается дублирование вставки: один раз в SQL, второй - в локальный курсор. Так? На мой взгляд нетривиальный подход, поэтому я не сразу понял.
Вы все-таки меня не поняли. Я не использую технологии RV и CAD. Только pass-through (PT). Никакого дублирования нет. Курсор локальный НИКАК не связан с сервером, а есть результат работы хранимой процедуры, вызванной через PT.
Обновление происходит СНАЧАЛА на сервере через хранимую процедуру и после УСПЕШНОГО завершения работы хранимой процедуры на сервере, она возвращает добавленную (обновленную запись), которую я добавляю (обновляю ) в локальном курсоре через INSERT INTO ...(REPLACE)
Вы же писали, что:
OopyrЭти данные представлены в фоксе RV, CAD или курсором - не важно. Условно назову эти данные выборкой..

Т.е. вы не оговорили, как получили локальный курсор. Вот я и обратил ваше внимание, что если локальный курсор не связан с "сервером", он не будет автоматически обновляться при REQUERY().
С уважением, Алексей.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603782
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OopyrЯ имел ввиду RV или CAD
Если говорить о RV или CAD, то однозначно корректного решения нет. По крайней мере, пока у меня ничего не получилось. Есть решения, применимые при определенных ограничениях.

Собственно, есть 2 принципиальных способа решения:

1) Прочитать номер соединения и через SQLExec() взять @@IDENTITY.

Недостаток очевиден. Не факт, что получишь значение для текущей таблицы. SCOPE_ITENTITY() брать бессмысленно. Другой scope. Всегда будет возвращать NULL

Работает, если у таблицы нет триггеров на вставку, которые сами вставляют записи в таблицы с полями IDENTITY

2) Ввести в таблицу дополнительное поле (или набор полей), позволяющее однозначно идентифицировать новую запись в текущей выборке RV или CAD. После добавления новой записи и перезапроса искать новую запись опираясь на это дополнительное поле.

Собственно, все это громадное обсуждение вертится вокруг второго способа.

Вводится дополнительное поле - идентификатор пользователя (owner_id).

В системе пресекаются попытки войти двум пользователям с одним значением owner_id.

Тогда новая запись - это запись с максимальным значением ID в пределах одного значений owner_id
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603789
Oopyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну теперь понятно.

Собственно ещё есть способ

3) Вернуться к старым временам и генерить ключ на клиенте. В SQL ведь совсем необязательно иметь поле identity в каждой таблице. Можно и обычный integer назначить на роль primary key. Главное уникальность обеспечить.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33603799
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoXXX
Проблема в том, что Вы непоследовательны и забывчивы. Вас все время "сносит" в сторону от основной темы, Вы все время намекаете на мою некомпетентность, у Вас все время появляются новые ограничения, Вы все время читаете не то, что я написал и т.д. и т.п.

По поводу Вашего стиля работы с RV - я уже давно все понял, многократно повторил самыми разными способами. Указал на Ваши ошибки. Посмотрите мой ответ Oopyr . Это для меня было очевидно с самого первого Вашего поста. Из Вас буквально клещами приходилось тянуть, что да, действительно, есть такие ограничения.

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

Собственно ещё есть способ

3) Вернуться к старым временам и генерить ключ на клиенте. В SQL ведь совсем необязательно иметь поле identity в каждой таблице. Можно и обычный integer назначить на роль primary key. Главное уникальность обеспечить.

Уважаемы Oopyr!

если вас не смущает работа с SQLexec() функциями, то вашу проблему можно решить следующим методом:

use RView in 0
select RView
работаем в гриде
------
теперь добавляем новую запись:
k=CursorGetProp("ConnectHandle")
sqlexec(k,'insert into dbo.rasp(date_reg) values (GETDATE());select SCOPE_IDENTITY() as id','id')
requery()
locate for RView.id=id.id
указатель на новой записи в RView, работайте с ней, кроме того видимы все остальные записи в RView.


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

Мда, что-то не густо с примерами кода
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33604360
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oopyr
Здесь есть 2 пути:
1. ...
2. Вставлять записи в выборку, а потом делать TABLEUPDATE(). Гораздо удобнее для программиста. Но ключ-то генерируется на сервере, а в выборке он остаётся 0. Это вынуждает меня делать REQUERY(). Указатель идёт на первую запись и как мне теперь найти ту запись, что я только что вставил?
В общем по варианту 1 понятно как поступать. А вот по варианту 2 - нет.
Прогони код из поста 2436139 - CAD в VFP 9 решает вопрос о передаче ключевого поля, присвоенного сервером в фокс без requery() всего курсора. Сам, правда с CAD я пока на 8 фоксе работаю, там такого прибамбаса еще нет.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33604427
Sergej_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
Если говорить о RV или CAD, то однозначно корректного решения нет.
Собственно, есть 2 принципиальных способа решения:

1)...
2) Ввести в таблицу дополнительное поле (или набор полей), позволяющее однозначно идентифицировать новую запись
Согласен. По крайней мере в 8 и более старых версиях фокса.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33604629
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist FoXXX

Мда, что-то не густо с примерами кода

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

Мда, что-то не густо с примерами кода

не густо, на вскидку, надеюсь критики кода нет??

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

ааа... а были вопросы???

если по поводу RV то вродебы все ответил..

процедуры на VFP не запускаем, все работает на сервере, у нас только результаты через RV.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605072
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoXXX PaulWistДык, что критиковать, если на мои вопросы я не увидел ни строчки.

ааа... а были вопросы???

если по поводу RV то вродебы все ответил..

процедуры на VFP не запускаем, все работает на сервере, у нас только результаты через RV.

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

значит вопросов нет
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605250
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoXXX PaulWistДык, что критиковать, если на мои вопросы я не увидел ни строчки.

ааа... а были вопросы???

если по поводу RV то вродебы все ответил..

процедуры на VFP не запускаем, все работает на сервере, у нас только результаты через RV.
У меня есть вопросы, можно? :)
Данные вы извлекаете с помощью RV, которые могут быть построенны на основе не только базовых таблиц сервера баз данных (MS SQL, ORACLE и пр.), но и на основе объектов сервера типа View. А вот при желании обновить данные (добавить на сервер), вы вызываете соответствующие хранимые процедуры сервера?
Я правильно вас понял?
С уважением, Алексей.
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605711
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K FoXXX PaulWistДык, что критиковать, если на мои вопросы я не увидел ни строчки.

ааа... а были вопросы???

если по поводу RV то вродебы все ответил..

процедуры на VFP не запускаем, все работает на сервере, у нас только результаты через RV.
У меня есть вопросы, можно? :)
Данные вы извлекаете с помощью RV, которые могут быть построенны на основе не только базовых таблиц сервера баз данных (MS SQL, ORACLE и пр.), но и на основе объектов сервера типа View. А вот при желании обновить данные (добавить на сервер), вы вызываете соответствующие хранимые процедуры сервера?
Я правильно вас понял?
С уважением, Алексей.

Hi Алексей!

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

с уважением FoXXX
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605732
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так..., вопрос на вопрос. Что за привычка...
Вы не ищите подвоха в моем вопросе! Его его там!
Давайте тогда для простоты будете отвечать на мои вопросы по частям:
1. Данные вы извлекаете с помощью RV, которые могут быть построенны на основе не только базовых таблиц сервера баз данных (MS SQL, ORACLE и пр.), но и на основе объектов сервера типа View? Это так?

С уважением, Алексей
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605767
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey-KТак..., вопрос на вопрос. Что за привычка...
Вы не ищите подвоха в моем вопросе! Его его там!
Давайте тогда для простоты будете отвечать на мои вопросы по частям:
1. Данные вы извлекаете с помощью RV, которые могут быть построенны на основе не только базовых таблиц сервера баз данных (MS SQL, ORACLE и пр.), но и на основе объектов сервера типа View? Это так?



Алексей, молодец - 5 баллов.

PS: РжуНеМогу
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605902
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot PaulWist

Алексей, молодец - 5 баллов.

PS: РжуНеМогу [/quot]

матри не аппп не лопни..
...
Рейтинг: 0 / 0
VFP + SQL поле IDENTITY
    #33605960
FoXXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-KТак..., вопрос на вопрос. Что за привычка...
Вы не ищите подвоха в моем вопросе! Его его там!
Давайте тогда для простоты будете отвечать на мои вопросы по частям:
1. Данные вы извлекаете с помощью RV, которые могут быть построенны на основе не только базовых таблиц сервера баз данных (MS SQL, ORACLE и пр.), но и на основе объектов сервера типа View? Это так?

С уважением, Алексей

Алексей!

Хотел бы дать пояснения

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

2.как я уже говорил, у нас есть програмист БД, который занимется серверами и лучше меня знает эту кухню, разные там тонкости типа BOLа, я как бы больше занимаюсь идеалогией, постановкой, "руководством", самому в этом копаться уже лень, но общие принципы могу прокоментировать

3.подвоха не ищу, тяжело отвечать не правильно поняв вопрос, мало-ли что вы имеете ввиду, как например чел. спросил о расчетах, а имел ввиду работу RV, вот и думай тут.. или чел. о транзакциях говорит, а у нас клиент на автомате выставленно в ODBC

4.если вам для пользы дела интересно, то общие принципы обрисовать могу.
если просто пофлудить - то это лучше к ПаУлю, с ним пофлудить и посмеяться можно
...
Рейтинг: 0 / 0
25 сообщений из 215, страница 7 из 9
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + SQL поле IDENTITY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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