| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Foxpro/Clipper/Dbase > FoxPro |
| Автор: Paradox 22.1.2004, 08:04 | ||
| объясните пожалуйста примерно что делается в этом коде 2 Cashey особо уповаю на тебя, ты вроде в фоксе разбираешься хорохо
|
| Автор: Paradox 22.1.2004, 09:29 | ||
Вот еще выручайте попадаю надо эти алгоритмы на SQL сконвертить
|
| Автор: Cashey 22.1.2004, 10:20 | ||
Код написан на каком-то старом диалекте Фокса, но постараюсь помочь
Кажется так |
| Автор: Paradox 22.1.2004, 10:22 |
| Спасибо большое |
| Автор: Paradox 22.1.2004, 11:02 | ||
Cashey
а что подразумевается под этим псевдонимом? Какая таблица ? |
| Автор: Cashey 22.1.2004, 15:05 |
| a здесь это первая область данных, которая используется на момент исполнения комманды. В твоем случае это таблица m20000 Да, связь установится по индексированному полю |
| Автор: Cashey 22.1.2004, 15:12 |
| А что тебе нужно по второму коду? Там сплошные удаления таблиц и создание таблиц с тем же именнем, вероятно с той же структурой и набором данных. Лечение баз какое-то. Если будешь перекладывать его на VisualFoxPro имей ввиду, что код в высшей степени безграммотный. |
| Автор: Korney 22.1.2004, 22:38 | ||
| Я не знаю размера таблиц, но судя по тому, как с ними обращаются, они не очень большие и либо учебные, либо никому не нужные. Если не объяснять, что делает этот "код", то его можно заменить следующим и получить тотже результат быстрее.
Можно сделать одно замечание по поводу оператора SET RELA.... Я думаю, что должно работать корректно, но если вдруг поле obkdpp имеет большую длину нежели поле obd, то правильнее его записать SET RELATION TO LEFT(obkdpp, <длина поля OBD>) Если что не так можно писать [email protected] |
| Автор: Cashey 22.1.2004, 23:25 |
| Korney если уж решил похвастаться своими знаниями Фокса так уж пиши код правильный, твой вариант будет работать только при некоторых стечениях данных. те теряет универсальность |
| Автор: Paradox 23.1.2004, 07:01 | ||
Korney это таблицы БД одного из крупнейших заводов Новосибирска, просто они щас с досовского фокса переходят под винды и интербейз - этим переводм занимается наша фирма и в частоности я |
| Автор: Cashey 23.1.2004, 09:45 |
| Paradox А почему им не воспользоваться VisualFoxPro? Пареход будет, относительно, простой, работать будет под виндами, а работа с базами надежна. Если сеть маленькая, то можно и сетевую версию сделать. |
| Автор: AntonSaburov 23.1.2004, 10:14 | ||
Модератор: На форуме запрещено переходить на личности. Если человек ошибся, то не стОит ему это указывать в грубой форме. Все мы не идеальны. |
| Автор: AntonSaburov 23.1.2004, 10:20 |
| Korney Администрация с огромным удовольствием выражает Вам свою благодарность за посещение нашего форума. Приглашаем Вас зарегистрироваться и стать нашим постоянным участником. Мы всегда рады новым лицам |
| Автор: Cashey 23.1.2004, 10:28 |
| AntonSaburov а в чем тут грубая форма? Топик создался с просьбой расшифровать приведенный код, а ему его переложили на тот же язык. Просто хотели похвастаться, что могут лекгий код сделать еще легче. Вот только если он еще и корректным был... Если все-таки я кого-то обидел приношу свои извенения, не хотел. Korney участники форума также присоединяются к словам администрации, мы тоже рады новым аватарам |
| Автор: Paradox 23.1.2004, 11:02 | ||
Потому что договор с нами а мы VisualFoxPro не занимаемся мы ставим им свою систему, для этого все их базы надо перегнать под InterBase Это является одной из моих задач - мне на нее два месяца Доделаю и уволюсь - далеко мотаться приходится на работу (но это уже оффтоп пошел) |
| Автор: Korney 23.1.2004, 20:47 |
| OK Ничего обидного я не обнаружил. По первому коду. 1.Я возможно что-то напортачил. и код действительно не сложный 2.Раскажите, как можно перекладывать на сервер код в котором используется несколько таблиц, которые при исполнении этого кода полностью перезаписываются, в них изменяются одно-два поля (часто на поля этой-же таблицы) и все это в режиме эксклюзивного использования. Возможно какие-то из них используются в других прогах. (Тогда мой код однозначно не корректный) 3.Я пытался объяснить, что реально изменяются несколько полей. Судя по последнему оператору код лежит в отдельном PRG-файле и переодически запускается на выполнение, как отдельная прога 4. В коде не используется оператор SELECT - SQL. Не известно сколько полей в исходных таблицах (файлы m310p_t.dbf и m20000.dbf), но их данные копируются, удаляются и добавляются ВСЕ БЕЗ ИСКЛЮЧЕНИЯ и многократно, т.е. при работе с сервером такого рода реализация его просто "убъет" (я так думаю) По второму коду Используется три таблицы: m310p m20310 PPP Последняя - результирующая Приблизительно этот код делает следующее. В цикле в первой таблице (m310p) ищется запись у которой aaa не равно '*'. Если таковая найдена, то переменной KUDA присваиваем значение поля obkd и в m20310 ищем в поле obkd это значение (KUDA). Если НЕ найден, то мы в m310p "однозначно" нахом запись для которой aaa=' ' и obkd=KUDA, и в этой записи меняем поле aaa1 на '-' при условии, что первый символ поля obchd равен '1' или '2' или ('7' и начиная с 4-го символа девять '0'). Если НАШЛИ то для всех записей таблицы m20310 у которых obkd=KUDA и aaa=m310p.aaa (предварительно была установлена связь между m20310 и m310p по не полному ключу aaa+obkd) в результирующую таблицу PPP добавляется по пустой записи и части полей присваиваются значения (см. несколько подряд идущих команд REPL), а в таблице m310p полю aaa1 присваивается '+'. Так разделавшись с этими записями мы разрываем связь между таблицами, закрываем и снова открываем m310p и присваиваем полю aaa значение '*' для всех записей удовлетворяющих условию : первый символ obchd='0' или >'2' (т.е. любой ASCII-код начиная с '3') или поле aaa1='+' или '-'. Затем для всех записей полю urov присваиваем значение поля kkk1. Если в таблицу PPP попала хотябы одна запись, то мы эти записи добавляем к таблице m310p. Заменяем для всех записей поле nomz на физический номер записи, а поле prim_uzel на obkd для aaa#'*' и первый символ obkd='1' и начиная с 4-го символа девять '0'. После этого мы удаляем индес таблицы m310p и строим его снова. Затем очищаем таблицу PPP и повторяем цикл. Это конечно очень приблизительное описание и возможно я где-то ошибся. Как это сконвертить на SQL. Я думаю никак. Говорите это большой завод? Этот код начали писать лет 20 назад (используются операторы которые даже в досовском фоксе были оставлены для совместимости), а это скорее всего означает, что у тех, кто этими программами пользуется есть постановка задачи. Она наверняка устаревшая и не совсем соответствует реализации, но из нее можно почерпнуть какую-то информацию по поводу входных и выходных данных. Далее входные таблицы при необходимости конвертить в БД, которая будет использоваться в вашей проге. Но по собственному опыту знаю, что если там есть данные которые пользуют другие отделы, а вы переписываете не все предприятие целиком, а только часть - тогда можно просто вешаться. "У нас есть программы которые замечательно работают и нас устраивают!!!" (на тех же данных в DOS) и т.д |
| Автор: Paradox 24.1.2004, 07:14 | ||||
именно это и делается
именно все от бухгалтерии и планового отдела до отдела кадров |
| Автор: Vit 3.11.2004, 21:52 |
| Перенесено из баз данных |