Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение двух таблиц 
:(
    Опции темы
Татка
Дата 6.6.2012, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 12.12.2009

Репутация: нет
Всего: нет



Здравствуйте. Есть две таблицы: Spravochnik.dbf  и itog.dbf . Обе таблицы содержат реквизит номер цеха nz. Необходимо сравнить эти две таблицы по реквизиту "номер цеха" (nz) и в случае совпадения заменить реквизит код производства (kpr) массива Spravochnik.dbf  реквизитом код производства (kpr) массива itog.dbf.
Подскажите, пожалуйста, как это можно сделать?
PM MAIL   Вверх
Данкинг
Дата 6.6.2012, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Код

use Spravochnik in 1
use itog in 2
select 1
INDEX ON ALLTRIM(index) TO x1
SELECT 2
INDEX ON ALLTRIM(index) TO x2
SELECT 1
SET RELATION TO ALLTRIM(Spravochnik.index) INTO Itog ADDITIVE
REPLACE Spravochnik.kpr with itog.kpr for allt(Spravochnik.nz)==allt(itog.nz)


Это сообщение отредактировал(а) Данкинг - 6.6.2012, 15:30


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 7.6.2012, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Relation давно уж надо на помойку выбросить
Код

local lc_nz, lc_kpr
use itog.dbf in 0 shared alias itog
use Spravochnik  in 0 shared alias Spravochnik 
select itog
scan
 lc_kpr = kpr
 lc_nz = nz 
 update Spravochnik  set kpr=lc_kpr where nz==lc_nz
 select itog
endscan


Можно update и по таблице сделать, но толь я не знаю как готовить, то ли он действительно такой медленный
PM MAIL   Вверх
Данкинг
Дата 7.6.2012, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  7.6.2012,  16:01 Найти цитируемый пост)
Relation давно уж надо на помойку выбросить

Хм. А апдейтить Spravochnik столько раз, сколько строк в ITOG - это, конечно, лучше? smile

Добавлено через 4 минуты и 1 секунду
Да и зачем писать программу, если связь на уровне СУБД устанавливается, т.е. её средствами?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 7.6.2012, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Цитата

Хм. А апдейтить Spravochnik столько раз, сколько строк в ITOG - это, конечно, лучше?

Сколько найдет. Если таких записей в Spravochnik  нет, то и апдейтиться ничего не будет.
Плюс моего решения - не зависит от индекса

Фокс до сих пор поддерживает @say, но это не значит что этим нужно пользоваться

Это сообщение отредактировал(а) Reese - 7.6.2012, 17:02
PM MAIL   Вверх
Данкинг
Дата 7.6.2012, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  7.6.2012,  16:52 Найти цитируемый пост)
Сколько найдет. 

Но каждый раз будет проходит все записи целиком. Смысл?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 8.6.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Цитата

Но каждый раз будет проходит все записи целиком. Смысл? 


Такой же как и в 

Цитата

SET RELATION TO ALLTRIM(Spravochnik.index) INTO Itog ADDITIVE
REPLACE Spravochnik.kpr with itog.kpr for allt(Spravochnik.nz)==allt(itog.nz)


В вашем случае тоже обрабатываются все записи.

Просто update понятнее т.к. такой код читать легче чем искать где и  как устанавливали relation, и безопаснее, т.к. в случае сломанного индекса ваш пример во всей таблице Spravochnik поставит в поле kpr одно значение, а в моем - просто отработает медленнее.

 
PM MAIL   Вверх
Данкинг
Дата 8.6.2012, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  8.6.2012,  10:53 Найти цитируемый пост)
В вашем случае тоже обрабатываются все записи.

Не знаю именно самого механизма работы - может быть, там используется какой-то свой внутренний UPDATE. Я про то, что при связывании я делаю всё одной командой - REPLACE - и жду, пока она отработает. Да и в любом случае - зачем писать программу, если можно сделать одной строкой?

Добавлено через 43 секунды
Цитата(Reese @  8.6.2012,  10:53 Найти цитируемый пост)
в случае сломанного индекса 

Какого сломанного: я в подобных случаях обычно заново переиндексирую.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 8.6.2012, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Цитата

Да и в любом случае - зачем писать программу, если можно сделать одной строкой?

Какой же одной ? В одну строчку разница.

Цитата

Какого сломанного: я в подобных случаях обычно заново переиндексирую. 


А если индекс сломался во время работы replace for ?

Это сообщение отредактировал(а) Reese - 8.6.2012, 13:07
PM MAIL   Вверх
Данкинг
Дата 8.6.2012, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  8.6.2012,  14:07 Найти цитируемый пост)
Какой же одной ? В одну строчку разница.

Нет, это просто я написал, как это сделать программно. Но самом фоксе же есть построитель выражений, в том числе и для установки связей. Я всегда его и использую.
Цитата(Reese @  8.6.2012,  14:07 Найти цитируемый пост)
А если индекс сломался во время работы replace for ?

Это с чего вдруг? Вот ни разу подобного не было.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 8.6.2012, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Цитата

Но самом фоксе же есть построитель выражений

1. Этот построитель дал вам тот-же код
2. Использование визардов - зло


Цитата

Это с чего вдруг? Вот ни разу подобного не было.

При сетевой работе (особенно если программа написана через всякие relation) - слетают регулярно. (Особенно если некоторые пользователи вместо кнопки отмена выдергивают вилку компа)

Это сообщение отредактировал(а) Reese - 8.6.2012, 14:56
PM MAIL   Вверх
Данкинг
Дата 8.6.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  8.6.2012,  15:56 Найти цитируемый пост)
 Этот построитель дал вам тот-же код

Правильно, но я же PRG не писал.
Цитата(Reese @  8.6.2012,  15:56 Найти цитируемый пост)
 Использование визардов - зло

Как правило - да, но не всегда и не везде.
Цитата(Reese @  8.6.2012,  15:56 Найти цитируемый пост)
 (Особенно если некоторые пользователи вместо кнопки отмена выдергивают вилку компа)

При чём здесь это? А что будет, если прилетят зелёные человечки и унесут системник?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 9.6.2012, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Про выдергивание вилки я конечно несколько утрировал, но я часто встречался с тем что пользователи сбрасывают задачу или жмут reset когда уже нажали "сохранить" и вспомнили что-что-то забыли.
PM MAIL   Вверх
Данкинг
Дата 9.6.2012, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 7
Всего: 130



Цитата(Reese @  9.6.2012,  10:24 Найти цитируемый пост)
сбрасывают задачу или жмут reset когда уже нажали "сохранить" и вспомнили что-что-то забыли. 

Да при этом вообще таблица не сохранится, что бы с ней ни делали. Именно RELATION или индексы тут ни при чём.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Reese
Дата 9.6.2012, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 6.6.2009

Репутация: 1
Всего: 1



Цитата

Да при этом вообще таблица не сохранится

Причем тут сохранение таблицы?
Таблица уже есть. В нее записывают данные при помощи уже написанной программы, а написан процесс сохранения какого нибудь документа при помощи relation, append blank, и replace.
База лежит на сетевом диске, работают два пользователя, и один из них сбрасывает задачу в момент записи данных. Вот тут обычно и происходит слом индексов. (обычно при попытке искать по такому индексу всегда возвращается первая запись). 
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.1693 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.