powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнить две таблицы dbf
25 сообщений из 27, страница 1 из 2
Сравнить две таблицы dbf
    #33824965
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, Господа!

Возник вопрос, даже два.

Есть база данных с двумя идентичными таблицами. Структура таблиц такова:

ID - Numeric Length 9 - автоинкрементный счетчик
OKPO - Character Length 20 -код предприятия
NAME - Character Length 42 -название предприятия

Число символов в строке OKPO может быть разное, а должно быть ровно 10. Поэтому вопрос первый:

--как привести все строки в столбце OKPO к одинаковому виду: в строке должно быть ровно 10 символов, если символов 9,то в начале строки пишем один ноль, если символов 8 - два нуля и т.п.

Вопрос номер два

--как найти данные, которые есть в одной таблице и нет в другой, результат вывести в третью таблицу.

Надеюсь объяснил понятно, если нет - спрашивайте.

Большое спасибо всем, кто прочитал, а двойное - всем, кто ответит.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33825065
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия VFP ?
С уважением, Алексей
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33825068
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
? padl(alltrim(tt),10,'0')

select ff from tt t where not exist (select ff from tt1 t1 where t.ff=t1.ff)
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33825080
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия VFP ?


VFP 6.0

? padl(alltrim(tt),10,'0')

select ff from tt t where not exist (select ff from tt1 t1 where t.ff=t1.ff)


Попробую.

С уважением, Londinium
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33825904
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londiniumID - Numeric Length 9
В этом справочнике в чем смысл ID? Да еще и 9-ти разрядного?

londiniumOKPO - Character Length 20
Зачем 20?
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33826114
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В этом справочнике в чем смысл ID? Да еще и 9-ти разрядного?

сделал на всякий случай. Excel поставил такой тип поля, я не стал с ним спорить, хотя можно.


Зачем 20?
Перегонял в dbf через Excel, он так поставил, а править dbf-файл в 16-ричном редакторе - руки трусятся.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33826157
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium...править dbf-файл в 16-ричном редакторе - руки трусятся.
Дык у тебя же "VFP 6.0" в наличии...
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33826257
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык у тебя же "VFP 6.0" в наличии...

Сейчас да, а когда начинал ковыряться с этими двумя файлами - и близко не было.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33826299
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз здравствуйте!

Что-то ничего не выходит, делаю так:
Код: plaintext
1.
2.
3.
4.
5.
USE c:\config.msi\test.dbf EXCLUSIVE
insert into test values( 1 ,'7894','kaskad')
insert into test values( 2 ,'555','omega')
update test set okpo=padl(okpo, 10 ,'0')
select * from test
На выходе, после select получаю то, что ввел insert'ом. Я понимаю, что у меня руки явно кривые, но, все равно, прошу помощи. Таблица TEST имеет структуру, описанную в посте №1.

С уважением, Londinium
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33826315
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
update test set okpo=padl(ALLTRIM(okpo), 10 ,'0')
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33827591
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi londinium!

> в строке должно быть ровно 10 символов, если символов 9,то в начале строки
> пишем один ноль, если символов 8 - два нуля и т.п.

А если в строке 11 символов? Ты бы для начала провел анализ твоей таблицы на
MAX длинну осмысленного текста в полях:

SELECT MAX(LEN(ALLTRIM(OKPO))) MaxLen1, ;
MAX(LEN(ALLTRIM(NAME))) MaxLen2
FROM YourTable INTO CURSOR tmp1
? tmp1.MaxLen1, tmp1.MaxLen2

И лишь если в результате получится что MaxLen1 <=10 то и пробовал "усекать"
это поле. Иначе не избежать проблем - PADL() помимо того что "дополняет"
строку до нужной длинны, ещё и отсекает "лишнюю" часть - а там у тебя могут
быть данные.

