powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление ?
17 сообщений из 17, страница 1 из 1
Удаление ?
    #32541824
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо удалить из таблицы BUK все записи которые есть в таблице BUKDZO. Структура таблиц абсолютно одинаковая.

Делаю это так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set exact on
close all
use d:\tmp\bukdzo.dbf in  0  alias s
use d:\tmp\buk.dbf in  0  alias b
select b
index on fio to fio.idx
select s
set relation to fio into b
scan for !empty(fio)
delete
endscan
pack
close all
erase fio.idx

Но не получается. Удаляются вообще все записи.
Видимо что-то не так? )
Подскажите плизззз.....
...
Рейтинг: 0 / 0
Удаление ?
    #32541825
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее код такой! :)
(ошибся чуть чуть!)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
set exact on
close all
use d:\tmp\bukdzo.dbf in  0  alias b
use d:\tmp\buk.dbf in  0  alias s
select b
index on fio to fio.idx
select s
set relation to fio into b
scan for !empty(fio)
delete
endscan
pack
close all
erase fio.idx
...
Рейтинг: 0 / 0
Удаление ?
    #32541972
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
set exact on
select bukdzo
index on fio to fio.idx && А лучше иметь структурный тег по fio
select buk
set relation to fio into bukdzo
delete for !empty(fio) and found('bukdzo')
pack
close all
erase fio.idx

Да, к вопросу об однобуквенных псевдонимах в use ... alias
Я не рекомендую, потому что буквы A...J (уж не знаю как сейчас, но раньше так было) являются псевдонимами областей 1...10. Т.е.
select b
неявно может означать
select 2
Наверное, с моей стороны эта предосторожность излишняя, но так спокойнее.
Я уж не говорю об особое предназначение буквы m.
...
Рейтинг: 0 / 0
Удаление ?
    #32541991
Sjfx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после строки set relation -
одна строка:
delete for !eof('b')

А так же см. замечание в предшествующем посте.
...
Рейтинг: 0 / 0
Удаление ?
    #32542001
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Urri

Не работает эта программа.
Говорит, что Alias Bukdzo не найден, в строке 6. :(

И как вы без use использовали select.
Мож я что-то упустил? :))
...
Рейтинг: 0 / 0
Удаление ?
    #32542070
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Sjfx

Записи то удалила правильно, а вот в тех которые остались фамилии удалила нахрен!!!!!!!!!!!!!!!!!!
Вот запись есть, а фамилия пустая!
...
Рейтинг: 0 / 0
Удаление ?
    #32542099
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот появилась новая задача :))

А как что изменить надо чтобы удалить наоборот все записи из BUK, которых нет в BUKDZO
...
Рейтинг: 0 / 0
Удаление ?
    #32542120
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб мой скрипт заработал, нужно открыть таблицы не так:

use d:\tmp\bukdzo.dbf in 0 alias s
use d:\tmp\buk.dbf in 0 alias b

, а так:

use d:\tmp\bukdzo.dbf in 0
use d:\tmp\buk.dbf in 0

А наоборот - соответственно, строим индекс по другой таблице и по relation вяжем зеркально ;-)))
...
Рейтинг: 0 / 0
Удаление ?
    #32542339
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что значит зеркально вяжем?
...
Рейтинг: 0 / 0
Удаление ?
    #32542374
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 URII

Кстати программа заработала, и удалила из BUK всех кто есть в BUKDZO ,

а наоборот как сделать?? чтобы удалила из BUK всех кого нет в BUKDZO :))
...
Рейтинг: 0 / 0
Удаление ?
    #32542484
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paule

В скрипте всего-то 10-12 строчек! Новых по смыслу не появится - и даже порядок операторов не изменится. Надо только правильную таблицу проиндексировать, из правильной области правильно установить связь и пройтись по правильной таблице. ;-)))

Твой последний вопрос неинтересен. Интересно, когда собеседник проявляет немного инициативы. ;-)))
...
Рейтинг: 0 / 0
Удаление ?
    #32542583
Pusto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pauleНеобходимо удалить из таблицы BUK все записи которые есть в таблице BUKDZO. Структура таблиц абсолютно одинаковая.
К сожалению, ты не указал на чем работаешь (Visual FoxPro/FoxPro/DOS).
Я бы на VFP8 сделал бы так:

delete from buk where fio in (sele fio from bukdzo)

За что мне нравятся SQL-команды в Фоксе - так это краткость и лаконичность. И никаких дополнительных индексов не надо...
...
Рейтинг: 0 / 0
Удаление ?
    #32543780
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 URII

Я сначала попробовал их по-разному проиндексировать.Но у меня не получилось, вот и спрашиваю.

Вообще я привык с SQL работать. Намного удобнее все. С фоксом этим не работал ! Поэтому мышление подсознательно SQL вспоминает, а там по-другому. Поэтому понять как эти 12 строчек работают до конца не могу
...
Рейтинг: 0 / 0
Удаление ?
    #32543782
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Pusto

MS VFP 2.5 :)
...
Рейтинг: 0 / 0
Удаление ?
    #32543789
paule
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще в инете гденить есть примеры программок.
Я вот обыскался, но не нашел ничего путнего по 2.5
...
Рейтинг: 0 / 0
Удаление ?
    #32543957
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хорошо

Код: 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.
25.
26.
27.
* Открыли таблички
use d:\tmp\bukdzo.dbf in  0 
use d:\tmp\buk.dbf in  0 
* Это на всякий случай, чтобы "Иван  " не было = "Иванов"
set exact on
* Выбираем ту область, в которой открыта дочерняя табличка,
* чтобы проиндексировать - потом связываем по индексу
select buk
index on fio to fio.idx && А лучше иметь структурный тег по fio
* Выбираем ту область, в которой открыта таблица, из которой будем удалять
select bukdzo
* И связываем по fio с дочерней
* (которая уже проиндексирована специально для этого)
set relation to fio into buk
* Удаляем из головной только те записи, которые есть в дочерней
* (для них found('buk') вернет .T.). !empty(fio) - это на всякий случай.
* Таких записей, по идее, быть не должно - т.е. будучи уверенным,
* можно сократить до delete for found('buk')
* Или даже написать delete for empty(fio) or found('buk') -
* если и пустые fio надо удалять.
delete for !empty(fio) and found('buk')
* Это чисто для физического удаления
pack
* Все закрыли
close all
* Ну и теперь индекс удаляем за ненужностью.
erase fio.idx
...
Рейтинг: 0 / 0
Удаление ?
    #32543973
Pusto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pauleMS VFP 2.5 :)
Такого Fox'а нет. :) VFP начинается с 3.0. :)
Я так понимаю, что у тебя или FPD 2.5, или FPW 2.5. Тогда мой вариант не подходит.
Если ты до этого работал с SQL, то переходи лучше на VFP. Там с SQL-командами чуть-чуть получше (взять хотя бы решение твоей задачи), SELECT-SQL тоже расширен. Если парк компьютеров позволяет, то со знанием SQL будет легче работать.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Удаление ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]