| 
| 
 | Вопрос # 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]:делайте лог и ищите, на каком условии валиться. А потом приводите этот кусок кода. Не бойтесь и наставте выводов в лог хоть через строку. А потом подумаем дальше. Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |