( SetKey & GoToKey ) vs. ( Locate )
5 отговора
144 прегледа
( SetKey & GoToKey ) vs. ( Locate )
Значи, на едно място в проекта ми трябва да бъде локализиран запис в DB таблица, и за целта се ползва SetKey и GoToKey методи на TTable. Примерен фрагмент от кода:
Лошо (ми) става ;), когато се стигне до реда с "//брейкпойнт" - вдига
ексепшън от клас EDataBaseError със съобщение 'Field 'Field1' is not indexed
and cannot be modified'. Интересно е, че в хелп-а нищо не пише за
индексираност. Какво става? И какво ще загубя, ако използвам Locate вместо
SetKey и GoToKey?
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
with Table1 do begin
SetKey;
FieldByName('Field1').AsString := 'value1'; // breakpoint!!!
if GotoKey then
ShowMessage('Found!')
else
ShowMessage('Not Found!');
end;
Лошо (ми) става ;), когато се стигне до реда с "//брейкпойнт" - вдига
ексепшън от клас EDataBaseError със съобщение 'Field 'Field1' is not indexed
and cannot be modified'. Интересно е, че в хелп-а нищо не пише за
индексираност. Какво става? И какво ще загубя, ако използвам Locate вместо
SetKey и GoToKey?
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Re: ( SetKey & GoToKey ) vs. ( Locate )
Вярно, че в help-а е казано малко неясно, но за да ползваш TTable.GotoKey трябва да имаш индекс.
To determine current search keys, you can use the IndexFields property to iterate over the fields used by the current index.
To determine current search keys, you can use the IndexFields property to iterate over the fields used by the current index.
Re: ( SetKey & GoToKey ) vs. ( Locate )
Обаче нещата изглеждат така, сякаш Locate върши същата работа, нали?
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)
Re: ( SetKey & GoToKey ) vs. ( Locate )
Абсолютно - даже се чудя защо си се хвърлил да ползваш предното - е освен ако нямаш индекс по тази колона ? Мисля, че и Locate ползва индекс, като разликата сигурно е в скоростта, ако често правиш търсене - тогава го ползвай само.
---
Е т'ва е живот!
---
Е т'ва е живот!
Re: ( SetKey & GoToKey ) vs. ( Locate )
Почти
Разликите са:
1. Locate е метод на TBDEDataSet, а FindKey, GotoKey и аналогичните на TTable
2. Locate може да се прилага върху произволна комбинация от полета, а FindKey - само по които има построен индекс. (Казват, че ако има индекс, Locate го ползва)
3. За Locate можеш да определиш опции за частично съвпадение, с кейовете трябва да ползваш FindNearest, GotoNearest
Разликите са:
1. Locate е метод на TBDEDataSet, а FindKey, GotoKey и аналогичните на TTable
2. Locate може да се прилага върху произволна комбинация от полета, а FindKey - само по които има построен индекс. (Казват, че ако има индекс, Locate го ползва)
3. За Locate можеш да определиш опции за частично съвпадение, с кейовете трябва да ползваш FindNearest, GotoNearest
Благодаря ви, хора ;)
-------------
Искам да знам какво мисли Бог - останалото са подробности. (Einstein)