![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Update DBF [D6, dBase, FoxPro]
Wild © (2004-03-02 12:55:00)Мастерам привет от чайников! :)
У меня опять накопились вопросы, может быть кто-нибудь поможет...
1. Можно ли с помощью sql-запроса поменять формат полей в существующей dbf-таблице? Например укоротить строковое поле, преобразовать строковое в дату и т.п.
2. У меня есть запросик на апдэйт, и ошибок я в нем найти не могу, а он не работает.
update pricemod_1 pm
set pm.tovar = (select p.tovar from price p
where (p.code_tovar = pm.code_tovar)),
pm.proiz = (select p.proiz from price p
where (p.code_tovar = pm.code_tovar))
where exists (select p.code_tovar, tovar, proiz from price p
where (p.code_tovar = pm.code_tovar) and
((p.tovar <> pm.tovar) or (p.proiz <> pm.proiz)))
Записей в обновляемой таблице около 14000, во второй около 25000. Мошт у меня просто комп вешаеца? То есть ошибок не говорит никаких, но за несколько часов (по словам очевидцев) запрос не заканчивается и комп к харду обращаться продолжает периодически... :)
3. Правильно ли я понимаю алгоритм действия такого запроса:
он сначала выбирает из pm строку соответственно разделу where, потом из p ищет данные по товару соответственно подзапросу, потом то же самое по производителю, и так для каждой строки pm?
Это ж тада получаеца несколько сот миллионов операций - мошт в этом проблема?
Заранее спасибо всем!
max1000 (2004-03-05 12:34:00) [1]И правильно берешь InterBase6.5 , Firebird, EMS InterBase Manager и вперед
Wild (2004-03-05 12:26:00) [2][7] Конструктивное предложение... :)
[8] Пока не пробовал, но в суть не въехал :)
Придется, наверное, от дбф-а отказываться...
max1000 (2004-03-05 12:19:00) [3]Попробуй так
update pricemod_1 pm
set pm.tovar =(select p.tovar from price p,pricemod_1 pm where (p.code_tovar = pm.code_tovar)),
pm.proiz = (select p.proiz from price p,pricemod_1 pm where (p.code_tovar = pm.code_tovar))
where exists (select p.code_tovar, pm.tovar,pm.proiz from price p,pricemod_1 pm where (p.code_tovar = pm.code_tovar) and
((p.tovar <> pm.tovar) or (p.proiz <> pm.proiz)))
VAleksey (2004-03-04 14:34:00) [4]Запрос в корзину - однозначно.
LazyCamel (2004-03-04 13:47:00) [5]<quote>1. Насчет Alter Table не совсем понял. Там можно удалить столбец или добавить, а вот можно ли преобразовать... </quote>
А модификация столбца это и есть последовательное удаление и создание. О данных нужно заботится отдельно. (Или воспользоваться каким-либо средством визуального проектирования, которые это умеют делать сами)
LaidBack (2004-03-04 11:37:00) [6]Поищи компонент TDbCheck - он все эти проблемы решает при помощи DbiDoRestructure. Бесплатный и с исходниками.
Wild (2004-03-04 10:06:00) [7]2,3. Префиксы есть, индексы тоже - результата нету :(
1. Насчет Alter Table не совсем понял. Там можно удалить столбец или добавить, а вот можно ли преобразовать...
It is possible to delete and add a column of the same name in the same ALTER TABLE statement, however any data in the column is lost in the process. This allows quick redefinition of columns while still in the database design stages.
Что-то мне подсказывает, что все данные при этом успешно пропипаются.
З.Ы. Просто я никогда не учил английский язык :)))
Alex_Bredin (2004-03-02 13:24:00) [8]и кстати в Вашем случае получается несколько сот миллиардов операций , тк.к у Вас тройной вложенный Select, да еще с квантором EXISTS
Alex_Bredin (2004-03-02 13:21:00) [9]
> 2. в 5-й строке лучше поставить префиксы таблицы для полей.
пардон, в 6-й
Alex_Bredin (2004-03-02 13:20:00) [10]1. можно. ALTER TABLE -см в хелп
2. в 5-й строке лучше поставить префиксы таблицы для полей.
3. создать индексы для полей связи.