Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > Импорт и экспорт dbf


Автор: Фоксик 11.10.2005, 13:25
smile Пожалуйста помогите! Есть программа на Foxе без исходников, есть куча связанных между собой таблиц. У программы очень неудобный для пользователя интерфейс. Можно ли добавлять и удалять записи в её таблицы не из родной программы, а из другой, но так, чтобы потом родная прога их понимала? smile

Автор: Cashey 11.10.2005, 20:34
можно конечно, только лучше открыть базу в фоксе, надо только знать на каком фоксе составлена прога

Автор: Dimchik 13.10.2005, 04:19
Цитата
smile Пожалуйста помогите! Есть программа на Foxе без исходников, есть куча связанных между собой таблиц. У программы очень неудобный для пользователя интерфейс. Можно ли добавлять и удалять записи в её таблицы не из родной программы, а из другой, но так, чтобы потом родная прога их понимала?  smile

да можно но придется открывать базу или на прямую или написать программку которая отроет этот файл в более пристойном виде (например в grid (VFP))

особых проблем быть не должно если что пиши помогу чем смогу

Автор: Фоксик 20.10.2005, 15:15
smile Помогите, плииз... а проблемма вот какая: выгружаю данные из 1С в ту самую программу. В 1С пишу обработку, которая формирует дбфки с такой же структорой, как и в фоксовой проге, потом беру эти дбфки и маленькой прогой на фоксе беру по 1 строке из табличек и добавляю их в таблицы базы данных исходной программы, вот так:

USE (mainform.text1.value)
COUNT =RECCOUNT()
SELECT zkzid FROM (mainform.text1.value) INTO ARRAY arr1
SELECT * FROM (mainform.text1.value) INTO ARRAY arr2
CLOSE TABLES
OPEN DATABASE (mainform.text2.value)
USE fsbt!zkz

FOR i=1 TO count
SELECT * FROM fsbt!zkz WHERE zkzid==arr1[i] INTO ARRAY arr3
if _tally=0 then
INSERT INTO fsbt!zkz FROM ARRAY arr2[1]
endif
endfor
CLOSE ALL


Здесь я проверял, нет ли в базе такой записи, анализируя уникальный ключ, но так делать нельзя, потому что я сам формирую ключ, когда выгружаю дбфки из 1С. Подскажите, как мне быть, чтобы не вставить одни и те же записи по 2 раза????????? smile

Автор: Dimchik 24.10.2005, 04:19
Цитата
Здесь я проверял, нет ли в базе такой записи, анализируя уникальный ключ, но так делать нельзя, потому что я сам формирую ключ, когда выгружаю дбфки из 1С. Подскажите, как мне быть, чтобы не вставить одни и те же записи по 2 раза?????????


если в базе есть индекс то можно воспользоваться командой SEEK (аналогично команде locate for только быстрее т.к. поиск идет по индексу), если нет то вот еще один простой и надежный способ:

sele <база в которую добавлять>
go top
locate for zkzid==arr1[i] && если я правильно понял условие по которому надо искать запись в базе
if found()
** т.е. запись найдена
else && запись не найдена поэтому добавляем
INSERT INTO fsbt!zkz FROM ARRAY arr2[1]
endif


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)