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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 1 357

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

Доброго времени суток, уважаемые эксперты!
Создал компонент, потомок Query-
...
type
TMyExeQuery = class(TQuery)
FQDataBaseName: string;
FQSQL: array[0..1271] of char;
...
Но не могоу объявить поля
FQDataBaseName: string;
FQSQL: array[0..1271] of char;

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

Вопрос задал: Oleg_Borisov (статус: Посетитель)
Вопрос отправлен: 20 февраля 2008, 16:21
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, Oleg_Borisov!
Ваш компонент будет приблизительно такого вида:

type
   TMyExeQuery = class(TQuery)
   private
      FQDataBaseName: string;
      FQSQL: array [0 .. 1271] of char;
 
      procedure SetQDataBaseName(value : string);
      procedure FQSQL(value : array [0 .. 1271] of char);
   protected
   public
   published
      property QDataBaseName : String read FQDataBaseName write SetQDataBaseName;
      property QSQL : array [0 .. 1271] of char read FQSQL write SetQSQL;
   end;
............
procedure TMyExeQuery.SetQDataBaseName(value : String);
begin
     FQDataBaseName := value;
end;
 
procedure TMyExeQuery.SetQSQL(value : array [0 .. 1271] of char);
begin
     FQSQL := value;
end;
Меня только берут сомнения на счет массива...
А дальше уже все зависит от того, зачем вам эти поля/свойства и как вы с ними планируете работать.
Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 20 февраля 2008, 18:42
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: Dron

Здравствуйте, Oleg_Borisov!
Feniks, видимо, даже не проверял код, который предложил. Где это виданно, чтобы "array [0 .. 1271] of char" писалось во всех местах, в т.ч. в описании параметров процедуры? Нужно объявить новый тип данных:

type
  TCharArr = array [0 .. 1271] of char;
И далее нужно везде писать TCharArr.
Ну и инкапсуляцию для FQDataBaseName делать незачем.
Процедура SetQSQL в секции private вообще не объявлена...

Вот вместо ответа получился разбор полётов ответа другого эксперта... :-)

Исправляйте всё это - и будет работать. Кстати, длина 1272 выглядит действительно странно... Откуда такое число?

Ответ отправил: Dron (статус: Студент)
Время отправки: 21 февраля 2008, 10:54
Оценка за ответ: 5

Комментарий к оценке: Это 5 строчек по 254 символа. Будет 1270, а один на всякий случай.

Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 22 февраля 2008, 22:09; участников в обсуждении: 4.
Храмцов Денис

Храмцов Денис (статус: 1-ый класс), 20 февраля 2008, 16:58 [#1]:

Не совсем понятно как понимать "не могу объявить", но если вы имеете в виду редактор свойств, то необходимо добавить секцию published и там описать свои поля

published
property DataBaseName : string read FQDataBaseName write FQDataBaseName default 'myDataBase';
end;

Остальные поля также.
Значение по умолчанию (default) не обязательно.
read/write - можно использовать только одно в зависимости от того как поля будут использоваться.
Oleg_Borisov

Oleg_Borisov (статус: Посетитель), 21 февраля 2008, 07:50 [#2]:

Попробовал ответ Feniks-а, но по преженму, при объявление свойств компонента Delphi выдает:-Published field 'FQDataBaseName' not a class nor interface type.
Oleg_Borisov

Oleg_Borisov (статус: Посетитель), 21 февраля 2008, 07:59 [#3]:

Повторно попробовал ответ Feniks-а- получилось, но на счет массива вы были правы.
Feniks

Feniks (статус: Бакалавр), 21 февраля 2008, 11:11 [#4]:

Да, действительно, на скорую руку я допустил опечатки. Каюсь.
Oleg_Borisov, вы поняли, где и что надо подправить ? Или же стоит вам полный код выкладывать ?
Oleg_Borisov

Oleg_Borisov (статус: Посетитель), 22 февраля 2008, 07:53 [#5]:

Опечатка, конечно есть у Feniks-а, но дело не то.
private
FQDataBaseName: string;
FQSQL: array [0 .. 1271] of char;

procedure SetQDataBaseName(value : string);
procedure FQSQL(value : array [0 .. 1271] of char);
Вместо procedure FQSQL()- procedure SetQSQL.
Но дело не в этом. Identifier expected but 'ARRAY' found- Delphi.
Oleg_Borisov

Oleg_Borisov (статус: Посетитель), 22 февраля 2008, 07:54 [#6]:

Identifier expected but 'ARRAY' found- Delphi-Как мне объявить массив?
Feniks

Feniks (статус: Бакалавр), 22 февраля 2008, 10:32 [#7]:

Попробуйте сделать массивы, как советовал Dron, т.е. через объявления типа.
Oleg_Borisov

Oleg_Borisov (статус: Посетитель), 22 февраля 2008, 14:47 [#8]:

Попробовал совет Dron-а. Но теперь не могу объявить свойство property QSQL- Published property 'QSQL' cannon be of type ARRAY. Но мне необходимо задавать именно строку более 254 символа, т. е. 1271 символ.

type
TCharArr = array [0 .. 1271] of char;
TMyExeQuery = class(TQuery)
private
FQDataBaseName: string;
FQSQL: TCharArr;
procedure SetQDataBaseName(value : string);
procedure SetQSQL(value : TCharArr);
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
property QDataBaseName : String read FQDataBaseName write SetQDataBaseName;
property QSQL :TCharArr read FQSQL write SetQSQL;
end;
Dron

Dron (статус: Студент), 22 февраля 2008, 21:44 [#9]:

Oleg_Borisov: переместите property QSQL: ... в public - ошибки не будет. Почему - предлагаю подумать самостоятельно.
С уважением.
Dron

Dron (статус: Студент), 22 февраля 2008, 22:09 [#10]:

Цитата:

Это 5 строчек по 254 символа. Будет 1270, а один на всякий случай.

А потом будете части вырезать? Лучше уж 5 полей типа String. А ещё лучше - TStringList.
С уважением.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 18 октября 2017, 07:01
Выполнено за 0.07 сек.
Рейтинг@Mail.ru