Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.038 c
3-1150199874
DVM
2006-06-13 15:57
2006.08.20
Сжатие базы Access и связанные таблицы


15-1153740447
ZeroDivide
2006-07-24 15:27
2006.08.20
Что вас заставляет метать бисер?


15-1153461311
tButton
2006-07-21 09:55
2006.08.20
<select>


15-1153609537
Ketmar
2006-07-23 03:05
2006.08.20
сборник стихов Дины Арбениной


2-1154167803
Destroyer
2006-07-29 14:10
2006.08.20
Проблема с CoInitialize





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский