На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Paradox/BDE и опять ошибка с индексами
    скажу сразу: FAQ на эту тему прочёл внимательно

    суть проблемы: делаю учебное задание на Delphi(Delphi5,Delphi7,32-bit Delphi из Borland Studio 2006- ошибка одна и та же). задание заключается в создании простенькой БД с возможностью редактировать, сортировать... вот тут-то и начинаются проблемы: после внесения изменений в любое из полей сортировка пишет 'index is out of date'. я уже ставил WinXp на другой винт, другую версию Delphi(из вышеперечисленных), и писать базу с нуля- всё та же фигня

    патчей, указанных в FAQ скачать не смог. поможите люди добрые, срочно надо! (предпочитаю использовать Delphi7)

    ExpandedWrap disabled
      Table1.post;
      Table1.FlushBuffers;
    , рекомендованного в FAQ вставить тоже особо некуда: редактирование ведётся только через визуальные компоненты, которые сами делают post, а просто FlushBuffers не помогает
      да, сколько раз говорить, парадокс на то он и парадокс... у него вечные проблемы с индексами. универсальный патч, от всех бед парадокса - переход на другие субд. или ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться. все. точка.
        Цитата
        универсальный патч, от всех бед парадокса - переход на другие субд
        и какую лучше выбрать? почему-то учащимся рекомендуют Paradox, в книгах так же примеры даются или с использованием Paradox, или разных субд. по умолчанию, опять таки выбирается Paradox! считаю совершенно необходимым занести в FAQ предупреждение о парадоксе- я там ничего плохого о нём не нашёл. и дать там же рекомендацию на другую субд для новичков

        Цитата
        или ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться
        т е:
        1.создавать индексы перед каждой сортировкой
        2 выполнить сортировку
        3 после - каждый раз избавляться от них
        - так? возможно этот вариант будет приемлемым для меня- иначе слишком много переделывать придётся при переходе, например, на DBaseIV
        Сообщение отредактировано: ya2500 -
          Цитата ya2500 @
          почему-то учащимся рекомендуют Paradox, в книгах так же примеры даются или с использованием Paradox, или разных субд. по умолчанию, опять таки выбирается Paradox!

          Видимо парадокс наиболее прост для освоения учащимися принципов построения и работы с реляционными базами данных. Так же возможно парадокс более "лучше" работает с bde, то есть интерфейсы бде наиболее лучше подходят именно для парадокса.

          Цитата ya2500 @
          и какую лучше выбрать?

          ...
          я бы в летчики пошел -
          пусть меня научат!
          ...
          (с)
          • MS Access / ADO
          • Mysql
          • Interbase / Firebird
          • MS SQL Server
          • что-нить еще...
          выбирай на вкус и цвет.
          Цитата ya2500 @
          т е:
          1,2,3...
          - так?
          именно так
            ExpandedWrap disabled
              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;
            выбираю соотв подпункт меню N3(сортировка от А до Я), получаю сообщение:
            Цитата
            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- это что-то...
            Сообщение отредактировано: ya2500 -
              похоже, получилось у меня на Paradox7/BDE.

              сортировка:
              ExpandedWrap disabled
                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;


              редактирование производится в отдельной форме. добавил пару строк при её активации:
              ExpandedWrap disabled
                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, хотя думаю, это не принципиально
              Сообщение отредактировано: ya2500 -
                // !!! ??? , млин... Paradox/DBE часть вторая: глюки возращаются

                всё почти работает: теперь можно редактировать и сортировать в любом порядке без глюков, даже удалять записи можно, НО не добавлять: автоинкрементное поле Code остаётся пустым, а при попытке отсортировать таблицу после добавления записи возникает ошибка "Field value out of lookup table range"

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

                так что вопрос, всё-таки не решён (думаю, проблема вполне вписывается в ЭТУ тему, и не стоит заводить новую)

                UPD

                да, проблема видимо в автоинкрементном поле. надо его как-то правильно пересчитывать... щазз сунулся- оно вроде бы не допускает редактирования. щазз разбираюсь...

                UPD

                Цитата
                ручное заведание индексами - вручную их создавать, по мере необходимости, и так же вручную от них избавляться
                тут есть видимо, некоторые моменты, которые мне не совсем понятны в плане реализации. с этими же автоинкрементами, к примеру. помогите, плизз...

                UPD

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

                ИТОГО:

                вопрос первый: как резервировать память под создание новых индексов и записей?

                вопрос второй: как обновлять значения автоинкрементного поля? пересчитывать обычные поля я умею, но это...

                UPD

                щазз поправил свои БД- работает. удалось уточнить условие возникновения ошибки "Field value out of lookup table range": теперь, с исправленными базами, она возникает только тогда, когда после изменения данных в LookupTable, данные ч/з DBLookupComboBox подставляем в запись основной таблицы. при этом не важно, пытаемся ли мы вставить новое значение, либо любое из старых- в любом случае возникает та же ошибка.

                такая ситуация уже оставляет надежду на то, что мне, может быть, удастся справиться с оставшейся частью проблемы самостоятельно
                Сообщение отредактировано: ya2500 -
                  Цитата ya2500 @
                  да, и после удаления записи (например, номер 2) остальные поля автоинкрементного поля не пересчитываются...

                  автоинкрементные поля никогда не пересчитываются... поэтому в таблицу случаются "дырки"... :lol:
                  Цитата ya2500 @
                  вопрос второй: как обновлять значения автоинкрементного поля? пересчитывать обычные поля я умею, но это...

                  низя этого делать, точнее можно, но, лучше - не делать. ну и что что у тебя записи, с ID:
                  • 1
                  • 2
                  • 6
                  • 7
                  • 8
                  • 10
                  • 13
                  • 14
                  • 22
                  :ph34r: это нормальное явление.
                  Сообщение отредактировано: SPrograMMer -
                    Я бы посоветовал начать с ADO/ACCESS. НУ а затем уже что нить посерьезнее.
                    По теме: нигде не нашел решение данного вопроса. Слетают они(индексы) и все тут ...
                        вроде бы сделал. всё работает, только редактор LookupTable пришлось вынести в отдельную прогу

                        а дырки в автоинкрементных полях- всё-таки как-то нехорошо

                        НО самая большая щазз проблема- объяснить заказчице, как объяснить преподу, что все эти навороты с индексами необходимы для работоспособности программы. там ещё делается пересчёт записей за опр период по опр признаку. так мне пришлось вместо того, чтоб поставить фильтр и посчитать- наоборот: снимать все фильтры и пересчитывать, проверяя условия вручную. да и то из-за странных глюков пришлось вынести редактор LookupTable отдельной прогой, чтоб их избежать

                        щазз жду звонка заказчицы, и заодно пытаюсь упростить прогу
                          Цитата ya2500 @
                          щазз жду звонка заказчицы

                          не завидую я твоей заказчице... знала бы она на чём будет работать... почему бы не выбрать изначально MySQL или ADO???? ведь про ADO тоже дофига чего пишут в мануалах и букварях!!!
                            сорри за офф-топ: как 'отстреляюсь' от проги окончательно- отмечу 'вопрос решён',
                            а пока- офф-топ:

                            dron-s, ситуация такая: я - сервисный инженер, собираю/ремонтирую компы, вышел в общий зал, а там так же работает соседняя контора, которая делает рефераты и всё такое прочее. какая-то девочка по ошибке обратилась ко мне с просьбой написать простую прогу. зная, что проги у нас никто не пишет( а так же желая заиметь какой-то опыт в этом деле) я взялся за эту работу. прога оказалась сложнее, чем я полагал. а Delphi- глючнее. у меня никогда раньше Delphi5 не глючил. потом она призналась, что это вообще- дипломная работа! ( а сроки изначально давались два дня. к счастью за эти два дня можно было наваять хоть что-то, а потом- уже делать нормальную версию). я пока ещё не признался, что это- первая программа, которую я пишу за деньги

                            ( ну, не совсем первая- много лет назад написал прогу для плиточника по расчёту кол-ва плитки с учётом обрезаний и пр, но в ней просто была система формул. он некоторое время придумывал всякие дополнения, которые надо дописать, пока не скачал где-то такую прогу, которая помимо расчётов рисует эту плику в доме в 3D. на этом вечное совершенствование проги и закончилось)

                            я так больше для себя пишу. даже были(вроде бы) проэкты, доведённые до конца

                            p.s. да, насчёт заказчицы- звонила, сказала, что к четырём приедет. заранее позвонит ещё раз
                            Сообщение отредактировано: ya2500 -
                              Цитата ya2500 @
                              задание заключается в создании простенькой БД с возможностью редактировать, сортировать...


                              Цитата ya2500 @
                              прога оказалась сложнее, чем я полагал. а Delphi- глючнее. у меня никогда раньше Delphi5 не глючил. потом она призналась, что это вообще- дипломная работа! ( а сроки изначально давались два дня. к счастью за эти два дня можно было наваять хоть что-то, а потом- уже делать нормальную версию).


                              Мдя... Канкретный диплом :lool:
                                Цитата ya2500 @
                                а так же желая заиметь какой-то опыт в этом деле) я взялся за эту работу

                                а также на горе студентки заработать бабла..
                                за такие работы ты ещё и деньги берёшь? пипец.. просто пипец...
                                Цитата ya2500 @
                                я - сервисный инженер, собираю/ремонтирую компы, вышел в общий зал, а там так же работает соседняя контора, которая делает рефераты и всё такое прочее. какая-то девочка по ошибке обратилась ко мне с просьбой написать простую прогу

                                :lool:
                                5 баллов
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0504 ]   [ 16 queries used ]   [ Generated: 12.10.25, 05:33 GMT ]