Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Теряется свойство Autoinc / 10 сообщений из 10, страница 1 из 1
08.06.2020, 12:45
    #39967031
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Делаю

Select * from table1 into cursor _v1

и наблюдаю, что у поля autoinc это свойство при вновь загруженном foxe переносится в курсор, а после работы программы перестает переносится. Может кто сталкивался с этим? Что может влиять на работу Select?
...
Рейтинг: 0 / 0
08.06.2020, 13:45
    #39967066
AngelOKES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
glamis,
Ничего не понятно, куда у тебя что переносится или не переносится? какой тип у твоего поля с autoinc ? и какое имя у поля?
...
Рейтинг: 0 / 0
08.06.2020, 13:46
    #39967067
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
AngelOKES
glamis,
Ничего не понятно, куда у тебя что переносится или не переносится? какой тип у твоего поля с autoinc ? и какое имя у поля?

autoinc по определению только Int
Но вопрос совершенно не понятен.
...
Рейтинг: 0 / 0
08.06.2020, 15:30
    #39967108
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Не переносится автоинкремент в курсор
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create Table t1 free (id int autoinc, text c(10))
insert into t1 (text) values ('aaa')
insert into t1 (text) values ('bbb')
insert into t1 (text) values ('ccc')

select * from t1 into cursor c1 readwrite
insert into c1 (text) values ('ddd')
brow
...
Рейтинг: 0 / 0
08.06.2020, 17:12
    #39967143
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Dima T
Не переносится автоинкремент в курсор
Угу. Но топикстартер видимо не знает про некоторые способности фокса и потому принимает побочные эффекты за перенос свойств.
Команда SELECT SQL не всегда делает настоящую выборку в отдельный временный файл. Иногда просто накладывается фильтр на исходную таблицу и показывается как курсор. Потому такой курсор не всегда "писабельный", то есть обновляемый, но зато с "переносом" свойств. И для отмены такого поведения есть кляузы ReadWrite и NoFolter. При якобы переносе свойств результаты функции dbf() для исходной таблицы и курсора будут совпадать.
...
Рейтинг: 0 / 0
08.06.2020, 18:55
    #39967163
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Sergey Sizov,

В обоих случаях использовалась одна и та же таблица, такой же точно Select. в таблице содержалось поле uid I autoinc.

1-й случай: просто открытый fox.
Use table1
Select * from table1 into cursor _v1

2-й случай: внутри работающего кода
Use table1
Select * from table1 into cursor _v1

В первом случае поле _v1.uid имеет тип I autoinc, во 2-м _v1.uid имеет тип I.
Вопрос в том, как понять - какие установки могут влиять на работу Selecta.
...
Рейтинг: 0 / 0
08.06.2020, 19:57
    #39967172
Sergey Sizov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
glamis
Sergey Sizov,

В обоих случаях использовалась одна и та же таблица, такой же точно Select.
Кто бы мог подумать![/quot] в таблице содержалось поле uid I autoinc.

1-й случай: просто открытый fox.
Use table1
Select * from table1 into cursor _v1
[/quot]
А теперь
?dbf()
disp stat
2-й случай: внутри работающего кода
Use table1
Select * from table1 into cursor _v1

И тут
?dbf()
disp stat
И сравниваем.[/quot]
В первом случае поле _v1.uid имеет тип I autoinc, во 2-м _v1.uid имеет тип I.
Вопрос в том, как понять - какие установки могут влиять на работу Selecta.[/quot]Те, которые описаны в хелпе. И которые в неизвестных нам местах и количествах использовал в программе.
Тебе что надо-то? Чтоб "передавалось" или нет?
...
Рейтинг: 0 / 0
08.06.2020, 22:48
    #39967196
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Сергей уже ответил, но, вероятно, не очень понятно

Код: sql
1.
Select * from table1 into cursor _v1



Вопрос в том, что из себя физически представляет вот этот самый итоговый курсор _v1?

У FoxPro есть такая "фича", что при определенных условиях этот курсор _v1 не является новой временной таблицей. А является той же самой таблицей table1, просто открытой в другой рабочей области

Ну, а раз таблица та же самая, то и свойства полей те же самые. В частности, и автоинкрементные поля

Тут следует заметить, что работа с такими "курсорам" в дальнейшем будет затруднена. Поэтому, как правило, стараются исключить подобное переоткрытие и заставить сделать выборку в новую временную таблицу. Для этого используют дополнительную опцию NOFILTER (или READWRITE)


Код: sql
1.
Select * from table1 into cursor _v1 NOFILTER



или так

Код: sql
1.
Select * from table1 into cursor _v1 READWRITE



В обоих случаях будет создана новая временная таблица _v1 в которую скопируют данные из исходной таблицы table1. Ну, а раз таблица новая, то и структура полей новая. И автоинкремента в этой новой таблице не будет, поскольку в запросе не указано, что его надо сделать

Проверить, чем же физически является курсор _v1 можно при помощи функции dbf(). Эта функция вернет имя таблицы, которая физически содержит отображаемые в этом курсоре данные

Код: sql
1.
2.
Select * from table1 into cursor _v1 NOFILTER
?dbf("_v1")



Для временных таблиц там будет имя из цифр и расширение "tmp". А вот если там будет "table1.dbf", то значит и произошло переоткрытие исходной таблицы в другой рабочей области
...
Рейтинг: 0 / 0
09.06.2020, 06:50
    #39967235
AngelOKES
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
интересно, не знал что "select into cursor" может просто переоткрыть таблицу, я полагал что всегда будет создаваться некая новая область данных и она никак не будет связанная с источником, понимею когда пишут use и там бла-бла, тут можно играться с одной и той же рабочей областью, но чтобы select into cursor создавал некую связь, странно...
...
Рейтинг: 0 / 0
09.06.2020, 10:49
    #39967299
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Теряется свойство Autoinc
Это вопрос скорости. Скорости отображения результата. Фича тянется со времен FoxBase, когда старались выиграть каждую миллисекунду. Переоткрыть таблицу существенно быстрее, чем создавать новую таблицу и копировать в нее записи.

По современной идеологии программирования - оно того не стоит. Сопутствующие проблемы и ограничения перевешивают выигрыш в скорости открытия. Но 30 лет назад логика была другая...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Теряется свойство Autoinc / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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