Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
15.11.2013, 22:51
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
Уважаемые форумчане,здравствуйте! Необходима консультация по следующему вопросу. Есть таблица,по интересующему нас полю из этой таблицы,содержимым которого являются коды(один или два),нужно провести поиск части кода,в идеале полного кода.Если начать с простого,то части кода будет достаточно,в свою очередь она является первыми двумя цифрами.Коды в каждой ячейке разные,из себя могут представлять следующее: 1)12.32.42,44.33.44 2)45.43;23.33 3)31.33.12;22.33 или 4)22.43;22.31.32 Разделители между кодами могут быть как ",",так и ";". Тип поля character.Cлово(часть кода),которое мы ищем,получаем из textbox. Предпринимались следующие попытки 1)thisform.AddProperty("cod[1,100]") select field from mytable into array thisform.cod for i=1 to alen(thisform.cod) if at(thisform.text1.value,thisform.cod[i])>0 ? Нашли endif endfor Результата нет,ничего не выводит,пробовал at(subst(alltrim(thisform.text1.value),1),(subst(alltrim(thisform.cod[i]),1)),но тщетно. Подозреваю,что проблема в моей неверной интерпретации преобразования типа данных на каком-то этапе. 2)Пробовал occurs for i=1 to alen(thisform.cod) if occurs(thisform.text1.value,thisform.cod[i])>0 ? Нашли endif endfor Результат схожий. Буду очень признателен за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
15.11.2013, 23:24
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
m134nУважаемые форумчане,здравствуйте! Необходима консультация по следующему вопросу.Привет.Есть таблица,по интересующему нас полю из этой таблицы,содержимым которого являются коды(один или два)Два кода в одном поле? Уже бардак.,нужно провести поиск части кода,в идеале полного кода.Если начать с простого,то части кода будет достаточно,в свою очередь она является первыми двумя цифрами.Коды в каждой ячейке Нет в базах данных ячеек. Есть записи, разделенные на поля. разные,из себя могут представлять следующее: 1)12.32.42,44.33.44 2)45.43;23.33 3)31.33.12;22.33 или 4)22.43;22.31.32Оформите сие как скрипт создания таблицы и наполнения ее этими данными. Дабы было что рассматривать практически, а не только чисто умозрительно.Разделители между кодами могут быть как ",",так и ";".Прелестно. Бардак растет.Тип поля character.Cлово(часть кода),которое мы ищем,получаем из textbox. Предпринимались следующие попытки 1)thisform.AddProperty("cod[1,100]") select field from mytable into array thisform.cod for i=1 to alen(thisform.cod) if at(thisform.text1.value,thisform.cod[i])>0 ? Нашли endif endfor Результата нет,ничего не выводит,пробовал at(subst(alltrim(thisform.text1.value),1),(subst(alltrim(thisform.cod[i]),1)),но тщетно. Подозреваю,что проблема в моей неверной интерпретации преобразования типа данных на каком-то этапе. 2)Пробовал occurs for i=1 to alen(thisform.cod) if occurs(thisform.text1.value,thisform.cod[i])>0 ? Нашли endif endfor Результат схожий. Буду очень признателен за помощь.1. Зачем для поиска информации в таблице копировать эту информацию в массив? Не читали про locate, seek? Про индексы? 2. Не пробовали просто в командном окне посмотреть результат ?at(thisform.text1.value,thisform.cod[i]) или ?occurs(thisform.text1.value,thisform.cod[i]) ? При чем для тех записей, в которых точно находятся искомые коды? Мне почему-то кажется, что сие зрелище может оказаться очень впечатляющим. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 13:51
|
|||
---|---|---|---|
VPF9 Поиск слова |
|||
#18+
Sergey Sizov Бардак Необъятность ваших познаний просто ошеломляет удачно подобранная характеристика. Осталось совсем малость - добавить к ним еще ALLTRIM(), т.к. сравнение обычно выполняется без пробелов. m134n Обратите внимание на наличие в SELECT опции WHERE, где и определяются условия фильтра. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 14:43
|
|||
---|---|---|---|
VPF9 Поиск слова |
|||
#18+
sg12Sergey Sizov Бардак Необъятность ваших познаний просто ошеломляет удачно подобранная характеристика.Что-то мне подсказывает, что крайний отвечающий снова забыл расставить знаки препинания в этой фразе... :) А по теме - это задача из разряда тех, которую решает "полнотекстовый поиск". Поэтому (как бы ни хотелось sg12 доказать обратное) Sergey Sizov прав: либо надо менять структуру хранения данных, либо жертвовать ресурсами и производительностью... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 15:59
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
Sergey Sizov Два кода в одном поле? Уже бардак. Согласен,но такими были предоставлены исходные данные. Sergey SizovНет в базах данных ячеек. Есть записи, разделенные на поля. Всё верно,извиняюсь.Зря использовал этот термин,хотел немного наглядней описать ситуацию. Sergey Sizov Оформите сие как скрипт создания таблицы и наполнения ее этими данными. Дабы было что рассматривать практически, а не только чисто умозрительно. CREATE TABLE test (id C(6), cod C(17)) INSERT INTO test (id, cod) VALUES ("1","12.32.42,44.33.44") INSERT INTO test (id, cod) VALUES ("2","45.43;23.33") INSERT INTO test (id, cod) VALUES ("3","31.33.32;12.33") INSERT INTO test (id, cod) VALUES ("4","22.43;22.31.32") Sergey Sizov Прелестно. Бардак растет. С разными разделителями справился,используя STRTRAN(thisform.cod[i],",",";") Sergey Sizov 1. Зачем для поиска информации в таблице копировать эту информацию в массив? Не читали про locate, seek? Про индексы? Читал,но создание массива вызвано необходимостью сравнения номера элемента с элементом другого массива. Sergey Sizov 2. Не пробовали просто в командном окне посмотреть результат ?at(thisform.text1.value,thisform.cod[i]) или ?occurs(thisform.text1.value,thisform.cod[i]) ? При чем для тех записей, в которых точно находятся искомые коды? Мне почему-то кажется, что сие зрелище может оказаться очень впечатляющим. Использовать thisform. в командной строке на сколько я знаю не предоставляется возможным,но если я вас правильно понял,то STORE '33.45.31;23.52.34' TO cod STORE '33' TO slovo ?AT(slovo,cod) возвращает 1,всё как надо.Отсюда ранее поставленный вопрос,почему этого не происходит в программе if at(thisform.text1.value,thisform.cod[i])>1 ?at(thisform.text1.value,thisform.cod[i]) безрезультатно. sg12 Обратите внимание на наличие в SELECT опции WHERE, где и определяются условия фильтра. Это не совсем подходит,т.к. условие которое мы задаём из textbox может быть частью содержимого записи поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 16:07
|
|||
---|---|---|---|
VPF9 Поиск слова |
|||
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
В принципе, "перекачка" данных из таблицы в массив может быть оправдана, если на рабочую область, где открыта таблица накладываются различные ограничения (SET FILTER, SET KEY). Но в этом случае вместо LOCATE для поиска следует использовать Select-SQL Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 16:12
|
|||
---|---|---|---|
VPF9 Поиск слова |
|||
#18+
m134n?AT(slovo,cod) возвращает 1,всё как надо.Отсюда ранее поставленный вопрос,почему этого не происходит в программе if at(thisform.text1.value,thisform.cod[i])>1 ?at(thisform.text1.value,thisform.cod[i]) безрезультатно. Одной из причин может являться то, что, по умолчанию, TextBox будет дополнять введенное значение концевыми пробелами. Ну, или пользователь ввел текст не с первого символа, а, скажем, со второго. Т.е. надо не забыть отсечь возможные ведущие и концевые пробелы у значения, введенного в TextBox Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 17:03
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
AndreTMА по теме - это задача из разряда тех, которую решает "полнотекстовый поиск". Поэтому (как бы ни хотелось sg12 доказать обратное) Sergey Sizov прав: либо надо менять структуру хранения данных, либо жертвовать ресурсами и производительностью... AndreTM,спасибо.Давно пора поближе познакомиться с "полнотекстовым поиском". ВладимирМВ принципе, "перекачка" данных из таблицы в массив может быть оправдана, если на рабочую область, где открыта таблица накладываются различные ограничения (SET FILTER, SET KEY). Но в этом случае вместо LOCATE для поиска следует использовать Select-SQL "Перекачка" как раз и вызвана наличием сложного фильтра. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
ВладимирМ,за решение и за разъяснение неполадки с textbox,большое спасибо! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Всем участникам обсуждения,большое спасибо за оказанное внимание к возникшей проблеме и помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 17:05
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
В свою очередь тоже нашёл выход,код добавил в конец предыдущего сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 17:18
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
m134nИспользовать thisform. в командной строке на сколько я знаю не предоставляется возможным,Таки возможно, правда с некоторыми плясками. Зато еще один повод таки использовать текстбокс не сам по себе, а привязанный к переменной, которую уже можно смотреть без заморочек.но если я вас правильно понял,то STORE '33.45.31;23.52.34' TO cod STORE '33' TO slovo ?AT(slovo,cod) возвращает 1,всё как надо.Отсюда ранее поставленный вопрос,почему этого не происходит в программе if at(thisform.text1.value,thisform.cod[i])>1 ?at(thisform.text1.value,thisform.cod[i]) безрезультатно.То есть команда таки работает правильно? Отсюда вывод - то,что Вы тут ввели в переменные совсем не то, что находится в сравниваемых объектах в программе. Ищите разницу.sg12 Обратите внимание на наличие в SELECT опции WHERE, где и определяются условия фильтра. Это не совсем подходит,т.к. условие которое мы задаём из textbox может быть частью содержимого записи поля.Запись поля - это что? Поле записи знаю, запись поля не знаю. :) В любом случае это ничего не меняет, в том числе и применимость select для выборки только нужных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 17:46
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
vm134nно если я вас правильно понял,то STORE '33.45.31;23.52.34' TO cod STORE '33' TO slovo ?AT(slovo,cod) возвращает 1,всё как надо.Отсюда ранее поставленный вопрос,почему этого не происходит в программе if at(thisform.text1.value,thisform.cod[i])>1 ?at(thisform.text1.value,thisform.cod[i]) безрезультатно. То есть команда таки работает правильно? Отсюда вывод - то,что Вы тут ввели в переменные совсем не то, что находится в сравниваемых объектах в программе. Ищите разницу. Разницу уже нашёл,с подсказки ВладимирМ'а,необходим был alltrim(thisform.text1.value) авторЗапись поля - это что? Поле записи знаю, запись поля не знаю. :) В любом случае это ничего не меняет, в том числе и применимость select для выборки только нужных данных. Каюсь,нужно работать над терминологическим знанием рабочей области и по поводу selecta ваша правда :) До недавнего времени был знаком только с применением where как: Код: sql 1.
В свою защиту могу сказать,что совсем недавно начал работать с БД и реализацией приложений для работы с БД,наш курсовой проект на семестр,сейчас нахожусь на одном из заключительных этапов реализации.Не спорю,незнание не освобождает от ответственности :)Будем работать! Если честно испытываю определённое удовольствие работая над проектом и решением такого рода задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 19:20
|
|||
---|---|---|---|
|
|||
VPF9 Поиск слова |
|||
#18+
m134nvпропущено... То есть команда таки работает правильно? Отсюда вывод - то,что Вы тут ввели в переменные совсем не то, что находится в сравниваемых объектах в программе. Ищите разницу. Разницу уже нашёл,с подсказки ВладимирМ'а,необходим был alltrim(thisform.text1.value)Из чего следует, что проблема не возникла бы если бы в настройках текстбокса было настроено убирание концевых пробелов. Почему-то подавляющее большинство о таких настройках даже не догадывается, что приводит к просто дикому количеству alltrim() в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.11.2013, 20:22
|
|||
---|---|---|---|
VPF9 Поиск слова |
|||
#18+
Sergey Sizovm134nпропущено... Разницу уже нашёл,с подсказки ВладимирМ'а,необходим был alltrim(thisform.text1.value)Из чего следует, что проблема не возникла бы если бы в настройках текстбокса было настроено убирание концевых пробелов. Почему-то подавляющее большинство о таких настройках даже не догадывается, что приводит к просто дикому количеству alltrim() в коде. Необъятное не объять - действительно, надо еще додуматься до форматирования из-за лишнего ALLTRIM(). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&mobile=1&tid=1582840]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 151ms |
0 / 0 |