Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 857

/ вопрос открыт /

Здравствуйте, эксперты!

Помогите пожалуйста с решением данной проблемы:
Используется Delphi 6, TDBF v. 6.9.1. В программе производится поиск в *.dbf по трем строковым полям. У меня на компе программа работает замечательно, но когда переношу на другой комп, поиск почему-то не работает. В чем может быть причина? Ведь компоненты TDBF работают напрямую без BDE, ODBC и т.п.

Приложение:
  1. V:=VarArrayOf([xfam,xim,xot]);
  2. if dbf1.Locate('FM;IM;OT',V,[loCaseInsensitive]) then
  3. begin
  4. npd:=dbf1.Fields.DataSet.FieldValues['NPD'];
  5.  
  6.  
  7. begin
  8. if dbf4.Locate('NPD',npd,[loCaseInsensitive]) then
  9. begin
  10. if (xfam=dbf4.Fields.DataSet.FieldValues['FAM'])


Nikolas_T Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Nikolas_T (статус: Посетитель), 28 августа 2008, 13:45 [#2]:

Хорошо, спасибо за советы, в следующий раз буду более точен. С кодировкой разбирался уже (на всех машинах 866), также не ищет, т.е. программа работает, но по поиску дает отрицательный результат. Trim я тоже использую, так что могу сказать что не из-за пробелов. Программа работает только на моей машине, на всех других не работает (проверял еще на трех), т.е. я не могу понять в чем разница между моим компом и другими - вот в этом то и проблема.
Вадим К

Вадим К (статус: Академик), 28 августа 2008, 16:11 [#3]:

делайте лог и ищите, на каком условии валиться. А потом приводите этот кусок кода. Не бойтесь и наставте выводов в лог хоть через строку. А потом подумаем дальше.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.02 сек.