Показать сообщение отдельно
  #2  
Старый 16.10.2019, 20:32
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Использовать конструкции вроде DBGrid6.Columns[3] - плохая примета. В случае, если столбец грида будет перемещён (методом перетаскивания) - получите неверный результат. Лучше работать с датасетом, откуда берутся данные для грида (это может быть ADOTable или ADOQuery), следующим образом:
Код:
Query1.FieldByName('Имя_поля_откуда_надо_получить_данные').AsString
Кроме того, использование имён, не несущих информации (вроде "DBGrid6") - дурной тон. Если будете продолжать в том же духе, даже в средней своей программе быстро запутаетесь и будете тратить кучу времени, чтобы вспомнить, что есть что. Правильнее будет давать осмысленные имена с префиксом, например qClients для Query или tClients для Table. Да, это займёт чуть больше времени на написание имён, но существенно облегчит процесс разработки, поверьте! Префиксы к именам Вы используете, но ставьте их не сзади, а спереди, так будет удобнее.
Теперь по сути вопроса. Если часть базы, расположенная на других формах, функционирует нормально, тогда смотрим приведённый код.
Первое: не нужно засовывать в текст запроса конструкции вроде DBGrid6.Columns[3], он этого не поймёт. Введите ещё одну текстовую переменную и сделайте присвоение. Второе: DBGrid6.Columns[3] имеет тип TColumn, с текстовым типом несовместим. Вытащить данные конечно оттуда можно, но это через ...опу, гораздо правильнее делать так, как я описал выше, через датасет.
Третье: закрывать датасет не нужно, он автоматически закроется сам после команды "SQL.Clear".
Четвёртое: тщательно проверьте текст запроса, не допущены ли ошибки в алгоритме (это касается слова "AND" в запросе в разных ситуациях, проверьте!). Оперативная проверка текста запроса с отменой его выполнения такова:
Код:
ShowMessage(DataModule1.FindKlientsQ.SQL.CommaText);
Exit;
Ответить с цитированием