NUMERO MÁXIMO DE PARAMETROS EXCEDITO EM FUCTION NO DELPHI

Delphi

29/07/2013

estou desenvolvendo um web service com datasnap para fazer a interação de aplicação desktop com dispositivo movel(adroid).
Encontrei um problema com a quantidade de parametros(argumentos) do metodo que implementei para alimentar um tabela. Eu nem sabia que havia um limite de paramentros. Existe outra maneira de passar esses valores, com arrays por exemplo? Alguém pode me ajudar?

segue o Codigo em questão :

function TServerMethods1.InsertCOMUNICANTE(COMU_COD_PESS: integer; COMU_NOME,
COMU_NASC, COMU_IDADE, COMU_GEN, COMU_GRAU_PAREN, COMU_PERI_CONV,
COMU_TIPO_CONV, COMU_TEL, COMU_CEL, COMU_CONT, COMU_END, COMU_REF,
COMU_GEORREF, COMU_LATITUDE, COMU_LONGITUDE, COMU_CICA_BCG_NUM,
COMU_CICA_BCG_DIAM, COMU_FORMA_CLIN, COMU_CLASS_OPERA, COMU_PRES_LES,
COMU_NUM_LES, COMU_SORO_ELISA, COMU_SORO_DO, COMU_SORO_CUT_OFF,
COMU_SORO_DATA, COMU_SORO_LOCAL, COMU_SORO_TECN_RESP, COMU_DIAGN_MOLE,
COMU_CASO_NOVO_OPC, COMU_CASO_NOVO_NUM, COMU_OBS: String;
out Error: String): Boolean;
var
Comm:TDBXCommand;
begin
Result:=false;
DBcon.Open;
Comm:=DbCon.DBXConnection.CreateCommand;
Comm.CommandType:=TDBXCommandTypes.DbxSQL;
Comm.Text:=Format(''Insert Into COMUNICANTE(COMU_COD_PESS,COMU_NOME,COMU_NASC,COMU_IDADE,COMU_GEN,COMU_GRAU_PAREN,''+
''COMU_PERI_CONV,COMU_TIPO_CONV,COMU_TEL,COMU_CEL,COMU_CONT,COMU_END,COMU_REF,COMU_GEORREF,COMU_LATITUDE,COMU_LONGITUDE,''+
''COMU_CICA_BCG_NUM,COMU_CICA_BCG_DIAM,COMU_FORMA_CLIN,COMU_CLASS_OPERA,COMU_PRES_LES,COMU_NUM_LES,COMU_SORO_ELISA,''+
''COMU_SORO_DO,COMU_SORO_CUT_OFF,COMU_SORO_DATA,COMU_SORO_LOCAL,COMU_SORO_TECN_RESP,COMU_DIAGN_MOLE,COMU_CASO_NOVO_OPC,COMU_CASO_NOVO_NUM,''+
''COMU_OBS)values(''''%d'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s''''''+
'',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''',''''%s'''')'',
[COMU_COD_PESS,COMU_NOME,COMU_NASC,COMU_IDADE,COMU_GEN,COMU_GRAU_PAREN,
COMU_PERI_CONV,COMU_TIPO_CONV,COMU_TEL,COMU_CEL,COMU_CONT,COMU_END,COMU_REF,COMU_GEORREF,COMU_LATITUDE,COMU_LONGITUDE,
COMU_CICA_BCG_NUM,COMU_CICA_BCG_DIAM,COMU_FORMA_CLIN,COMU_CLASS_OPERA,COMU_PRES_LES,COMU_NUM_LES,COMU_SORO_ELISA,
COMU_SORO_DO,COMU_SORO_CUT_OFF,COMU_SORO_DATA,COMU_SORO_LOCAL,COMU_SORO_TECN_RESP,COMU_DIAGN_MOLE,COMU_CASO_NOVO_OPC,COMU_CASO_NOVO_NUM,
COMU_OBS]);
if not Comm.IsPrepared then
Comm.Prepare;
try
Comm.ExecuteUpdate;
Comm.Free;
Result:=true;
except on E:Exception do
Error:=E.Message;
end;
end;
Marcus Ferreira

Marcus Ferreira

Curtidas 0

Respostas

Rodolpho Silva

Rodolpho Silva

29/07/2013

Bem,

32 parâmetros, você não acha que está um pouco grande? Já pensou em trabalhar com XML onde você teria apenas 1 parâmetro?
GOSTEI 0
Marcus Ferreira

Marcus Ferreira

29/07/2013

olá amigo, obrigado por responder. Você poderia me dar um exemplo como eu faria em XML?
GOSTEI 0
Rodolpho Silva

Rodolpho Silva

29/07/2013

Bem, criei apenas uma estrutura básica dos seus dados:
<dados>
  <linha>
	<COMU_COD_PESS>1</COMU_COD_PESS>
	<COMU_NOME>João</COMU_NOME>
	<COMU_NASC>30/07/2013</COMU_NASC>
	<COMU_IDADE>40</COMU_IDADE>
  </linha>
  <linha>
	<COMU_COD_PESS>2</COMU_COD_PESS>
	<COMU_NOME>José</COMU_NOME>
	<COMU_NASC>30/07/2013</COMU_NASC>
	<COMU_IDADE>30</COMU_IDADE>
  </linha>
</dados>


E na sua função você teria apenas um parâmetro:
function TServerMethods1.InsertCOMUNICANTE(sXML: String);
begin
  .... Do something
end;


Onde "sXML" é a string com a sua estrutura de XML. Para ler o XML, o Delphi disponibiliza um componente muito bom, o XMLDocument. Veja exemplo de uso aqui: [url]http://www.caiooliveira.com.br/?p=132[/url] [url]http://docwiki.embarcadero.com/CodeSamples/en/TXMLDocument_use_case_(Delphi)[/url] [url]https://www.devmedia.com.br/importando-xml-com-o-xmldocument-delphi/24288[/url]

Espero ter ajudado.
GOSTEI 0
Marcus Ferreira

Marcus Ferreira

29/07/2013

Opa Rodolpho Ajudou muito sim... Obrigado!
GOSTEI 0
Francisco Macário

Francisco Macário

29/07/2013

Olá Marcus.

Só pra ficar claro, o seu problema ocorreu na declaração da function ou na execução do Comando (Dataset).

isso não ficou, claro mas acredito que tenha ocorrido no segundo caso. Nos informe o erro para ficar de exemplo.

Grato.
GOSTEI 0
Marcus Ferreira

Marcus Ferreira

29/07/2013

Bom dia Macário, na verdade não aparece erro na compilação.... o erro ocorre quando executo a função já browser na pagina do Server Functions do DataSnap REST... A mensagem diz que "estou usando mais de 32 paramentros".
GOSTEI 0
POSTAR