Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизКак создать поле в ClientDatSet Найти похожие ветки
← →
Вася (2006-06-12 19:49) [0]Всем здравствуйте!
Поскажите плиз как создать поле в ClientDataSet, че-то у меня никак не получается! Да и доку по вопросу не могу найти. Если знаете где данная тема освещается(ну типа ClientDataSet для "Чайников":) дйте ссылочку.
Заранее спасибо.
← →
Johnmen © (2006-06-12 20:24) [1]Даблклик на ClientDataSet - редактор полей.
← →
API © (2006-06-13 08:33) [2]как создать поле в ClientDataSet
Как и в любом другом DataSet"е:
var
F: TField;
begin
F := TIntegerField.Create(DataSet);
F.FieldName := "MyField";
F.Index := DataSet.FieldCount;
F.DataSet := DataSet;
F := TStringField.Create(DataSet);
F := TWideStringField.Create(DataSet);
F := TDateTimeField.Create(DataSet);
<...>
F.FieldKind := <[fkData, fkCalculated, fkInternalCalk, fkLookup]>;
(и прочие свойства)
P.S. Но ДО открытия/создания набора данных.
← →
Вася (2006-06-13 10:24) [3]Вообщем-то я себе этот процесспредставлял по другому. Дело в том что имеется уже готовый датасет и у него уже есть таблицы. При их создании человек не пользовался ни единой строчкой кода, и я так понимаю все делалось мышкой. Пытаюсь создать поле: правой кнопкой по fields-> addField. Создаю поле, при попытке активировать clientdataset он ругается со словами Field "моеполе" not found.
← →
Ega23 © (2006-06-13 10:57) [4]
FCDS:=TClientDataSet.Create(nil);
With FCDS do
begin
With FieldDefs.AddFieldDef do
begin
DataType := ftGuid;
Size:=38;
Name := "EventGUID";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "AccID";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftDateTime;
Name := "DatIn";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "CLSID";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "CLSEveCod";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "ObjID";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftGuid;
Size:=38;
Name := "TranGUID";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size:=255;
Name := "EventStr";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size:=10;
Name := "DatInDateStr";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size:=10;
Name := "DatInTimeStr";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size:=255;
Name := "PersNam";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftString;
Size:=64;
Name := "AccNam";
end;
With FieldDefs.AddFieldDef do
begin
DataType := ftInteger;
Name := "TSID";
end;
CreateDataSet;
end;
Вот, например...
← →
novill © (2006-06-13 10:57) [5]
> Вася
А ты CreateDataset делал?
← →
sniknik © (2006-06-13 11:16) [6]> при попытке активировать clientdataset он ругается со словами Field "моеполе" not found.
пытаешся создать поле не имеющее отражения(поля) в получаемом рекордсете? сделай его вычисляемым (Calculated). там же мышкой.
← →
sniknik © (2006-06-13 11:17) [7]> А ты CreateDataset делал?
ну судя по всему он не создает новый, а получает его откудато.
← →
novill © (2006-06-13 15:09) [8]Да, уже написали, надо пользоваться на fields, а fielddefs
← →
Вася (2006-06-13 23:24) [9]Имеется ПУСТОЙ дадасет, который загружет в себя выбранный пользователем *.cds файл. Вообщем-то создание поля можно и отложить, на данный момоент столкнулся с такой проблеммой. При загрузке файла в датасет он отображет все корректно, После редактирования полей и ClientDataSet.Post фаил сохраняется на диск, НО, после его загрузке, поля которые мы редактировавли добавляются в конец фаила. и высвечиваются не корректно. Например до редактирования
1. -----------
2.-----------
3-----------
4.----------, а после редактирования 1,3 и сохранения получается вот так:
2.----------
4.----------
1.----------
3.---------. Как этого избежать?
← →
Johnmen © (2006-06-13 23:33) [10]1. cds файл содержит описание всех полей НД. Естественно, что при загрузке его будет сообщ.об ошибке об отсутствующих полях в файле cds, но присутствующих в ClientDataSet.
2. Насчёт редактирования ЗНАЧЕНИЙ полей, приводящего к " поля которые мы редактировавли добавляются в конец фаила" - это гон...:)
← →
sniknik © (2006-06-13 23:59) [11]вообщето номер по порядку записи нигде не гарантируется, кроме разве что самых простых файловых форматов, да и там проблемы, стоит наложить индекс и весь порядок сбивается.
если у тебя этот номер (1,2,3,4) в данных (поле под него создано, данные в нем) то просто сделай по нему индекс, это гарантия определенного индексом порядка.
или можно попробовать отключить логирование изменений (logchanges), так понимаю это изза них старые записи остаются, просто им меняется признак, а изменения делаются в копии с признаком "новая", и копия естественно добавляется к концу рекордсета.
← →
sniknik © (2006-06-14 00:01) [12]Johnmen © (13.06.06 23:33) [10]
почему гон? вполне возможно... допускаю во всяком случае подобное поведение, оно логично.
← →
sniknik © (2006-06-14 00:03) [13]вернее, его (подобное поведение) можно обьяснить логикой.
← →
Johnmen © (2006-06-14 00:12) [14]
> sniknik © (14.06.06 00:01) [12]
Ты не понял - он же про порядок ПОЛЕЙ, а не ЗАПИСЕЙ...:)
← →
sniknik © (2006-06-14 00:18) [15]а..., а на "рисунке" записи. думаю он "правильней".
← →
Вася (2006-06-14 01:37) [16]sniknik [11]. Все так и происходит как вы описали. Фаил переписывается и измененные поля добавляются в конец фаила с тем-же индексом, причем поля в которых мы проводили изменения тоже остаются, но при загрузке не отображаются, хотя в фаиле есть и стоят на том-же месте что и до редактирования. Пробовал поставить False у LogChanges, не помогло.
Насчет индексов, индексы есть, и они не нарушаются как был у первой записи индекс 1, так он и остается, просто при загрузке сам порядок отображения записей меняется, но целостность данных остается. Может их после загрузки просто сортировать по индексу да и все? Но свойства sort у датасета я че-то не нашел.
← →
Вася (2006-06-14 01:43) [17]На сечт log changes, программа не ругается, просто ничего не меняется.
← →
sniknik © (2006-06-14 08:40) [18]> Насчет индексов, индексы есть
где есть? в ClientDataSet? откуда знаеш?
> просто при загрузке сам порядок отображения записей меняется
вот это точно "гон", при сушествующем и установленом индексе, порядок задает он а не то когда запись редактировали.
> Но свойства sort у датасета я че-то не нашел.
говорил же, индекс... (причем там свойство индексфиелднемес по моему аналогично sort также автоматом его делает при отсутствии)
> На сечт log changes, программа не ругается, просто ничего не меняется.
а каких изменений ты хотел? и когда? после того как оно уже поменялось местами, устанавливай фалсе/труе... поздно. это только на, и в процессе действовать должно, при редактировании, записи, чтении, причем при отсутствии того же индекса установленного. и потом это же теоретически, "выведено" логическим путем из предположения что порядок при редактировании меняется, предположение почему возможно... вполне впрочем правдоподобное, если подумать как этот ClientDataSet может работать.
← →
Вася (2006-06-14 11:02) [19]Ну все равно не понятно, как с этой фигней бороться. Получается что хоть и есть автоинкренментное поле Index он все равно заводит и свои индексные поля и по ним и сортирует. И вообще почему отредатированные записи не пререписываются, а добавляются в конец фаила, причем записи которые редакировали остаються неизменными на всем месте просто не отображаются.
← →
sniknik © (2006-06-14 15:01) [20]> Получается что хоть и есть автоинкренментное поле Index он все равно заводит и свои индексные поля и по ним и
> сортирует.
автоинкрементное поле это только, и исключительно, автоинкрементное, ни функций индекса ни ключа (часто путают т.к. связка авто..+ключ часта, чуть ли не стандарт) не выполняет!
> И вообще почему отредатированные записи не пререписываются
[11] вполне правдоподобное обьяснение... хотя, так понимаю, логика не всех убеждает, а от пары проверок у них руки отваливаются... тогда по другому - "так написано, и не важно зачем, все одно не хочеш понимать. претензии к разработчикам". понятнее?
p.s. ты так и не сказал ГДЕ ты видиш индексы...
← →
Вася (2006-06-15 17:12) [21]Вообщем насчет индексов я поспешил. Походу их там нету. Сдается мне все там примерно как в простом файле. Записи идут по порядку, только стоят определеннные пометки где начинается поле и где заканчивается. При перезаписи у датысет просто нет индекса чтоб поставить запись на прежнее место.
← →
Johnmen © (2006-06-15 17:57) [22]Индексы можно создать и использовать именно в компоненте TClientDataSet.
Индексы в файле не хранятся...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.042 c