Про то как "сравнивать таблицы" IMHO неприлично спрашивать - столько раз уже
обсуждалось - пользуйся поиском :(

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33828033
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Igor KorolyovА если в строке 11 символов?
Длина этого кода для юр.лиц - 8, для физ.лиц - 10.
Больше быть не должно...
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33828708
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Длина этого кода для юр.лиц - 8, для физ.лиц - 10.
Больше быть не должно...


Именно так.

Про то как "сравнивать таблицы" IMHO неприлично спрашивать - столько раз уже
обсуждалось - пользуйся поиском :(



Согласен. Больше не буду.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33830959
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз здравствуйте!

Если еще не всех запарил, то прошу помощи дальше:
Записи, которых нет в таблице 1, а есть в таблице р ищу так:
Код: plaintext
1.
select * from p where p.okpo not in(select okpo from  1 )

Затем создаю таблицу так:
Код: plaintext
1.
create table WhatNotExistInEmpl(id numeric,okpo char( 20 ),name char( 42 ))
Поле Numeric корректирую в дизайнере таблиц, чтобы его длина была 9, а вот затем начинается непонятное:
Код: plaintext
1.
insert into WhatNotExistInEmpl(select * from p where p.okpo not in(select okpo from  1 ));
Ругается на Syntax Error,
Ради интереса проверил такой вопрос на FireBird - все отработало нормально.

Где у меня кривые руки??
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831193
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну ты б еще на сиквеле проверил
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831213
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот пример
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT *, 0  AS checked, SPACE( 100 ) AS cError, SPACE( 254 ) AS cIfOper, ;
    space( 3 ) as type_doc ;
	FROM c_j_link ;
	WHERE c_j_link.rn=c_imns_06.rn AND summa>=c_imns_06.summa ;
	      and c_j_link.link not in (select link_doc from c_imns_06 where not empty(c_imns_06.link_doc)) ;
	INTO TABLE c_j_temps

зачем перед создаешь таблицу
ну выбери в курсор,
затем если нужен файл на диск ну пиши copy to ...
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831238
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну ты б еще на сиквеле проверил

Не понял, а что, нельзя?


SELECT *,0 AS checked, SPACE(100) AS cError, SPACE(254) AS cIfOper, ;
space(3) as type_doc ;
FROM c_j_link ;
WHERE c_j_link.rn=c_imns_06.rn AND summa>=c_imns_06.summa ;
and c_j_link.link not in (select link_doc from c_imns_06 where not empty(c_imns_06.link_doc)) ;
INTO TABLE c_j_temps




Спасибо, поробую модифицировать под свои нужды.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831511
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi londinium!

> insert into WhatNotExistInEmpl(select * from p where p.okpo not in(select
> okpo from 1));
> Ругается на Syntax Error,

В 6-ке такого типа запросы не поддерживаются (в 9-ке уже можно, но и там
думаю на "внешние" скобки будет ругаться, а заодно и "своеволие" полей стоит
устранить - т.е. явно указывать в какие поля вставка идёт и из каких полей
выборка).

В 6-ке можно через APPEND FROM (DBF("SourceCursor")) перегнать данные из
одного курсора в другой - ну или как указал alex прямо через SELECT ... INTO
TABLE создать таблицу (её потом можно через ALTER TABLE изменить по
необходимости).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831512
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Redrik!

Я понимаю что "по смыслу" там должно быть не более 10 - но если в таблице
размерность 20 то кто его знает что там реально - может там "мусор/пробелы"
между цифирью затесался - так что всё-же стоит проверить, и если что, то
ввести дополнительную обработку - ну там например убить все пробелы (не
только "крайние") в поле, или вообще отфильтровать все символы кроме цифр
(двойной CHRTRAN() тут поможет).

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33831712
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

В 6-ке такого типа запросы не поддерживаются (в 9-ке уже можно, но и там
думаю на "внешние" скобки будет ругаться, а заодно и "своеволие" полей стоит
устранить - т.е. явно указывать в какие поля вставка идёт и из каких полей
выборка).


Спасибо за совет. Для надежности, наверное, укажу поля явно. Заодно, чтобы не подумали плохого, объясню, это сравнение пишется на работе, тут в книжки особо не посмотришь. Дома нашел в книжке вариант вставки в таблицу и все заработало (вроде бы).


Я понимаю что "по смыслу" там должно быть не более 10 - но если в таблице
размерность 20 то кто его знает что там реально - может там "мусор/пробелы"
между цифирью затесался


Такого, вроде, быть не должно: данные не введены непосредственно, а получены путем выгрузки из баз. Если знаете, на госслужбе иногда появляется желание сверить базы данных, вот оно и возникло.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33833546
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium...на госслужбе...
Hello, коллега! ;-)
Это что ж за задачку ты решаешь? Может скооперируемся? :-)
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33834022
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, коллега! ;-)
Это что ж за задачку ты решаешь? Может скооперируемся? :-)


Приветствую!
Задача, скорее всего, типовая: руководство пожелало сравнить базы данных предприятий налоговой, пенсионного фонда и службы занятости. Поскольку каждая контора имеет свое ПО, естественно написанное под разные СУБД и т.д, то вернулся к жизни старый добрый dbf-формат, вот и сравниваю разные dbf, вылавливая предприятия. Плюс к тому, основной мой вид деятельности - поддержка пользователей(мышь не шевелится, сеть отвалилась, как в Word-е сделать то-то), то и возникают у меня стандартные вопросы.
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33834120
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
londinium...базы данных предприятий налоговой, пенсионного фонда и службы занятости...
Чьёрт побьери!!! Ты в какой "конторе" трудишься????????????????
Информация в объёме "баз данных" в каждой из этих "контор" абсолютно закрыта! Я "Службу" далеко "посылаю", когда у них зуд начинается насчёт инфы более, чем по одному "субъекту"... ;-)
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33834138
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чьёрт побьери!!! Ты в какой "конторе" трудишься????????????????


В службе занятости, а что?
...
Рейтинг: 0 / 0
Сравнить две таблицы dbf
    #33834382
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да так...
И тебе налоговая дала свой список? А пенсионщики - свой?
Кхм... Однако...
Вроде ж не было на высшем уровне договоров насчет "давать базы"?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сравнить две таблицы dbf
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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