Як переіндексувати таблиці
Шановні майстри, роблю відновлення файлів з архіву, як мені переіндексувати таблиці.Дякую.
Краще такCheck(DbiRegenIndexes(Tbl.Handle));
Check(DbiRegenIndexes(Tablel.Handle)); лає, що Check не декларована змінна, я включив у uses модуль DbiProcs, все одно лає, у чому може бути справа?
Check оголошена в Dbtables
2чайник1 Це для парадоксу, знайди та виправь для Dbf. функція ReindexBase(aDB: TDatabase): boolean; var _i : integer; _list: tStrings; begin Result := true; aDB.CloseDataSets; _list := tStringList.Create; try Session.GetTableNames(aDB.DatabaseName, "*.db", false, false, _list); for _i := 0 to _list.Count - 1 do з TTable.Create(nil) do try DatabaseName := aDB.DatabaseName; TableType := ttParadox; Exclusive := true; TableName := _list[_i]; try Active := true; Check(dbiRegenIndexes(Handle)); except on E: Exception do begin MessageDlg("Помилка переіндексації:" + E.Message, mtError, [mbOk], 0); Result := false end end finally Close; Free end finally _list.Free end end;
дякую, тепер при запуску лає що не може відкрити таблицю. роблю так: Table1.Exclusive := True; Table1.Open; Check(dbiRegenIndexes(Table1.Handle));
У коді помилки немає
[7] чайник1 (16.02.04 12:32) значить таблиця вже десь відкрита, наприклад, у дельфях.
так я вже закриваю все перед індексацією, так само як при копіюванні, вона все одно лає.
як саме лається? каже, чи не може відкрити в ексклюзивному режимі? тоді не все закриваєш. може бути ця таблиця відкрита іншою програмою. чудес у світі не буває. а якщо і бувають, то довідку, як з ними боротися титут не отримаєш. :))
Найчастіша помилка початківців у тому випадку, це коли в дельфі у тебе є форма, на цій формі лежить ТТабле на цю таблицю і в неї встановлений active := true. Тобто вона відкрита дельфями.
так, так і є, але я закриваю, роблю Table1.close, а потім все інше, і вона видає, що не може провести операцію відкриття таблиці.
[13] чайник1 (16.02.04 13:35) Ти це робиш у своїй програмі. Table1.close не закриває таблиці відкриті іншими програмами. А в тебе вона відкрита саме іншою програмою – дельфями.
почитай про Exclusive у хелпі, що це за звір, тоді одразу все зрозумієш.
Коли ти відкриваєш і закриваєш у програмі, то працюєш не з тією таблицею, а з іншою. Просто уяви собі мережу, коли ти закриваєш таблицю у себе, адже ти не закриваєш її в іншій програмі чи в іншого клієнта. Або закрий Дельфі та спробуй виконати програму, або закрий усі таблиці у всіх формах, вони також незалежні одна від одної.
І при посиланні на помилку треба повідомляти точне повідомлення, а не те, що у мене не відкривається таблиця.
я вивів цю операцію окремо, тепер уже не лається на відкриття, а каже Invalid language Driver. а потім що неможливо створити індекс.
Теж напевно правда, раз лається.
а тут виникла інша помилка лається що dbiRegenIndexes не декларована змінна
Правильно лається, оскільки це не змінна, а функція
не так просто написав пише що Undeclared indentifier: "dbiRegenIndexes"
> ser_referi (09.03.04 10:41) [22] > не так просто написав пише, що Undeclared indentifier: > "dbiRegenIndexes"Я одного не зрозумію, у тебе що кнопка F1 зламана? Тоді використовуй менюHelp
Та начебто не зламана і хелпом вмію користуватися, але нічого не можу зрозуміти
може потрібен якийсь додатковий компонент.