Nome dos campos faltando o último caractere. #115
Replies: 6 comments 1 reply
-
Bom dia, vou analisar o problema. Eu particularmente não utilizo o FMX. Mas vou fazer uns testes e volto a postar aqui |
Beta Was this translation helpful? Give feedback.
-
Poderia tentar novamente com o código atualizado? Teve um pull request que enviaram corrigindo o problema |
Beta Was this translation helpful? Give feedback.
-
Tive problema com FMX no android no pacote DataSet.Serialize.Utils na function CreateValidIdentifier qdo percorre string no windows comeca |
Beta Was this translation helpful? Give feedback.
-
Voce esta usando a versão 2.3.4? O @igorbastosib fez um ajuste sobre isso |
Beta Was this translation helpful? Give feedback.
-
@viniciussanchez eu arrumei isso na src/DataSet.Serialize.Import.pas, neste commit específico: https://bit.ly/30MBuvd Não tem nada nesta Unit especifica que se referencia à alteração q eu fiz na outra Unit, possivelmente é um problema "novo". @objetiva-inf dá uma olhada em oq eu fiz para corrigir o problema EXATAMENTE igual ao seu, mas na unit e commit q citei, tente corrigir e subir um pull-request. Lembre-se q a regra do StringIndex mudou para o D11 e tem q ser considerado, ou seja, para Mobile nos Delphi10.4.2 e inferiores, a String começa no Index 0, MAS para o Delphi11 ela começa no Index 1. Muito obrigado. |
Beta Was this translation helpful? Give feedback.
-
Em 20/11/2021 14:08, Vinicius Sanchez escreveu:
Voce esta usando a versão 2.3.4? O @igorbastosib [1] fez um ajuste
sobre isso
--
You are receiving this because you commented.
Reply to this email directly, view it on GitHub [2], or unsubscribe
[3].
Triage notifications on the go with GitHub Mobile for iOS [4] or
Android [5].
Boa tarde
Sim estou usando a versao 2.3.4 mas no android qdo percorre string a
base comeca em 0(Zero) e no windows
a base comeca em 1, na rotina seguinte:
TDataSetSerializeUtils.FormatCaseNameDefinition
foi utilizado as funcoes low e High que traz a base e ultimo item
correto para windows e Android.
na rotina a baixo fiz as correcoes assinaladas:
class function TDataSetSerializeUtils.CreateValidIdentifier(const AName:
string): string;
var
I: Integer;
LCharacter: Char;
begin
I := 0;
{$IF DEFINED(FPC)}
Result := EmptyStr;
{$ENDIF}
SetLength(Result, Length(AName));
for LCharacter in AName do
begin
{$IF DEFINED(FPC) or (CompilerVersion < 20)}
if CharInSet(LCharacter, ['A' .. 'Z', 'a' .. 'z', '0' .. '9', '_'])
then
{$ELSE}
if LCharacter.IsLower or LCharacter.IsUpper or LCharacter.IsNumber
or LCharacter.IsInArray(['_']) then
{$ENDIF}
begin
Inc(I);
//Alterado porque windows comeca de 1 e Android de 0(Zero) no
Android se perde item [0]
// Result[I] := LCharacter;
Result := Result + LCharacter;
end;
end;
SetLength(Result, I);
if I = 0 then
Result := '_'
else
begin
//Alterado para pegar item base usando funcao low
//LCharacter := Result[1];
LCharacter := Result[Low(Result)];
{$IF DEFINED(FPC) or (CompilerVersion < 20)}
if CharInSet(LCharacter, ['0' .. '9']) then
{$ELSE}
if LCharacter.IsNumber then
{$ENDIF}
Result := '_' + Result;
end;
end;
Links:
------
[1] https://github.com/igorbastosib
[2]
#115 (comment)
[3]
https://github.com/notifications/unsubscribe-auth/AQQ4L4DLNJ3VUZQMVVA64GLUM7I2RANCNFSM5FDEE3QA
[4]
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
[5]
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub
|
Beta Was this translation helpful? Give feedback.
-
No código abaixo ao rodar no windows os nomes dos campos retornam por completo, já no android todos os campos retornam sem o último caractere, exemplo:
Windows -> Android
CODIGO -> CODIG
DESCRICAO -> DESCRICA
PRECO -> PREC
Será que estou fazendo algo errado? Abaixo segue o código de exemplo:
mtInfos := TFDMemTable.Create(nil);
LResponse := TRequest.New.BaseURL('http://teste-api.ddns.net:9000/veiculos/listar')
.BasicAuthentication( 'teste', '@teste!')
.AddHeader('HeaderName' , 'HeaderValue')
.AddParam('ParameterName', 'ParameterValue')
.Accept('application/json')
.DataSetAdapter( mtInfos )
.Get;
if LResponse.StatusCode <> 200 then
begin
ShowMessage(LResponse.Content);
Exit;
end;
for i := 0 to pred(mtInfos.FieldDefs.Count) do
Memo1.Lines.Add(mtInfos.FieldDefs.Items[i].Name);
Beta Was this translation helpful? Give feedback.
All reactions