NUMERO MÁXIMO DE PARAMETROS EXCEDITO EM FUCTION NO DELPHI
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;
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
Curtidas 0
Respostas
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?
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
29/07/2013
olá amigo, obrigado por responder. Você poderia me dar um exemplo como eu faria em XML?
GOSTEI 0
Rodolpho Silva
29/07/2013
Bem, criei apenas uma estrutura básica dos seus dados:
E na sua função você teria apenas um parâmetro:
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.
<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
29/07/2013
Opa Rodolpho Ajudou muito sim... Obrigado!
GOSTEI 0
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.
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
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