|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Есть таблица t1.dbf (это справочник, код не повторяется) В ней поля: (все текстовые) kod C(10) name C(90) gost C(30) raz C(30) ed C(10) И есть переменные k,n,g,r,e Как программно, грамотно присвоить переменным n,g,r,e значения из таблицы t1.dbf по совпадению кода?! То есть если переменная kod=t1.kod то остальным переменным присваиваются значения из этой записи в соответствии с совпавшим кодом. Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2017, 18:27 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Извиняюсь ошибка: если переменная k=t1.kod то n=t1.name g=t1.gost r=t1.raz e=t1.ed ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2017, 18:30 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Что сделать 1. Переместить указатель записи в нужной рабочей области на запись с указанным кодом 2. Записать значения полей текущей записи в переменные памяти Как сделать Для перемещения указателя записи в нужной рабочей области на запись с указанным кодом можно использовать любые навигационные команды: Locate, Seek, функция seek(). В некоторых случаях имеет смысл использовать циклы вроде scan..endscan. Что именно использовать, зависит от структуры данных и постановки задачи В простейшем случае Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Префикс "m." означает, что далее следует имя переменной памяти. Это для того, чтобы FoxPro не перепутал с именем поля в текущей рабочей области. Если уверены, что такого имени поля быть не может, то этот префикс можно не указывать. Для полей таблицы префикс с именем рабочей области желательно все-таки указывать. Хотя, конечно, тоже можно опустить, но в этом случае код становится слишком сложен для понимания ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2017, 19:32 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Уважаемый ВладимирМ благодарю за помощь. А возможно ли написать подобный код используя команду SCATTER с MEMVAR ?! И что лучше использовать: LOCATE, SEEK или SEEK() чтобы быстрее работала программа?! ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 01:02 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
p672А возможно ли написать подобный код используя команду SCATTER с MEMVAR ?! Можно, но по хорошему надо использовать встроенные средства буферизации, а не колхозить кэш из переменных. p672И что лучше использовать: LOCATE, SEEK или SEEK() чтобы быстрее работала программа?! LOCATE это перебор записей. Лучше SEEK, удобнее IndexSeek() - это все поиск по индексу. По индексу на порядки быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 07:01 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Допустим таблица имеет первичный индекс kd по полю kod Как будет выглядеть программный код с использованием indexseek() - я SEEK никогда не пользовался и дел не имел.. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 08:58 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 09:28 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Я нашел: Функция KEYMATCH( ) - возможно ли её использовать вместо indexseek() Какое решение работает быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 09:39 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Функция INDEXSEEK() Без перемещения указателя записи таблицы ищет в индексированной таблице первую встретившуюся запись, чей индексный ключ соответствует указанному выражению. - получается не должно работать.. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 09:53 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Нет получается командой SEEK только пользоваться нужно.. Какой программный код будет с командой SEEK. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 09:57 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
SEEK Команда : Ищет в таблице первое появление записи, индексный ключ которой соответствует общему выражению, затем перемещает указатель на соответствующую запись . ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 10:02 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
p672Функция INDEXSEEK() Без перемещения указателя записи таблицы ищет в индексированной таблице первую встретившуюся запись, чей индексный ключ соответствует указанному выражению. - получается не должно работать.. Внимательней хэлп читай. Второй параметр .T. - перемещать указатель. helplMovePointer Specifies if the record pointer is moved to the matching record. If lMovePointer is true (.T.) and a matching record exists, the record pointer is moved to the matching record . If lMovePointer is true (.T.) and a matching record doesn't exist, the record pointer isn't moved. If lMovePointer is false (.F.) or is omitted, the record pointer isn't moved even if a matching record exists. .F. это если надо только проверить есть ли такой ключ, это быстрее, т.к. перемещать указатель не надо. KEYMATCH() не использую, не совсем понял что он делает. Вроде тоже самое, только индекс надо номером задавать, что неудобно. Тут дело не в том какой конкретно функцией ищешь, а в том используются индексы или нет. С использованием индекса намного быстрее, поэтому по скорости SEEK, SEEK() и INDEXSEEK() одинаковы, INDEXSEEK() удобнее тем что ему сразу все нужные параметры можно задать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 10:19 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
p672Нет получается командой SEEK только пользоваться нужно.. Какой программный код будет с командой SEEK. Тоже самое что и IndexSeek(), только букав больше писать Код: sql 1. 2. 3. 4.
SEEK() тоже можно в одну строку Код: sql 1. 2.
У SEEK и SEEK() есть еще один интересный эффект: при SET NEAR ON если не находят, то встают на ближайщее большее, а не в конец. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2017, 10:30 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
Столкнулась с поиском таблицах по индексу, ну и хочу поведать об интересных, на мой взгляд результатах. Протестировав на скорость SEEK, SEEK(), INDEXSEEK() и KEYMATCH() оказалось, что последняя на порядок обгоняет все остальные, но шустрая KEYMATCH() не обращает внимания на SET DELETE ON/OFF в отличии от остальных, т.е. в результате может оказаться давно удаленная запись! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2019, 13:34 |
|
Присвоить переменным значение из таблицы по совпадению поля с одной из переменных
|
|||
---|---|---|---|
#18+
KEYMATCH() - это поиск только и исключительно по индексу, игнорируя любые ограничения и фильтры, наложенные на рабочую область. Т.е. настройки SET DELETE, SET FILTER, SET KEY для этой функции "не видны". Однако если сам индекс создан с использованием FOR-условия, то это условие будет учтено. Например, FOR !Deleted(), чтобы исключить поиск удаленных записей SEEK, SEEK(), INDEXSEEK() - кроме поиска по индексу также учитывают и все фильтры и ограничения, наложенные на рабочую область. На что, естественно, надо потратить дополнительное время Для поиска также можно использовать LOCATE FOR. Но здесь есть своя особенность. Для повышения производительности этой команды перед ее использованием необходимо отключить главный индекс. Т.е. ее следует использовать примерно так SET ORDER TO 0 LOCATE FOR .... В этом случае команда LOCATE сама найдет наиболее подходящий индекс для указанного условия и использует его для поиска. Ну, или не найдет. Тогда время поиска увеличиться... Собственно, это относится к любым командам с FOR-условием. Они автоматически предпримут попытку использовать индекс, если это возможно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2019, 08:39 |
|
|
start [/forum/topic.php?fid=41&msg=39863145&tid=1581625]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 430ms |
0 / 0 |