Problemas com packet record e tamanho da string

Delphi

23/01/2012

Pessoal, eu estou com um problema assim: Minha aplicação ela cria em Run Time um campo, que nós chamamos de campos customizáveis. Acontece que
tem uma validação no tamanho desse campo, e no momento está em 31 caracteres(Char). Bem, exeiste uma função do tipo TDSDataPacketFldDesc(
procedure AddFieldDesc(const FldName: string; FldType, Attributes: Integer);
var
FldDesc: TDSDataPacketFldDesc;)
Essa é a declaração dessa var. Isto tudo está na Unit Provider. Esse tipo(TDSDataPacketFldDesc) está declarado na Unit DSIntf. Nessa Unit, esse tipo é um PACKED RECORD, que tem os seguintes campos:
TDSDataPacketFldDesc = packed record
szFieldName: MIDASNAME; { Column Name }
iFieldType: Integer; { Column Type }
iAttributes: Word; { Column attributes }
end;
Esse MIDASNAME está declarado assim:
MIDASNAME = packed array [0..31] of Char; e eu mudei para MIDASNAME = packed array [0..60] of Char; Mas continua não funcionando. Tudo isso na uNIT DSIntf. Como eu faço para poder aceitar nomes com mais de 31 caracteres? Onde eu devo alterar?
Pjava

Pjava

Curtidas 0

Respostas

Pjava

Pjava

23/01/2012

Fiz essa validação(fixei o tamanho = 60 ) e o erro foi: Field name não pode ser maior que 31 caracteres.

procedure AddFieldDesc(const FldName: string; FldType, Attributes: Integer);
  var
    FldDesc: TDSDataPacketFldDesc;
  begin
    if Length(FldName) >= 60 {SizeOf(FldDesc.szFieldName)} then // validei aqui nessa linha como podem ver
      raise EDSWriter.CreateFmt(SFieldNameTooLong,[SizeOf(FldDesc.szFieldName) - 1]);
    FillChar(FldDesc, SizeOf(FldDesc), 0);
    StrLCopy(FldDesc.szFieldName, PChar(FldName), SizeOf(FldDesc.szFieldName) - 1);
    FldDesc.iFieldType := FldType;
    FldDesc.iAttributes := Attributes;
    Check(FIDSWriter.AddColumnDesc(FldDesc));
  end;
GOSTEI 0
POSTAR