|
Проблема с поиском
|
|||
---|---|---|---|
#18+
Добрый день. У меня такая проблема простая, но не знаю в чем дело. Опишу все по порядку. На форме есть grid в которой отображается таблица spravki_end.dbf. Таблица spravki_end.dbf имеет воля nmkp,date_v,razdel,date_del и один индекс IDXNDR с выражением ALLTRIM(nmkp)+ALLTRIM(DTOC(date_v))+ALLTRIM(razdel) На форме есть textbox-сы для ввода раздела, номера и даты данные из этих полей сохраняются в переменные perem_razdlist, perem_txtnmkp, perem_txtdatev соответственно. Теперь по нажатию на enter в textbox нужно найти запись в таблице. Делаю это так, но не получается. В чем у меня ошибка? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 15:48 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
Может кто-нибудь подсказать? Не хотел на форуме спрашивать, но уже не выдержал т.к. не пойму в чем дело ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 16:34 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
1. set exact тут лишнее. По хорошему все SET`ы делаются при старте програмы и старте формы в отдельной DE. Менять настройки среды в процессе выполнения кода не надо. 2. Если используешь SEEK, то используй found() для провеки найденного, т.е. Код: sql 1. 2. 3.
или Код: sql 1. 2.
или Код: sql 1. 2.
В остальном непонятно что у тебя не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 20:50 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
Dima T, сделал так:, вроде ищет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Есть ли в моем коде какое-то извращенность или норм все?:) В моем понимании того что я тут написал происходит следующее. При заполнении текстбоксов в переменные perem_txtnmkp, perem_txtdatev, perem_razdlist заносятся соответственно раздел, номер карты и дата. Затем в таблице идет поиск по индексу IDXNDR если найден элемент совпадающий с выражением ALLTRIM(perem_txtnmkp)+ALLTRIM(perem_txtdatev)+ALLTRIM(perem_razdlist) , то строка в гриде становится желтым. Если мой код можно можно подправить и улучшить подскажите как? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 08:55 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
kolhozDima T, сделал так:, вроде ищет. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Есть ли в моем коде какое-то извращенность или норм все?:) В моем понимании того что я тут написал происходит следующее. При заполнении текстбоксов в переменные perem_txtnmkp, perem_txtdatev, perem_razdlist заносятся соответственно раздел, номер карты и дата. Затем в таблице идет поиск по индексу IDXNDR если найден элемент совпадающий с выражением ALLTRIM(perem_txtnmkp)+ALLTRIM(perem_txtdatev)+ALLTRIM(perem_razdlist) , то строка в гриде становится желтым. Если мой код можно можно подправить и улучшить подскажите как?А выдержишь? :) 1. Можешь обосновать наличие go top ПЕРЕД командой seek()? Доку по команде seek() читал? Похоже, что нет. 2. Когда-нибудь видел, чтобы функция DTOC() выдавала в результате пробелы? Если не видел, то может можешь логически обосновать возможность появления там пробелов? Если не можешь, то задлянафига ALLTRIM(perem_txtnmkp)? Какие пробелы эта функция тут обрезает? 3. В курсе, что у textbox можно сделать настройку, обрезающую пробелы в его Value? И что в связи с этим код ALLTRIM(perem_txtnmkp)+ALLTRIM(perem_txtdatev)+ALLTRIM(perem_razdlist) превращается в большую кучу копрокода? Как, впрочем, и любое постоянное и совершенно бездумное применение везде где ни попадя Alltrim() "на всякий случай". 4. В ОБОИХ ветках оператора IF присутствует thisform.grid1.Refresh. При чем в конце каждой из них. Не пробовал вынести его сразу за IF? 5. Индексы по выражениям, возвращающим результат разной длины (очередной причем бездумному применению Alltrim()), могут подложить неплохую такую свинью и найти причину глюка будет трудно. Достаточно? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 10:49 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
kolhoz, 1. Строка, возвращаемая DTOC(), зависит от текущей настройки отображения даты. В индексных выражениях лучше использовать DTOS(). 2. Индексное выражение переменной длины - потенциальное зло. Я бы индексировал по nmkp+DTOS(date_v)+razdel. И нужно учитывать ограничение на длину индексного выражения. 3. SetAll покрасит жёлтым все записи, удовлетворяющие указанному условию, а не текущую. Поиск для раскраски не нужен. 4. This.BackColor для записей, не удовлетворяющих условию - предполагается таким способом оставлять для них цвет без изменения? Предполагается при нескольких последовательных поисках докрашивать жёлтым записи по новым условиям? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 10:59 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
Sergey Sizov2. Когда-нибудь видел, чтобы функция DTOC() выдавала в результате пробелы? При пустой дате - таки выдаст. Что, конечно, не оправдывает применение здесь ALLTRIM(). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 11:08 |
|
Проблема с поиском
|
|||
---|---|---|---|
#18+
сейчас буду разбираться в коде учитывая ваши замечания ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2015, 11:19 |
|
|
start [/forum/topic.php?fid=41&gotonew=1&tid=1582387]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
62ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 169ms |
0 / 0 |