|
|
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Дан файл DAN.DBF Код: plaintext 1. 2. 3. 4. со сведениями о поступивших в магазин товарах. Составить программу для формирования справки о товарах, поступивших в магазин в период с 1 января 2005г. по 31 марта 2005г. Список товаров выдать в справку в алфавитном порядке их наименований с указанием общей суммы патрии (сумма = цена*количество) Ниже у меня представлен мой вариант программы. Но что-то мне подсказывает, что он далеко не оптимальный. Помогите оптимизировать. Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 22:51 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Студент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 23:20 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Да. А это что-то меняет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2007, 23:50 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Это надо обязательно в FoxPro for DOS делать? А в VFP - нельзя? Хотя, Select-SQL работал уже и в FPD... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 01:17 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Да, к сожалению использовать только DOSовский FP. Владимир М , как я понимаю это вариант для VFP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 09:12 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Тут вопрос возник:когдая я редактирую мою БД DAN.DBF , то при запуске программы рез-ат совершенно другой. МБ надо использовать REINDEX ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 09:21 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
w2000Тут вопрос возник:когдая я редактирую мою БД DAN.DBF , то при запуске программы рез-ат совершенно другой. МБ надо использовать REINDEX ? 1. Вариант ВладимираМ ДОЛЖЕН идти на FPD без доработки... 2. Так как индексы у Вас независимые (*.idx), то подразумевается, что программист САМ отслеживает их использование. При внесении изменений в файл ВСЕ ОТКРЫТЫЕ ИНДЕКСЫ автоматически актуализируются (в них вносятся изменения). Если индекс закрыт, а данные в таблице исправляются, то может получиться неприятная ситуация, когда данные уже новые, а индексы еще старые. Из этой проблемы есть два выхода: - делать Reindex (а еще лучше index on, так как кто-нибудь может удалить Ваш индексный файл...) по мере необходимости - сделать для файла структурный индекс, который открывается АВТОМАТИЧЕСКИ вместе с файлом *.dbf. Недостаток первого решения - время (чем больше данных - тем более значительное), необходимое для индексирования. Зато оно универсальное... ИМХО, второе решение более правильное, если только Вы не хотите доверить Ваши данные другим xBase языкам (Clipper'у и иже с ним) или какие-то "кривые ручки" не полезут к Вашим данным "напрямую", в обход стандартных средств FoxPro... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 10:13 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Если уж хочеться без SQL примерно так Код: 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. 28. 29. 30. 31. 32. 33. PS Не проверял так что возможны ошибки. Ну и лучше сделать структурный индексный файл , чтобы не приходилось строить каждый раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 10:53 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Станислав С ,спасибо за исчерпывающий ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 16:14 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
w2000 Владимир М , как я понимаю это вариант для VFP Нет. Это все будет работать и в FPD 2.x ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 18:10 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
-=AlexiS=- Код: plaintext 1. 2. Подправил. Не знаю, почему он с пустыми значениями не работает Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 19:43 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Протестируйте в среде FPD. У меня что-то нет рез-та от такого запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2007, 20:15 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Подправил. Не знаю, почему он с пустыми значениями не работает Потому что оператор сравнения = для символьных строк работает по следующему алгоритму - берем первый символ сравниваем, если равно то берем следующий и так далее, пока не кончится более короткая строка. Поэтому пустая строка всегда равно любой непустой. Чтобы этого избежать есть другой оператор - == абсолютное сравнение. Он возвращает .t. только в случае полного совпадения строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 09:21 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
ВладимирМ , протестируйте свой вариант пожалуйста с Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 12:40 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Для FPD пожалуй заменил бы конструкцию с Between на чтото вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Хотя нет - хелп утверждает что работает. >Протестируйте в среде FPD. У меня что-то нет рез-та от такого запроса Вы кусок таблички то выложите а то ломы создавать и вбивать туда инфу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:01 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Как бы "в догонку" если бы у товара был идентификатор , а не символьное наименование все было-бы гораздо проще M=заведомо_не_существующее значение и уже сравнение M<>ID_tovar Ну и как совет - пользуйтесь SQL - сами видите насколько меньше кода, да и удобнее - ведь в результате вы получаете набор данных с которым можно работать дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 13:05 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Burn Вы кусок таблички то выложите а то ломы создавать и вбивать туда инфу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 14:03 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
-=AlexiS=-Как бы "в догонку" если бы у товара был идентификатор , а не символьное наименование все было-бы гораздо проще M=заведомо_не_существующее значение и уже сравнение M<>ID_tovar Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 14:07 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
w2000 ВладимирМ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Протестируйте в среде FPD. У меня что-то нет рез-та от такого запроса. Конечно, результата - нет. Здесь две ошибки: 1. в условии отбора: Код: plaintext 1. правильно будет: Код: plaintext 1. 2. В самой таблице. Данные, насколько я понял, заносились вручную при установке SET CENTURY OFF В результате "интеллектуальный" Фокс автоматически (по умолчанию) добавил 1900 и в таблицу попал 1905 год А выборку Вы пытаетесь сделать за 2005 год. Естественно, что таких данных в таблице нет! Кстати, очень распространена эта ошибка была на рубеже 1999-2000 гг., сам на нее кучу раз попадался... А потом в config.fp просто прописал CENTURY=ON ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 14:56 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Подтверждаю - с учетом исправлений Станислава все работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2007, 15:16 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Вот тут есть 2 варианта. Первый выложил AlexiS , второй сам только что сделал. Как вы думаете, какой быстрее? 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2007, 17:15 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
И как вообще проверить, какой из вариантов будет работать быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 08:47 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
w2000И как вообще проверить, какой из вариантов будет работать быстрее? Странный ты... Запусти оба (естественно, по очереди) и определи время, которое каждый фрагмент работал до выдачи результатов. Затем сравни время... ИМХО, быстрее, чем SQL-запрос процедура, написанная на FP, работать не будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 10:03 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Быстродействие программ на VFP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 12:03 |
|
||
|
Оптимизация программы. Дайте дельный советы.
|
|||
|---|---|---|---|
|
#18+
Станислав С ИМХО, быстрее, чем SQL-запрос процедура, написанная на FP, работать не будет...Скорее команда TOTAL работать быстрее будет чем SELECT для FPD 2.6 ... Учитель может быть хочет именно ее от учеников ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2007, 12:42 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=204&tid=1589559]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 240ms |
| total: | 374ms |

| 0 / 0 |
