Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ClientDataSet, AutoInc, Index, RecNo 
:(
    Опции темы
x0x0x0
  Дата 10.3.2015, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2015

Репутация: нет
Всего: нет



Как в ClientDataSet автоматически присваивать комулибо field-у из записи его RecNo ?

Тоесть нужно что бы после Insert Delete и Append все записи обновляли своё поле RecID и устанавливали в него свой RecNo, конечно можно тупым перебором всё это сделать и писать отдельную процедуру, вешать событие и тд. Но неужели нету элегантного и простого решения ?
PM MAIL   Вверх
salik
Дата 10.3.2015, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Можно создать вычисляемое поле и в событии OnCalcFields присваивать ему значение.
PM MAIL   Вверх
x0x0x0
Дата 10.3.2015, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2015

Репутация: нет
Всего: нет



Пытался, но что-то не получилось. 

Пример кода былбы очень кстати  smile 
PM MAIL   Вверх
x0x0x0
Дата 11.3.2015, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2015

Репутация: нет
Всего: нет



Код

procedure TDataModuleDatabase.MemDataCalcFields(DataSet: TDataSet);
begin
    DataSecurity.FieldByName('RecId').AsInteger := MemData.RecNo;
end;




Вопрос снят, оказывается в  Datasnap.DBClient под XE7 есть баг с подсчетом RecNo

http://qc.embarcadero.com/wc/qcmain.aspx?d=128255

Код

Eror in Datasnap.DBClient

Buggy:

function TCustomClientDataSet.GetRecNo: Integer;
var
  BufPtr: TRecBuf;
begin
  CheckActive;
  if State = dsInternalCalc then
    Result := -1
  else
  begin
    if State = dsCalcFields then
      BufPtr := TRecBuf(BytesOf(PByte(CalcBuffer), SizeOf(TRecInfo))) // -- Error
    else
      BufPtr := ActiveBuffer;
    Result := PRecInfo(PByte(BufPtr) + FRecInfoOfs).RecordNumber;
  end;
end;

Correct:

function TCustomClientDataSet.GetRecNo: Integer;
var
  BufPtr: TRecBuf;
begin
  CheckActive;
  if State = dsInternalCalc then
    Result := -1
  else
  begin
    if State = dsCalcFields then
      BufPtr := CalcBuffer // Correct
    else
      BufPtr := ActiveBuffer;
    Result := PRecInfo(PByte(BufPtr) + FRecInfoOfs).RecordNumber;
  end;
end;


Это сообщение отредактировал(а) x0x0x0 - 11.3.2015, 01:10
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.