
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.60] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
скажу сразу: FAQ на эту тему прочёл внимательно
суть проблемы: делаю учебное задание на Delphi(Delphi5,Delphi7,32-bit Delphi из Borland Studio 2006- ошибка одна и та же). задание заключается в создании простенькой БД с возможностью редактировать, сортировать... вот тут-то и начинаются проблемы: после внесения изменений в любое из полей сортировка пишет 'index is out of date'. я уже ставил WinXp на другой винт, другую версию Delphi(из вышеперечисленных), и писать базу с нуля- всё та же фигня патчей, указанных в FAQ скачать не смог. поможите люди добрые, срочно надо! (предпочитаю использовать Delphi7) ![]() ![]() Table1.post; Table1.FlushBuffers; |
Сообщ.
#2
,
|
|
|
да, сколько раз говорить, парадокс на то он и парадокс... у него вечные проблемы с индексами. универсальный патч, от всех бед парадокса - переход на другие субд. или ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться. все. точка.
|
Сообщ.
#3
,
|
|
|
Цитата и какую лучше выбрать? почему-то учащимся рекомендуют Paradox, в книгах так же примеры даются или с использованием Paradox, или разных субд. по умолчанию, опять таки выбирается Paradox! считаю совершенно необходимым занести в FAQ предупреждение о парадоксе- я там ничего плохого о нём не нашёл. и дать там же рекомендацию на другую субд для новичков универсальный патч, от всех бед парадокса - переход на другие субд Цитата т е:или ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться 1.создавать индексы перед каждой сортировкой 2 выполнить сортировку 3 после - каждый раз избавляться от них - так? возможно этот вариант будет приемлемым для меня- иначе слишком много переделывать придётся при переходе, например, на DBaseIV |
Сообщ.
#4
,
|
|
|
Цитата ya2500 @ почему-то учащимся рекомендуют Paradox, в книгах так же примеры даются или с использованием Paradox, или разных субд. по умолчанию, опять таки выбирается Paradox! Видимо парадокс наиболее прост для освоения учащимися принципов построения и работы с реляционными базами данных. Так же возможно парадокс более "лучше" работает с bde, то есть интерфейсы бде наиболее лучше подходят именно для парадокса. Цитата ya2500 @ и какую лучше выбрать? ... я бы в летчики пошел - пусть меня научат! ... (с) выбирай на вкус и цвет. Цитата ya2500 @ именно так т е: 1,2,3... - так? |
Сообщ.
#5
,
|
|
|
![]() ![]() procedure TForm1.N3Click(Sender: TObject);// от А до Я begin // Перевод таблицы в режим монопольного доступа Table1.Close; Table1.Exclusive:=true; Table1.Open; // создание индекса сортировки Table1.AddIndex('indFIO','FIO',[ixDescending,ixCaseInsensitive]); //*** // сортировка Table1.IndexName:='indFIO'; // удаление индекса сортировки Table1.DeleteIndex('indFIO'); // *** // Закрытие режима монопольного доступа к таблице Table1.Close; Table1.Exclusive:=false; Table1.Open; // Ставим метку напр соотв подпункта меню N3.Checked:=true; end; Цитата Table is not indexed. Index does not exist. Index: indFIO. соответственно, без строчек помеченных *** сортировка работала (когда в базе были соотв индексы, которые я щазз удалил, и только если поля базы не были изменены) другие варианты сортировки (аналогичные, но без строчек с *** ) выдают Цитата естественно, так как индексы я из базы поубиралIndex does not exist. Index: <соотв индекс>. сдаётся мне, что между *** и *** должно быть что-то ещё... UPD собственно, если закомментить сортировку и удаление индекса- та же ошибка, т е почему-то не удаётся создать индекс UPD ещё после нескольких попыток и разнообразных исследований поведения проги в дикой среде, отложил этот вариант проекта, и начинаю делать под MS Access/ADO UPD для ADO чего-то не хватает... буду делать под DBaseIV/BDE: никуда пока от BDE не деться... UPD какой уродский этот DBaseIV- это что-то... |
Сообщ.
#6
,
|
|
|
похоже, получилось у меня на Paradox7/BDE.
сортировка: ![]() ![]() procedure TForm1.N5Click(Sender: TObject); begin // Перевод таблицы в режим монопольного доступа Table1.Close; Table1.Exclusive:=true; Table1.Open; // Выбор индекса сортировки Table1.IndexName:=''; // *** Table1.IndexDefs.Clear; Table1.AddIndex('Code_ind','Code',[ixCaseInsensitive]); Table1.IndexName:='Code_ind'; // Закрытие режима монопольного доступа к таблице Table1.Close; Table1.Exclusive:=false; Table1.Open; // Ставим метку напр соотв подпункта меню N5.Checked:=true; end; редактирование производится в отдельной форме. добавил пару строк при её активации: ![]() ![]() procedure TForm1.N1Click(Sender: TObject); begin Form1.FormStyle:=fsnormal; Form2.FormStyle:=fsstayontop; Form2.enabled:=true; Form2.visible:=true; Form1.enabled:=false; // Table1.IndexName:=''; // *** Table1.IndexDefs.Clear; // *** end; p.s. да, и код открытия второй формы получился немного страшным- можно бы здесь зараз это и дообсудить суть в чём: при обычном открывании формы (с Create связываться не хочу) - да, выпрыгивает вторая форма поверх первой, а после её закрытия главная форма 'прячется' под другие раскрытые окна на десктопе(если они есть- они оказываются поверх нее), что очень не удобно- у меня постоянно на десктопе окон понаоткрыто p.p.s. вот и всё. и спасибо to SPrograMMer! UPD поторопился я с выводами(насчёт 'вопрос решён') НО, пока всё работает! да, и окончательный вариант получился на Delphi7, хотя думаю, это не принципиально |
Сообщ.
#7
,
|
|
|
// !!! ??? , млин... Paradox/DBE часть вторая: глюки возращаются
всё почти работает: теперь можно редактировать и сортировать в любом порядке без глюков, даже удалять записи можно, НО не добавлять: автоинкрементное поле Code остаётся пустым, а при попытке отсортировать таблицу после добавления записи возникает ошибка "Field value out of lookup table range" да, и после удаления записи (например, номер 2) остальные поля автоинкрементного поля не пересчитываются... видимо, у этих ошибок один общий корень так что вопрос, всё-таки не решён (думаю, проблема вполне вписывается в ЭТУ тему, и не стоит заводить новую) UPD да, проблема видимо в автоинкрементном поле. надо его как-то правильно пересчитывать... щазз сунулся- оно вроде бы не допускает редактирования. щазз разбираюсь... UPD Цитата тут есть видимо, некоторые моменты, которые мне не совсем понятны в плане реализации. с этими же автоинкрементами, к примеру. помогите, плизз...ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться UPD я вот что подумал: ведь перед вставкой записи нужно зарезервировать память под неё? с индексами вышло так: заранее в базе заданы индексы, а я из проги их стираю и создаю(такие же как в безе) когда надо.- бред конечно же, НО в свете проблемы с вставкой новой записи вроде бы похоже на то, что если и индексы новые не создаются, возможно, необходимо резерировать память ИТОГО: вопрос первый: как резервировать память под создание новых индексов и записей? вопрос второй: как обновлять значения автоинкрементного поля? пересчитывать обычные поля я умею, но это... UPD щазз поправил свои БД- работает. удалось уточнить условие возникновения ошибки "Field value out of lookup table range": теперь, с исправленными базами, она возникает только тогда, когда после изменения данных в LookupTable, данные ч/з DBLookupComboBox подставляем в запись основной таблицы. при этом не важно, пытаемся ли мы вставить новое значение, либо любое из старых- в любом случае возникает та же ошибка. такая ситуация уже оставляет надежду на то, что мне, может быть, удастся справиться с оставшейся частью проблемы самостоятельно |
Сообщ.
#8
,
|
|
|
Цитата ya2500 @ да, и после удаления записи (например, номер 2) остальные поля автоинкрементного поля не пересчитываются... автоинкрементные поля никогда не пересчитываются... поэтому в таблицу случаются "дырки"... ![]() Цитата ya2500 @ вопрос второй: как обновлять значения автоинкрементного поля? пересчитывать обычные поля я умею, но это... низя этого делать, точнее можно, но, лучше - не делать. ну и что что у тебя записи, с ID: ![]() |
Сообщ.
#9
,
|
|
|
Я бы посоветовал начать с ADO/ACCESS. НУ а затем уже что нить посерьезнее.
По теме: нигде не нашел решение данного вопроса. Слетают они(индексы) и все тут ... |
Сообщ.
#11
,
|
|
|
вроде бы сделал. всё работает, только редактор LookupTable пришлось вынести в отдельную прогу
а дырки в автоинкрементных полях- всё-таки как-то нехорошо НО самая большая щазз проблема- объяснить заказчице, как объяснить преподу, что все эти навороты с индексами необходимы для работоспособности программы. там ещё делается пересчёт записей за опр период по опр признаку. так мне пришлось вместо того, чтоб поставить фильтр и посчитать- наоборот: снимать все фильтры и пересчитывать, проверяя условия вручную. да и то из-за странных глюков пришлось вынести редактор LookupTable отдельной прогой, чтоб их избежать щазз жду звонка заказчицы, и заодно пытаюсь упростить прогу |
Сообщ.
#12
,
|
|
|
Цитата ya2500 @ щазз жду звонка заказчицы не завидую я твоей заказчице... знала бы она на чём будет работать... почему бы не выбрать изначально MySQL или ADO???? ведь про ADO тоже дофига чего пишут в мануалах и букварях!!! |
Сообщ.
#13
,
|
|
|
сорри за офф-топ: как 'отстреляюсь' от проги окончательно- отмечу 'вопрос решён',
а пока- офф-топ: dron-s, ситуация такая: я - сервисный инженер, собираю/ремонтирую компы, вышел в общий зал, а там так же работает соседняя контора, которая делает рефераты и всё такое прочее. какая-то девочка по ошибке обратилась ко мне с просьбой написать простую прогу. зная, что проги у нас никто не пишет( а так же желая заиметь какой-то опыт в этом деле) я взялся за эту работу. прога оказалась сложнее, чем я полагал. а Delphi- глючнее. у меня никогда раньше Delphi5 не глючил. потом она призналась, что это вообще- дипломная работа! ( а сроки изначально давались два дня. к счастью за эти два дня можно было наваять хоть что-то, а потом- уже делать нормальную версию). я пока ещё не признался, что это- первая программа, которую я пишу за деньги ( ну, не совсем первая- много лет назад написал прогу для плиточника по расчёту кол-ва плитки с учётом обрезаний и пр, но в ней просто была система формул. он некоторое время придумывал всякие дополнения, которые надо дописать, пока не скачал где-то такую прогу, которая помимо расчётов рисует эту плику в доме в 3D. на этом вечное совершенствование проги и закончилось) я так больше для себя пишу. даже были(вроде бы) проэкты, доведённые до конца p.s. да, насчёт заказчицы- звонила, сказала, что к четырём приедет. заранее позвонит ещё раз |
Сообщ.
#14
,
|
|
|
Цитата ya2500 @ задание заключается в создании простенькой БД с возможностью редактировать, сортировать... Цитата ya2500 @ прога оказалась сложнее, чем я полагал. а Delphi- глючнее. у меня никогда раньше Delphi5 не глючил. потом она призналась, что это вообще- дипломная работа! ( а сроки изначально давались два дня. к счастью за эти два дня можно было наваять хоть что-то, а потом- уже делать нормальную версию). Мдя... Канкретный диплом ![]() |
Сообщ.
#15
,
|
|
|
Цитата ya2500 @ а так же желая заиметь какой-то опыт в этом деле) я взялся за эту работу а также на горе студентки заработать бабла.. за такие работы ты ещё и деньги берёшь? пипец.. просто пипец... Цитата ya2500 @ я - сервисный инженер, собираю/ремонтирую компы, вышел в общий зал, а там так же работает соседняя контора, которая делает рефераты и всё такое прочее. какая-то девочка по ошибке обратилась ко мне с просьбой написать простую прогу ![]() 5 баллов |