|
Вопрос # 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.
С уважением.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|