|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
по индексному ключу ишу в таблице fl_Ut данные и заменяю в первой таблице- fl_ поле l_1 значением второй таблицы полем l_1....но в первой таблице все равно поле остается пустым, хотя по индексу находит одинаковые ключи...почему пусто это поле - fl_.l_1, объясните пжалста! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:11 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnvпо индексному ключу ишу в таблице fl_Ut данные и заменяю в первой таблице- fl_ поле l_1 значением второй таблицы полем l_1....но в первой таблице все равно поле остается пустым, хотя по индексу находит одинаковые ключи...почему пусто это поле - fl_.l_1, объясните пжалста! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Перед DO WHILE неплохо бы вставить SELECT fl_ GO TOP ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:23 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
да все равно и так и так делал...все равно по индексам находит а в таблицу не записывает данные ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:37 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, Тип полей одинаковый? fl_.l_1 и fl_Ut.l_1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:41 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
да и там и там Character и длина одинаковая.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:44 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnvпо индексному ключу ишу в таблице fl_Ut данные и заменяю в первой таблице- fl_ поле l_1 значением второй таблицы полем l_1....но в первой таблице все равно поле остается пустым, хотя по индексу находит одинаковые ключи...почему пусто это поле - fl_.l_1, объясните пжалста! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Попробуй так и посмотри на результат ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:44 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, Кстати, fl_ случайно не запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:45 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
Код: plaintext
Код: plaintext
показывали Найден и данные с таблицы fl_Ut.l_1 IgorNGКстати, fl_ случайно не запрос? нет это алиас таблицы так же как и fl_Ut ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 14:58 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, Попробуй еще после команды REPLACE поставь wait fl_.l_1 window ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:09 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
тоже выводит те же данные уже не знаю в чем дело.... %) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:20 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, Что означает "те же данные"? Те, которые нужны или такие же как и в другой таблице? Чудес на свете не бывает. Еще раз скопируй свой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:23 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
данные поля fl_Ut.l_1 и после REPLACE fl_.l_1 одинаковые то есть в fl_.l_1 попадают данные - ALLTRIM(fl_Ut.l_1)...но таблица пуста.... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:34 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, А как ты определяешь, что таблица пустая? Поставь после команды REPLACE BROWSE ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:39 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
ну да я ее открываю и смотрю есть ли данные в поле fl_. l_1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:42 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
IgorNG, Кстати, а какое выражение в индексе? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:42 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
в таблице fl_Ut такое выражение = ALLTRIM(i_sl) связываю в таблице fl_ два поля = ALLTRIM(fl_.p) + ALLTRIM(fl_.c) т.к. в fl_Ut в одно поле входят значения fl_.p и fl_.c ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 15:52 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnvданные поля fl_Ut.l_1 и после REPLACE fl_.l_1 одинаковые то есть в fl_.l_1 попадают данные - ALLTRIM(fl_Ut.l_1)...но таблица пуста.... Может, не в той таблице смотришь? Даже и не знаю что еще можно посоветовать. Все говорит о том, что код работает. Видимо, причина именно в просмотре. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 16:00 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
В индексном выражении тега idut тоже alltrim()? (где Вы такой ужасный код откопали?) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2011, 22:59 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv, ИМХО - не стоит крутить записи циклом напрямую Предлагаю Вам попробовать нечто вроде SELECT fl_Ut SET ORDER TO idut SELECT fl_ set relation to set relation to ALLTRIM(fl_.p) + ALLTRIM(fl_.c) into fl_ * То есть - завязали веревкой, то что Вы ищете сиком replace all fl_.l_1 WITH ALLTRIM(fl_Ut.l_1) set relation to Надеюсь - Вам это поможет :) Да, еще, вдогонку - SEEK() позволяет указывать параметром не только что ищем, но и где Что позволит избежать явных прыганий по таблицам То есть - не " SEEK s IF FOUND() THEN" а "IF SEEK(s, "fl_Ut", "idut")" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2011, 13:31 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
опечатка читать не "set relation to ALLTRIM(fl_.p) + ALLTRIM(fl_.c) into fl_" а "set relation to ALLTRIM(fl_.p) + ALLTRIM(fl_.c) into fl_Ut" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2011, 13:33 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
SSn888 Relation в данной схеме - лишний. Вполне достаточно SEEK() Код: plaintext 1. 2. 3.
Идея заключается в том, что SEEK() автоматически перейдет на ту запись, которую нашел. Причем в указанной рабочей области. Останется просто прочитать найденное значение и записать в текущее же поле основной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2011, 13:56 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
vbhnv Предположим, у Вас есть две записи, у которых в полях fl_.p и fl_.c первой записи записано "1 " и "11", а во второй записи "11" и "1 ". Выражение ALLTRIM(fl_.p) + ALLTRIM(fl_.c) в обоих случаях вернет строку "111". Т.е. две разные записи получат одинаковое занчение ключа. Вы не сможете отличить одну запись от другой, несмотря на то, что по одтельности поля разные. Именно по этой причине в выражениях индекса не следует использовать функции отсечения пробелов. Выражение индекса должно использовать значения полей "как есть". Если же критически важным является отсутствие ведущих пробелов, то их отсечение должно выполняться на этапе ввода. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2011, 14:04 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
ВладимирМ, Дело вкуса :) Но, по эффективности - прогните ради интереса через оба алгоритма пару баз по десятку тыщ записей и посмотрите на разницу во времени обработки Насчет некорректности полного отсечения пробелов - целиком Вас поддерживаю. Как компромисный вариант можно наверно рассмотреть RTRIM() Как понимаю - полная обрезка в приведенном коде вызвана разностью разрядности полей (например стр 10 + стр 10 сравнивается опять-таки с стр10) или что-то вроде. Собственно говоря - тут опять упирается не в "как решить?", а "чего хочется?". Сдается мне что если автор темы укажет глубинный физический смысл действа, которое он хочет выполнить - вероятно, найдутся более оптимальные пути решения. Сама постановка вопроса достаточно неоднозначна - если мы пихаем в поле А нечто из полей Б и В другой таблицы - получаем просто (нужное ли?) дублирование данных в пределах одной базы. Что есть нарушение принципов нормализации. Но - "хозяин - барин" :) ;) (vbhnv, просьба не обижаться) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2011, 14:16 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
SSn888, Никакие из вариантов TRIM() для индексов по нескольким полям использовать нельзя... И пример, приведенный Владимиром, имеено об этом и говорит. Варианты для уменьшения "длины" индексного выражения - либо LEFT(); либо хэш поля, при этом хэш-функция реализуется как можно более низкоуровнево. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2011, 04:05 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
AndreTM, можно :);) если обрезается последнее в выражени по типу str1+rtrim(str2) и индекс с условием.. поверьте - пару раз такой изврат спасал при обработке больших массивов но, полагаю - тут уж это слишком большой отход от темы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2011, 13:33 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
SSn888AndreTM, можно :);) если обрезается последнее в выражени по типу str1+rtrim(str2) и индекс с условием.. поверьте - пару раз такой изврат спасал при обработке больших массивов но, полагаю - тут уж это слишком большой отход от темы :) Это Вам только кажется. Дело в том, что FoxPro в принципе не поддерживает индексы с переменным значением длины ключа. Он сам, автоматически, дополняет значение ключа до некоторой фиксированной величины пробелами. А вот до какой именно величины, заранее сказать сложно. Другими словами, Ваше выражение str1+rtrim(str2) фактически, было преобразовано в выражение PADR(str1+rtrim(str2), XX). Где XX - это как раз некое фиксированное значение, которое FoxPro вычислил сам, по собственному "разумению". Т.е. хотя Вы и отрезали концевые пробелы, но FoxPro их снова добавил. Вы сделали бессмысленную операцию. Если уж Вы хотите избавится от возможных ведущих пробелов, то после этого надо самостоятельно дополнить строку до некоторой фиксированной величины концевыми пробелами. Например Код: plaintext
Длина ключа в индексном выражении при любых значениях должна быть одинакова. Если Вы не сделаете этого сами, то FoxPro примет решение за Вас. И не факт, что это Вам понравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2011, 14:41 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
[quot ВладимирМ]SSn888Другими словами, Ваше выражение str1+rtrim(str2) фактически, было преобразовано в выражение PADR(str1+rtrim(str2), XX). Где XX - это как раз некое фиксированное значение, которое FoxPro вычислил сам, по собственному "разумению". Т.е. хотя Вы и отрезали концевые пробелы, но FoxPro их снова добавил. Вы сделали бессмысленную операцию. ну, разумение у него простое - он банально ставит число, которое мы бы получили при помощи select(max(len(rtrim())) ;):) ВладимирМДлина ключа в индексном выражении при любых значениях должна быть одинакова. Если Вы не сделаете этого сами, то FoxPro примет решение за Вас. И не факт, что это Вам понравится. :) спасибо, помню не воспринимайте так буквально тот пример что я привел, естественно - в реальности строка была подлинней и содержала не только тримы, но и ПАДЛы (специфика такая была :) ), и другую нечисть... да и сам индекс был с условием просто указал, что ТРИМы имеют право на жизнь в индексе ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2011, 15:02 |
|
помогите с поиском с заменой
|
|||
---|---|---|---|
#18+
SSn888, Естественно, имеют "право на жизнь" _любые индексные выражения_. Но не в эпоху FPD и FPw3. И они нужны сейчас только нам*) А так: Если нужен Рашмор - будьте добры использовать требования FPD/VFP. Если пишете Приложение - будьте добры изучить оптимизацию запросов хотя бы к собственным базам/таблицам. Если пишете Клиента - будьте добры изучить connection strings с точки зрения сервера, а также сами запросы к серверу.... *) разработчикам на vfp. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2011, 08:10 |
|
|
start [/forum/topic.php?all=1&fid=41&tid=1584142]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 156ms |
0 / 0 |