:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Символьные поля, переменные памяти и константы
Дата: 25.09.05 12:31:23 ОтветитьЦитировать

Вопрос

Я формирую запрос через SQLExec() или макроподстановку. Почему не получается сформировать запрос более чем на 255 символов?

Ответ

Символьные поля, переменные памяти и константы

В FoxPro существует отличия в предельно допустимой длине символьных данных в зависимости от того, о чем идет речь: поле таблицы, переменной памяти или константе

Ну, с полями таблицы все ясно. Их предельная длина определяется собственно размерностью поля. Однако размерность поля не может превышать 254 символов. Для memo-полей объем не может превышать 2ГБ (2 гигабайта - это 2 и 9 нулей символов).

Длина символьной константы не может превышать 255 символов

Длина символьной переменной теоретически не может превышать 16,777,184 символов. "Теоретически", потому, что при определенных условиях все-таки может. Просто за последствия такого превышения никто не отвечает.

Отдельно следует остановиться на отличии символьной константы от символьной переменной. Начинающие программисты очень часто получают сообщение об ошибке "Command contains unrecognized phrase/keyword (Error 36)" именно в силу непонимания этой разницы.

В FoxPro для написания символьных констант можно использовать 3 символа: одинарные кавычки, двойные кавычки, квадратные скобки. В чем отличие символьной константы от символьной переменной проще объяснить на примере. Словами получится долго и невнятно. Например:

  
  LOCAL lcString  
  lcString = 'Начало строки' + " середина строки " + [окончание строки]

Так вот, здесь то, что записано в кавычках и квадратных скобках - это 3 символьные константы, а lcString - это одна символьная переменная

Вообще-то, лично мне трудно представить, как можно написать одну символьную константу длиной больше 255 символов. Точнее написать-то такое можно, но как потом это можно редактировать! Получится совершенно не "читабельный" текст. Я рекомендовал бы разбивать длинные символьные константы на небольшие фрагменты с тем, чтобы каждый отдельный фрагмент целиком помещался в окне редактирования. Примерно так:

  
  LOCAL lcString  
  lcString = "Начало строки"+;  
        " середина строки "+;  
        "окончание строки"

В FoxPro нет специальных управляющих символов, как, например, в C используется обратный слеш. Поэтому, если Вам надо использовать кавычки не как границу символьной константы, а как собственно символ, то просто обрамляйте их кавычками другого типа:

?[ЗАО "Рога и копыта"]

Следует всегда помнить, что FoхPro отличается определенной "самостоятельностью" в преобразовании данных. Применительно к символьным данным это проявляется в том, что если Вы попытаетесь записать в символьное поле больше символов, чем позволяет его размерность, то ошибки это не вызовет, просто "лишние" символы будут отброшены без каких-либо дополнительных сообщений об ошибках.

  
  CREATE CURSOR test (test C(5))  
  INSERT INTO test (test) VALUES ("1234567890")  
  ?test.test

Если Вам надо записать в переменную памяти несколько строк текста "как есть", то, начиная с версии Visual FoxPro 7 для этой цели лучше использовать скобки TEXT...ENDTEXT

  
  LOCAL lcText  
    
  TEXT TO m.lcText NOSHOW  
  Первая строка текста  
  Вторая строка текста  
  "Название"  
  ENDTEXT  
    
  ?m.lcText

Как видите, все что находится между TEXT и ENDTEXT воспринимается не как набор команд, а просто как текст. Содержимое переменой m.lcText.



Исправлено: Владимир Максимов, 30.12.06 15:22
Ratings: 0 negative/2 positive


Тема Просмотров Написано Написано
  Program 5157 Владимир Максимов 01.03.05 21:02
  Как определить директорию, из которой запущена программа 8848 Владимир Максимов 22.03.05 09:41
  Как проверить факт существования переменной памяти, поля таблицы, метода формы 11857 Владимир Максимов 20.04.05 17:31
  Как работать с ini-файлами 14466 Владимир Максимов 01.05.05 11:17
  Символьные поля, переменные памяти и константы 8518 Владимир Максимов 25.09.05 12:31
  Как работать с путями доступа и именами файлов, содержащих пробелы 6320 Владимир Максимов 22.02.06 21:00
  Как вывести приложение на передний план 16350 Владимир Максимов 04.03.07 13:17
  Как получить разницу двух дат в формате: лет, месяцев, дней 9385 Владимир Максимов 25.02.08 17:32


Извините, но у вас нет прав для того, чтобы писать в этом форуме.

On-line: 44 and Guests: 44


© 2006 Fox Club 
Яндекс.Метрика