| 
| 
 | Вопрос # 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 (статус: Посетитель)Вопрос отправлен: 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 (статус: Посетитель), 21 февраля 2008, 07:50 [#2]:Попробовал ответ Feniks-а, но по преженму, при объявление свойств компонента Delphi выдает  ublished field 'FQDataBaseName' not a class nor interface type. |  
|   | Oleg_Borisov (статус: Посетитель), 21 февраля 2008, 07:59 [#3]:Повторно попробовал ответ Feniks-а- получилось, но на счет массива вы были правы. |  
|   | Feniks (статус: Бакалавр), 21 февраля 2008, 11:11 [#4]:Да, действительно, на скорую руку я допустил опечатки. Каюсь. 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 (статус: Посетитель), 22 февраля 2008, 07:54 [#6]:Identifier expected but 'ARRAY' found- Delphi-Как мне объявить массив? |  
|   | Feniks (статус: Бакалавр), 22 февраля 2008, 10:32 [#7]:Попробуйте сделать массивы, как советовал Dron, т.е. через объявления типа. |  
|   | 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 (статус: Студент), 22 февраля 2008, 21:44 [#9]:Oleg_Borisov: переместите property QSQL: ... в public - ошибки не будет. Почему - предлагаю подумать самостоятельно. С уважением. |  
|   | Dron (статус: Студент), 22 февраля 2008, 22:09 [#10]: Цитата: Это 5 строчек по 254 символа. Будет 1270, а один на всякий случай. А потом будете части вырезать? Лучше уж 5 полей типа String. А ещё лучше - TStringList.
 С уважением. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |