Problemas com packet record e tamanho da string
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?
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
Curtidas 0
Respostas
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