|
Вопрос # 1 857/ вопрос открыт / |
|
Здравствуйте, эксперты!
Помогите пожалуйста с решением данной проблемы:
Используется Delphi 6, TDBF v. 6.9.1. В программе производится поиск в *.dbf по трем строковым полям. У меня на компе программа работает замечательно, но когда переношу на другой комп, поиск почему-то не работает. В чем может быть причина? Ведь компоненты TDBF работают напрямую без BDE, ODBC и т.п.
Приложение: Переключить в обычный режим- V:=VarArrayOf([xfam,xim,xot]);
- if dbf1.Locate('FM;IM;OT',V,[loCaseInsensitive]) then
- begin
- npd:=dbf1.Fields.DataSet.FieldValues['NPD'];
-
-
- begin
- if dbf4.Locate('NPD',npd,[loCaseInsensitive]) then
- begin
- if (xfam=dbf4.Fields.DataSet.FieldValues['FAM'])
 |
Вопрос задал: Nikolas_T (статус: Посетитель)
Вопрос отправлен: 28 августа 2008, 09:17
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 28 августа 2008, 16:11; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 28 августа 2008, 10:01 [#1]:
Я надеюсь, вы понимаете, что это для пользователя есть понятие "не работает", а для программиста это шире, например: "выкидывает ошибку с следующим текстом", "просто падает", "падает с синим экраном", "ищет, но просто не находит" и так дальше.
Также не хватает фразы о том, работает ли программа в остальной части функционала, но предположим, что да.
Также приведённый кусок кода дает весьма опросредственное представление о возможных ошибках.
Тогда предположу следующее. Кодовая страница на той, другой машине не такая как у Вас.
Что же делать? Вести логи, как это делают хорошие программисты. Я вижу в Вашем куске кода что то похожее на них. На сайте есть статья (https://www.delphi-int.ru/articles/40/) на эту тему.
Как минимум, надо понять, где "валиться". В тяжёлых случаях я просто вставляю вывод чисел "1", "2" и так дальше по тексту "плохих" процедур. Потом смотрю, где обрывается последовательность. В некоторых случаях нужно бывает вставить ещё.
Также крайне важно делать самопроверки. Например, вы уверены, что переменная прочитая с инифайла будет гарантировано равна 0 или 1. А юзер исхитрился и "поправил файл". Понятно, что приложение не будет работать.
Также не забываем о хорошой штуке try-ecxept/try-finally.
И на последок, не работает на одной конкретно взятой машине, или вообще на всех других? У моей практие был случай, когда пользователь тоже жал кнопку "искать" и жаловался, что ничего не ищет. А на самом деле он вводил в Edit пару пробелов и программе не было что искать. После того, как я поправил код (стал использовать дополнительно trim) и выводил в таких случаях "Пробелы по краям лишние, вводите значимые буквы", он начал жалеться мне, что теперь мало, что не работает, так ещё и ругается.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Nikolas_T (статус: Посетитель), 28 августа 2008, 13:45 [#2]:
Хорошо, спасибо за советы, в следующий раз буду более точен. С кодировкой разбирался уже (на всех машинах 866), также не ищет, т.е. программа работает, но по поиску дает отрицательный результат. Trim я тоже использую, так что могу сказать что не из-за пробелов. Программа работает только на моей машине, на всех других не работает (проверял еще на трех), т.е. я не могу понять в чем разница между моим компом и другими - вот в этом то и проблема.
|
|
Вадим К (статус: Академик), 28 августа 2008, 16:11 [#3]:
делайте лог и ищите, на каком условии валиться. А потом приводите этот кусок кода. Не бойтесь и наставте выводов в лог хоть через строку. А потом подумаем дальше.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|