|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
Делаю Select * from table1 into cursor _v1 и наблюдаю, что у поля autoinc это свойство при вновь загруженном foxe переносится в курсор, а после работы программы перестает переносится. Может кто сталкивался с этим? Что может влиять на работу Select? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 12:45 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
glamis, Ничего не понятно, куда у тебя что переносится или не переносится? какой тип у твоего поля с autoinc ? и какое имя у поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:45 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
AngelOKES glamis, Ничего не понятно, куда у тебя что переносится или не переносится? какой тип у твоего поля с autoinc ? и какое имя у поля? autoinc по определению только Int Но вопрос совершенно не понятен. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 13:46 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
Не переносится автоинкремент в курсор Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 15:30 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
Dima T Не переносится автоинкремент в курсор Команда SELECT SQL не всегда делает настоящую выборку в отдельный временный файл. Иногда просто накладывается фильтр на исходную таблицу и показывается как курсор. Потому такой курсор не всегда "писабельный", то есть обновляемый, но зато с "переносом" свойств. И для отмены такого поведения есть кляузы ReadWrite и NoFolter. При якобы переносе свойств результаты функции dbf() для исходной таблицы и курсора будут совпадать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 17:12 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 18:55 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
glamis Sergey Sizov, В обоих случаях использовалась одна и та же таблица, такой же точно Select. 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]Те, которые описаны в хелпе. И которые в неизвестных нам местах и количествах использовал в программе. Тебе что надо-то? Чтоб "передавалось" или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 19:57 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
Сергей уже ответил, но, вероятно, не очень понятно Код: sql 1.
Вопрос в том, что из себя физически представляет вот этот самый итоговый курсор _v1? У FoxPro есть такая "фича", что при определенных условиях этот курсор _v1 не является новой временной таблицей. А является той же самой таблицей table1, просто открытой в другой рабочей области Ну, а раз таблица та же самая, то и свойства полей те же самые. В частности, и автоинкрементные поля Тут следует заметить, что работа с такими "курсорам" в дальнейшем будет затруднена. Поэтому, как правило, стараются исключить подобное переоткрытие и заставить сделать выборку в новую временную таблицу. Для этого используют дополнительную опцию NOFILTER (или READWRITE) Код: sql 1.
или так Код: sql 1.
В обоих случаях будет создана новая временная таблица _v1 в которую скопируют данные из исходной таблицы table1. Ну, а раз таблица новая, то и структура полей новая. И автоинкремента в этой новой таблице не будет, поскольку в запросе не указано, что его надо сделать Проверить, чем же физически является курсор _v1 можно при помощи функции dbf(). Эта функция вернет имя таблицы, которая физически содержит отображаемые в этом курсоре данные Код: sql 1. 2.
Для временных таблиц там будет имя из цифр и расширение "tmp". А вот если там будет "table1.dbf", то значит и произошло переоткрытие исходной таблицы в другой рабочей области ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2020, 22:48 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
интересно, не знал что "select into cursor" может просто переоткрыть таблицу, я полагал что всегда будет создаваться некая новая область данных и она никак не будет связанная с источником, понимею когда пишут use и там бла-бла, тут можно играться с одной и той же рабочей областью, но чтобы select into cursor создавал некую связь, странно... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 06:50 |
|
Теряется свойство Autoinc
|
|||
---|---|---|---|
#18+
Это вопрос скорости. Скорости отображения результата. Фича тянется со времен FoxBase, когда старались выиграть каждую миллисекунду. Переоткрыть таблицу существенно быстрее, чем создавать новую таблицу и копировать в нее записи. По современной идеологии программирования - оно того не стоит. Сопутствующие проблемы и ограничения перевешивают выигрыш в скорости открытия. Но 30 лет назад логика была другая... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2020, 10:49 |
|
|
start [/forum/topic.php?fid=41&fpage=4&tid=1581549]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
295ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 406ms |
0 / 0 |