слетает индекс | |
---|---|
taty_2014 Сообщений: 4 Дата регистрации: 12.05.2014 |
Всем привет! ребят, подскажите пожалуйста. пришлось работать с чужой программой, но возникла проблема. создаю индекс таблицы, а он постоянно слетает. хотя если создам его через фокс все норм, а программно летит.в этой программе в некоторых формах стоит Data Environment, может из за этого, но я с этим никогда не работала, поэтому не знаю может быть в этом причина или нет.Может кто сталкивался с такой ситуацией!?
Исправлено 1 раз(а). Последнее : taty_2014, 19.11.18 12:37 |
Re: слетает индекс | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
А к чему относится первое слово цитаты? Цитата:С какой ТАКОЙ? Кто на ком стоял? ------------------ Лень - это неосознанная мудрость. |
Re: слетает индекс | |
---|---|
taty_2014 Сообщений: 4 Дата регистрации: 12.05.2014 |
с такой, когда индекс постоянно слетает!
|
Re: слетает индекс | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Вероятность очень мала. Обычно подобное уникально. А вообще - надо смотреть по коду, возможно где-то эта таблица просто переоткрывается без индекса. Т.е. поискать все команды USE с именем данной таблицы. И что понимается под "индекс постоянно слетает"? Что индекс отключается? Или просто становится не активным? Также надо бы уточнить, какой конкретно используется индекс - простой или составной? Т.е. IDX или CDX? Т.е. как-то конкретней формулировать саму проблему. Ну и почему нельзя, открыв базы данных в среде разработки - просто посмотреть, привязаны ли к данной таблице какие-то другие индексы. И есть ли необходимость использования той же самой таблицы для каких-то своих целей? Может быть использовать вместо нее курсор/таблицу-выборку? И действительно, как понимать "все норм" в начале? ;) В смысле: "проблемы нет"? Т.е. желательно приводить фрагменты своего кода. Для лучшей его читаемости лучше при этом использовать тэги "CODE" - выделив свой введенный код и нажав эту кнопку наверху окошка ввода. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 19.11.18 13:20 |
Re: слетает индекс | |
---|---|
Penner Сообщений: 4102 Откуда: Muenster Дата регистрации: 26.04.2002 |
еще возможно в самой прогремме где-то есть программное пересоздание индексов
------------------ Никогда не откладывайте на завтра, то, о чем можно забыть навсегда |
Re: слетает индекс | |
---|---|
Alsim Сообщений: 3636 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
Когда мне приходилось работать с данными чужих программ (метод "приставных стульчиков"), я никогда не создавал там свои индексы (поскольку лучше не трогать чужое, пусть работает себе как работало), а просто делал запрос к чужой таблице в курсор, а уж дальше делал с ним всё что хотел
Предполагаю, что Вам также захочется и что-то своё в чужую таблицу положить. Тогда кладём по тем правилам структуры, и не умничаем |
Re: слетает индекс | |
---|---|
taty_2014 Сообщений: 4 Дата регистрации: 12.05.2014 |
Таблица создается таким образом:
IF NOT FILE('G:\...\PVNB150.DBF') SELECT 0 USE G:\...\PVN150.DBF COPY STRUCTURE TO G:\...\PVNB150.DBF USE ENDIF А затем мне нужно создать к PVNB150.DBF индексы: IF NOT FILE('G:/.../PVNB150.cdx') SELECT 0 USE G:/.../PVNB150.dbf INDEX on sch+stip+sbi+DTOC(d) TAG SDS OF G:/.../PVNB150.cdx ADDITIVE INDEX on ch+tip+bi+DTOC(d) TAG DSE OF G:/.../PVNB150.cdx ADDITIVE INDEX on DTOC(d)+sch+stip+sbi TAG DAT OF G:/.../PVNB150.cdx ADDITIVE USE ENDIF SELECT C USE G:/.../PVNB150 alias 'pvnb' SHARED SET ORDER TO SDS А при вводе записи выскакивает ошибка: "Ошибка при построении ключа для индекса G:/.../PVNB150.cdx тег SDS ". длина всех полей максимум 90 получается, то есть за пределы возможного вроде бы не выходит! Исправлено 1 раз(а). Последнее : taty_2014, 20.11.18 09:46 |
Re: слетает индекс | |
---|---|
taty_2014 Сообщений: 4 Дата регистрации: 12.05.2014 |
Все, проблема решилась: DTOC(d,1) оказывается нужно.
|
Re: слетает индекс | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Во-первых, как я выше уже замечал, для удобочитаемости текст кода следует обрамлять тэгами CODE - открывающим и закрывающим, либо просто выделив текст и нажав кнопку CODE в меню над окошком ввода.
... Ну тогда все дальнейшее не нужно. ... Разве что все-таки замечу, что обычно через sql-выборку все же проще делать подобные вещи. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 4 раз(а). Последнее : Crispy, 20.11.18 10:13 |
Re: слетает индекс | |
---|---|
ry Сообщений: 2113 Дата регистрации: 24.09.2007 |
Пока вижу 2 возможных источника ошибки:
1. Указание имени индексного cdx в команде Index создает неструктурированный индекс. Чтобы его затем использовать, надо принудительно указывать имя индексного файла. Если же при в команде Index имя индексного файла не указывать, будет создан структурированный индекс в файле cdx, имя которого совпадает с именем файла dbf. Additive для структурированных индексов указывать не обязательно. То есть попробуйте так:
... А, проблема уже решена... Исправлено 1 раз(а). Последнее : ry, 20.11.18 10:17 |
Re: слетает индекс | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
DTOS() то же самое даёт, но чуть короче и понятнее. А так - вполне логично что при разных настройках SET DATE/SET CENT будет полная каша в том что делаает DTOC() с одной и той же датой.
И хотелось бы верить что в реальной программе не указаны полные пути с буквами дисков прямо в исходном коде В cdx все теги будут в "компактном" формате, поэтому при COLLATE=MACHINE максимальный размер ключа составит 240 символов, а при других COLLATE 120. Нет, COLLATE может учитываться лишь в компактном индексе, а значит минимальный размер ключа будет 120 символов (ну если не учитывать что потенциально 1 байт скушает признак NULL-а, если индексное выражение в принципе может обращаться в NULL - тогда 119 символов останётсяна сам ключ). ------------------ WBR, Igor |
Re: слетает индекс | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
При SET COLLATE язык, действительно сокращаятся длина индекного значения до 50, как в СМС0ках, до 70. Никто же не расчитывал, что кроме англов будут использоват систему программирования ) |
Re: слетает индекс | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
До 120-ти (или 119). Читай внимательно хелп. "Visual FoxPro System Capacities" там всё есть. Правда, похоже, самого оригинального хелпа уже онлайн и нету... ------------------ WBR, Igor |
Re: слетает индекс | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Игорь, я веть, как все люди, сначала сам получаю ограничения (фокс в этом благосклонен - сообщает). И от того же е..к фоксу, и вам желаю, чтобы вы удачно отладились))
|
Re: слетает индекс | |
---|---|
of63 Автор Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Спрашивающий мтк, доолжен набрать наши нещастные команды... Или просто
Игорь, про методологию сравнений строк в редиме COLLATE я все знаю, и ты знаешь больше. Я живу в коллате RUSIAN? и буду за это держатся ) Доб. Туплю Исправлено 2 раз(а). Последнее : of63, 23.11.18 00:18 |
© 2000-2024 Fox Club  |