powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Дублирование полей DataSet при повторном выполнении
13 сообщений из 13, страница 1 из 1
Дублирование полей DataSet при повторном выполнении
    #39517510
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код, создающий динамически dxMemData из колонок cxGrid
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  AMemData.Close;
  if AMemData.Fields.Count > 0 then
    for i := 0 to AMemData.FieldCount - 1 do
      AMemData.Fields[i].Free;

  while AMemData.FieldCount > 1 do
    AMemData.Fields[AMemData.FieldCount - 1].Free;

  AMemData.DisableControls;
  for i := 0 to grdMainGridDBTableView.ColumnCount - 1 do
  begin
    CreateField(AMemData, grdMainGridDBTableView.Columns[i].DataBinding.FieldName, grdMainGridDBTableView.Columns[i].DataBinding.Field.DataType);
    AMemData.FieldDefs.Update;
  end;
  AMemData.EnableControls;



Если выполнить данный код повторно возникает ошибка дублирования полей DataSet, подскажите почему ?
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517520
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet
Код: pascal
1.
2.
3.
4.
5.
6.
if AMemData.Fields.Count > 0 then
    for i := 0 to AMemData.FieldCount - 1 do
      AMemData.Fields[i].Free;

  while AMemData.FieldCount > 1 do
    AMemData.Fields[AMemData.FieldCount - 1].Free;


Добиваешь?
wsnet
Код: pascal
1.
AMemData.DisableControls;


Это должно быть первой строкой.

Ну и принято давать точный текст ошибки, а не свою трактовку.
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517523
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Чистишь некорректно, значит.
Нельзя вызвать Clear для Fields/FieldDefs?
Или тупо пересодать батареи (с переподключением его контролирует, конечно).
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517525
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДИли тупо пересодать батареи датасет (с переподключением его контролирует, конечно).
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517529
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДчччДИли тупо пересодать батареи датасет (с переподключением его контролирует контролов, конечно).

:(
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517530
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

AMemData.ClearFields - проще и понятнее.
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517539
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiwsnet,

AMemData.ClearFields - проще и понятнее.
Учитывая, что пациент уже наваял, пусть лучше "с перебором" разберётся. О ведь такой же код где-то ещё применит.
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517721
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanwsnet
Код: pascal
1.
2.
3.
4.
5.
6.
if AMemData.Fields.Count > 0 then
    for i := 0 to AMemData.FieldCount - 1 do
      AMemData.Fields[i].Free;

  while AMemData.FieldCount > 1 do
    AMemData.Fields[AMemData.FieldCount - 1].Free;


Добиваешь?
wsnet
Код: pascal
1.
AMemData.DisableControls;


Это должно быть первой строкой.

Ну и принято давать точный текст ошибки, а не свою трактовку.
Добиваю ) разные варианты пробовал просто, в чем проблема не пойму (
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517723
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДschiwsnet,

AMemData.ClearFields - проще и понятнее.
Учитывая, что пациент уже наваял, пусть лучше "с перебором" разберётся. О ведь такой же код где-то ещё применит.

Это я ошибся. Не тот метод.

Надо AMemData.Fields.Clear
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517740
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiчччДпропущено...

Учитывая, что пациент уже наваял, пусть лучше "с перебором" разберётся. О ведь такой же код где-то ещё применит.

Это я ошибся. Не тот метод.

Надо AMemData.Fields.Clear

Делаю таким образом:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 AMemData.Close;

  AMemData.Fields.Clear;

  for i := 0 to grdMainGridDBTableView.ColumnCount - 1 do
  begin
    CreateField(AMemData, grdMainGridDBTableView.Columns[i].DataBinding.FieldName, grdMainGridDBTableView.Columns[i].DataBinding.Field.DataType);
    AMemData.FieldDefs.Update;
  end;



И все равно ошибка:

Код: pascal
1.
Duplicate name 'ID' in TFieldDefs



В чем проблема не понимаю.
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517747
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetИ все равно ошибка:

Код: pascal
1.
Duplicate name 'ID' in TFieldDefs



В чем проблема не понимаю.

В том, что FieldDefs тоже надо очистить, видимо
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517757
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

А чем fielddefs отличается от field ?
...
Рейтинг: 0 / 0
Дублирование полей DataSet при повторном выполнении
    #39517810
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetschi,

А чем fielddefs отличается от field ?

"Datasets use TFieldDefs to manage the field definitions they use to create field objects that correspond to fields in a database table. Every field definition listed by TFieldDefs has a corresponding TField object, but not all TField objects have a corresponding field definition. For example, calculated fields do not have field definitions.

TTable and TClientDataSet objects also use TFieldDefs when creating a new table.

With object field types, such as TADTField and TArrayField , there are two ways to represent the field definitions: hierarchically or flattened. When represented hierarchically, object field definitions contain a set of child definitions for the constituent subfields. When represented as a flattened set, child field definitions appear as siblings sequentially after the parent field definition.

TFieldDefs stores field definitions hierarchically. This is in contrast to TFieldDefList , which lists the child TFieldDef objects of object fields sequentially after the parent TFieldDef .

Use the properties and methods of TFieldDefs to:

Access a specific field definition.

Add or delete field definitions from the list (when creating new tables).

Find out how many fields are defined.

Copy a set of field definitions to another dataset.
"


vs

"TField encapsulates the fundamental behavior common to all field components. It introduces the properties, events, and methods that are used to:

Change the value of a field in a dataset.

Convert the value of a field from one data type to another.

Validate data that the user enters for a field.

Define how the data in the field appears as it is displayed or edited.

Calculate the value of a field from code written in the OnCalcFields event of the dataset.

Look up the field's value from another dataset.

Do not create instances of TField. TField descendants are created automatically each time a dataset is activated. These descendants can be dynamic (the default) or persistent. Dynamic field components reflect the columns in the underlying metadata at the time a dataset is opened. Persistent field components are created at design time using the Fields editor, which specifies the fields in the dataset, their properties, and their ordering.

Creating persistent field components guarantees that each time an application runs, it uses and displays the same columns, in the same order, even if the physical structure of the underlying database changes. If a column on which a persistent field component is based is deleted or changed, the IDE generates an exception rather than opening the dataset against a nonexistent column or mismatched data. If this happens, remove the field component for the nonexistent field using the Fields editor.
"
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Дублирование полей DataSet при повторном выполнении
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]