Ir para conteúdo
Fórum Script Brasil

Jhonas

Monitores
  • Total de itens

    9.657
  • Registro em

Tudo que Jhonas postou

  1. Usando o seu exemplo ficaria assim; VAR condicao, varSinal, S : STRING; begin condicao := 'ativo'; If condicao = 'ativo' then varSinal := '+' else varSinal := '-'; S := 'SELECT A ' + varSinal +' B AS RESULTADO FROM TABELA'; Query1.Active := false; Query1.SQL.Clear; Query1.SQL.Append(S); Query1.Active := true; showmessage(s); showmessage(FLOATTOSTR(Query1RESULTADO.Value)); end; Obs: o mesmo código se aplica ao ZQuery abraço
  2. Se quiser um conselho, sugiro que voce crie um email no BOL ou ZIPMAIL onde o numero de caracteres do seu Email seja maior que 15 e a senha contenha 9 ou mais caracteres (entre maiusculas, minusculas, numeros e caracteres especiais ) dessa maneira voce não vai ter o incomodo de ficar recebendo Spans e os programas hackers atuais não conseguem quebrar a senha . OBS: Voce não ouviu falar do Golpe dos Boletos ? Pelo numero do código de barras, voce pode ficar sabendo qual é o banco, o valor e na conta de quem está indo esse valor. Será que fui alvo de um golpe de dentro da empresa? Se quiser ter certeza, peça para gerar um boleto na propria empresa e depois compare com o que voce esta recebendo por email. abraço
  3. O único lugar que aparece os valores normais (que foram declarados originalmente como VARCHAR , FLOAT etc.. ) é na barra de STATUS inferior de apresentação do resultado do SQL. ESTRANHO ?!?! A tabela tbResult quando é criada tem os nomes dos campos e tipos relacionados dessa maneira id int(11) num_nc int(11) data date val1 double(11,2) val2 double(11,2) val3 double(11,2) nome_item varchar(50) qde int(5) preco_un double(11,2) idNC int(5) tot_item double(19,2) tot_custos double(19,2) tot_coluna_item double(19,2) custo_item double(19,2) val_med_fin double(19,2) voce não precisa mudar nada... então veja o que voce está fazendo de errado Dica: para que não ocorra erros, carregue os campos dessa tabela ou na Zquery ou num ClientDataSet No Select da Query voce coloca: Select * from tbresult ... não tem erro abraço
  4. experimente: minOccurs="0" maxOccurs="unbounded" Isso é especificado configurando o atributo maxOccurs do elemento "item" como "ilimitado", o que significa que pode haver tantas ocorrências do elemento "item" quanto o autor desejar. ou pode limitar o numero de ocorrencias exemplo: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="persons"> <xs:complexType> <xs:sequence> <xs:element name="person" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="full_name" type="xs:string"/> <xs:element name="child_name" type="xs:string" minOccurs="0" maxOccurs="5"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
  5. A construção do webservice que não está correta. o webservice é seu ou de terceiros ... se é seu basta alterar o código para funcionar como voce precisa, mas se não foi voce que o construiu, então não dá para fazer nada. Tem idéia de como criar um webservice ? https://www.google.com.br/search?source=hp&ei=nIKnXpa4EcXI5OUP5o6a0Ao&q=criar+webservice+delphi&o que=criar+webservice&gs_lcp=CgZwc3ktYWIQARgEMgIIADICCAAyAggAMgIIADICCAAyAggAMgIIADICCAAyAggAMgQIABAKOgUIABCDAVD0CViOJGCsOGgAcAB4AYABlASIAcojkgEMMC4xMC4wLjEuMy4zmAEAoAEBqgEHZ3dzLXdperABAA&sclient=psy-ab , onde um nodo possua limite? o limite é voce quem define no código .... pode me mostrar como é que voce cria o xml para envio ? voce tem um ambiente ( endereço ) para testes ?
  6. ok... me mostre como voce esta enviando os dados para o webservice
  7. Utilize o código que eu te passei e veja se ocorre o mesmo problema que voce relatou
  8. tenho que interfacear esta TBRESULT criando uma novo DataSet (Zquery) que apesar de tabela ser temporaria a ZQuery vai entender? Na verdade a tabela é temporaria até que voce execute novamente DROP TABLE IF EXISTS tbresult; CREATE TABLE tbresult Trate a tabela como se fosse outra tabela do seu banco de dados. voce pode fazer com ela tudo o que precisar. use normalmente os componentes de acesso à tabelas, não vai ter problema nenhum abraço
  9. Esse código foi gerado usando o MYSQL_Front e esse código pode ser colocado dentro de um componente ZQuery ( Zeos ) com acesso a tabela gerada no MYSQL ----------------------------------------------------------------- ok ...no seu caso, se voce conseguiu fazer essa parte... DROP TABLE IF EXISTS tbresult; CREATE TABLE tbresult SELECT A.id, num_nc, data, val1, val2, val3, nome_item, qde, preco_un, idNC, (qde * preco_un) AS tot_item, B.val1 + B.val2 + B.val3 AS tot_custos FROM tboperacao AS A JOIN tbnota AS B ON (B.id = A.idNC); ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; ALTER TABLE tbresult ADD val_med_fin double(19,2) DEFAULT NULL; ... não precisa necessariamente fazer a outra via SQL voce pode construir uma procedure no Lazarus e fazer a mesma coisa usando os comandos do Lazarus/Delphi Exemplo: procedure Calcular_Valores(Sender: TObject); Var i, reg, cc, counter : integer; begin TbResult_IB.Active := false; CDS_TbResult.Active := false; TbResult_IB.Active := true; CDS_TbResult.Active := true; CDS_TbResult.Refresh; For i := 1 to CDS_TbResult.RecordCount do begin /// outros comandos end; end; abraço
  10. O código que eu quero que voce compare é esse // ************************************************************************ // // The types declared in this file were generated from data read from the // WSDL File described below: // WSDL : http://35.247.246.18/wslh/ScriptBrasil.dll/wsdl/IiTeste // Version : 1.0 // (25/4/2020 11:16:39 - 1.33.2.5) // ************************************************************************ // unit IiTeste1; interface uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns; type // ************************************************************************ // // The following types, referred to in the WSDL document are not being represented // in this file. They are either aliases[@] of other types represented or were referred // to but never[!] declared in the document. The types from the latter category // typically map to predefined/known XML or Borland types; however, they could also // indicate incorrect WSDL documents that failed to declare or import a schema type. // ************************************************************************ // // !:string - "http://www.w3.org/2001/XMLSchema" // !:date - "http://www.w3.org/2001/XMLSchema" // !:boolean - "http://www.w3.org/2001/XMLSchema" TItem = class; { "urn:iTesteIntf" } TPedido = class; { "urn:iTesteIntf" } tnew = class; { "urn:iTesteIntf" } TFinal = class; { "urn:iTesteIntf" } // ************************************************************************ // // Namespace : urn:iTesteIntf // ************************************************************************ // TItem = class(TRemotable) private Fnome: WideString; Ffilial: WideString; published property nome: WideString read Fnome write Fnome; property filial: WideString read Ffilial write Ffilial; end; // ************************************************************************ // // Namespace : urn:iTesteIntf // ************************************************************************ // TPedido = class(TRemotable) private Fcodigo: WideString; FData: TXSDate; Fitem: TItem; public destructor Destroy; override; published property codigo: WideString read Fcodigo write Fcodigo; property Data: TXSDate read FData write FData; property item: TItem read Fitem write Fitem; end; // ************************************************************************ // // Namespace : urn:iTesteIntf // ************************************************************************ // tnew = class(TItem) private published end; Item_array = array of tnew; { "urn:iTesteIntf" } // ************************************************************************ // // Namespace : urn:iTesteIntf // ************************************************************************ // TFinal = class(TPedido) private Fx: Item_array; public destructor Destroy; override; published property x: Item_array read Fx write Fx; end; // ************************************************************************ // // Namespace : urn:iTesteIntf-IiTeste // soapAction: urn:iTesteIntf-IiTeste#efetuarPedido // transport : http://schemas.xmlsoap.org/soap/http // style : rpc // binding : IiTestebinding // service : IiTesteservice // port : IiTestePort // URL : http://35.247.246.18/wslh/ScriptBrasil.dll/soap/IiTeste // ************************************************************************ // IiTeste = interface(IInvokable) ['{4AAAB37A-05B4-EC30-B6BA-0CB935687988}'] function efetuarPedido(const pedido: TFinal): Boolean; stdcall; end; function GetIiTeste(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IiTeste; implementation function GetIiTeste(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IiTeste; const defWSDL = 'http://35.247.246.18/wslh/ScriptBrasil.dll/wsdl/IiTeste'; defURL = 'http://35.247.246.18/wslh/ScriptBrasil.dll/soap/IiTeste'; defSvc = 'IiTesteservice'; defPrt = 'IiTestePort'; var RIO: THTTPRIO; begin Result := nil; if (Addr = '') then begin if UseWSDL then Addr := defWSDL else Addr := defURL; end; if HTTPRIO = nil then RIO := THTTPRIO.Create(nil) else RIO := HTTPRIO; try Result := (RIO as IiTeste); if UseWSDL then begin RIO.WSDLLocation := Addr; RIO.Service := defSvc; RIO.Port := defPrt; end else RIO.URL := Addr; finally if (Result = nil) and (HTTPRIO = nil) then RIO.Free; end; end; destructor TPedido.Destroy; begin if Assigned(FData) then FData.Free; if Assigned(Fitem) then Fitem.Free; inherited Destroy; end; destructor TFinal.Destroy; var I: Integer; begin for I := 0 to Length(Fx)-1 do if Assigned(Fx[I]) then Fx[I].Free; SetLength(Fx, 0); inherited Destroy; end; initialization InvRegistry.RegisterInterface(TypeInfo(IiTeste), 'urn:iTesteIntf-IiTeste', ''); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IiTeste), 'urn:iTesteIntf-IiTeste#efetuarPedido'); RemClassRegistry.RegisterXSClass(TItem, 'urn:iTesteIntf', 'TItem'); RemClassRegistry.RegisterXSClass(TPedido, 'urn:iTesteIntf', 'TPedido'); RemClassRegistry.RegisterXSClass(tnew, 'urn:iTesteIntf', 'tnew'); RemClassRegistry.RegisterXSInfo(TypeInfo(Item_array), 'urn:iTesteIntf', 'Item_array'); RemClassRegistry.RegisterXSClass(TFinal, 'urn:iTesteIntf', 'TFinal'); end. Veja se tem alguma diferença com o código gerado na versão Delphi 10.3
  11. o wsdl montado pelo delphi não tem nada a ver com a realidade. Quero que voce me passe o endereço da URL para importar o WSDL em outra versão do delphi e comparar o código quero ver se é bug de versão
  12. Tente usar outra versão do delphi para gerar o WSDL e veja se são iguais me passe o endereço da URL para que eu faça um teste aqui
  13. Veja se isso te ajuda https://www.soapui.org/soapui-projects/soapui-projects.html https://www.soapui.org/soap-and-wsdl/working-with-wsdls.html abraço
  14. Acho que voce por não ter experiencia, ficaria dificil para voce montar a procedure para calcular os demais campos então segue o código completo DROP TABLE IF EXISTS tbresult; CREATE TABLE tbresult SELECT A.id, num_nc, data, val1, val2, val3, nome_item, qde, preco_un, idNC, (qde * preco_un) AS tot_item, B.val1 + B.val2 + B.val3 AS tot_custos FROM tboperacao AS A JOIN tbnota AS B ON (B.id = A.idNC); ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; ALTER TABLE tbresult ADD val_med_fin double(19,2) DEFAULT NULL; DROP PROCEDURE IF EXISTS P; CREATE PROCEDURE p(increment INT) BEGIN DECLARE reg INT DEFAULT 0; DECLARE cc INT DEFAULT 1; DECLARE counter INT DEFAULT 1; SET @nreg = (SELECT MAX(ID) AS nreg FROM tbresult); SET reg = @nreg ; WHILE counter < reg DO -- ... do work ... SET @TOT := (SELECT SUM(QDE*PRECO_UN) FROM tbresult WHERE idnc = cc); SET @CUSTO := (SELECT (((val1 + val2 + val3) / ((SUM(qde * preco_un ))) * 100 * ((qde * preco_un) / 100))) FROM tbresult WHERE idnc = cc); UPDATE tbresult SET tot_coluna_item = @TOT, custo_item = @CUSTO WHERE idNC = cc; SET @VALMED = (SELECT SUM(QDE*PRECO_UN) + custo_item FROM tbresult WHERE idnc = cc); UPDATE tbresult SET val_med_fin = @VALMED WHERE idNC = cc; SET counter = counter + increment; SET cc = cc + 1; END WHILE; END; CALL P(1); resultado "id" "num_nc" "data" "val1" "val2" "val3" "nome_item" "qde" "preco_un" "idNC" "tot_item" "tot_custos" "tot_coluna_item" "custo_item" "val_med_fin" 1 961 2020-04-01 0.09 0.57 0.00 "ITEM-X1" 1 525.30 2 525.30 0.66 3123.35 0.11 3123.46 2 961 2020-04-01 0.09 0.57 0.00 " ITEM-B2 " 15 103.87 2 1558.05 0.66 3123.35 0.11 3123.46 3 961 2020-04-01 0.09 0.57 0.00 " ITEM-B2 " 10 104.00 2 1040.00 0.66 3123.35 0.11 3123.46 4 1 2020-05-17 10.00 1.00 3.00 "ITEM-C3" 41 452.00 1 18532.00 14.00 20014.00 12.96 20026.96 5 1 2020-05-17 10.00 1.00 3.00 "ITEM-C3B" 15 98.80 1 1482.00 14.00 20014.00 12.96 20026.96 agora o resto é com voce abraço
  15. Uma outra duvida que veremos mais a frente (criar outra tabela com este resultado gerado). DROP TABLE IF EXISTS tbresult; CREATE TABLE tbresult SELECT A.id, num_nc, data, val1, val2, val3, nome_item, qde, preco_un, idNC, (qde * preco_un) AS tot_item, B.val1 + B.val2 + B.val3 AS tot_custos FROM tboperacao AS A JOIN tbnota AS B ON (B.id = A.idNC); ALTER TABLE tbresult ADD tot_coluna_item double(19,2) DEFAULT NULL; ALTER TABLE tbresult ADD custo_item double(19,2) DEFAULT NULL; RESULTADO: ( TBRESULT ) "id" "num_nc" "data" "val1" "val2" "val3" "nome_item" "qde" "preco_un" "idNC" "tot_item" "tot_custos" "tot_coluna_item" "custo_item" 1 961 2020-04-01 0.09 0.57 0.00 "ITEM-X1 " 1 525.30 2 525.30 0.66 2 961 2020-04-01 0.09 0.57 0.00 "ITEM-B2 " 15 103.87 2 1558.05 0.66 3 961 2020-04-01 0.09 0.57 0.00 "ITEM-B2 " 10 104.00 2 1040.00 0.66 4 1 2020-05-17 10.00 1.00 3.00 "ITEM-C3 " 41 452.00 1 18532.00 14.00 5 1 2020-05-17 10.00 1.00 3.00 "ITEM-C3B" 15 98.80 1 1482.00 14.00 Obs: Isso vai criar uma tabela no seu banco de dados com todos os campos que voce precisa e com os resultados parciais. os ultimos 2 campos, basta voce criar uma procedure para calcular e pronto. Voce só não resolve agora se não quiser ( está mamão com açucar ..rs )
  16. Cheguei aos valores que voce mencionou "Id","num_nc","data","val1","val2","val3","Id","nome_item","qde","preco_un","idNC","tot_coluna_item","tot_item","tot_custos","CUSTO_ITEM" 2,961,2020-04-01,0.09,0.57,0.00,1,"ITEM-X1",1,525.30,2,3123.35,525.30,0.66,0.111002 Me lembrei que quando voce usa a função SUM dentro de um JOIN , ele agrega os registros, mostrando apenas um registro na saida. Para que mostre os demais registros, vai ter que ser diferente SELECT * , (qde * preco_un) AS tot_item, B.val1 + B.val2 + B.val3 AS tot_custos FROM tboperacao AS A JOIN tbnota AS B ON (B.id = A.idNC) Resultado "Id","nome_item","qde","preco_un","idNC","Id","num_nc","data","val1","val2","val3","tot_item","tot_custos" 1,"ITEM-X1 ", 1,525.30,2,2,961,2020-04-01, 0.09,0.57,0.00, 525.30, 0.66 2,"ITEM-B2 ",15,103.87,2,2,961,2020-04-01, 0.09,0.57,0.00, 1558.05, 0.66 3,"ITEM-B2 ",10,104.00,2,2,961,2020-04-01, 0.09,0.57,0.00, 1040.00, 0.66 4,"ITEM-C3 ",41,452.00,1,1, 1,2020-05-17,10.00,1.00,3.00,18532.00,14.00 5,"ITEM-C3B",15, 98.80,1,1, 1,2020-05-17,10.00,1.00,3.00, 1482.00,14.00 A partir dai, voce monta um código para calcular o tot_coluna_item e o custo_item ou usa campo calculado no dbgrid
  17. ok... facilitou SELECT A.id, idNC, B.data AS data_FK, B.num_nc AS nota_FK, nome_item, qde, preco_un, (qde * preco_un) AS tot_item, B.val1 + B.val2 + B.val3 AS tot_custos, SUM(qde * preco_un ) AS tot_coluna_item, (((B.val1 + B.val2 + B.val3)/IFNULL((SUM(qde * preco_un )),0) * 100 * ((qde * preco_un) / 100))) AS CUSTO_ITEM FROM tboperacao AS A LEFT OUTER JOIN tbnota AS B ON (B.id = A.idNC) GROUP BY id o Resultado foi esse "id","idNC","data_FK","nota_FK","nome_item","qde","preco_un","tot_item","tot_custos","tot_coluna_item","CUSTO_ITEM" 1,2,2020-04-01,2,"ITEM-X1",1,525.30,525.30,,525.30, 2,2,2020-04-01,2," ITEM-B2 ",15,103.87,1558.05,,1558.05, 3,2,2020-04-01,2," ITEM-B2 ",10,104.00,1040.00,,1040.00, 4,1,2020-05-17,1,"ITEM-C3",41,452.00,18532.00,14.00,18532.00,14.000000 5,1,2020-05-17,1,"ITEM-C3B",15,98.80,1482.00,14.00,1482.00,14.000000 Obs: Era isso que voce queria ? Veja que coloquei no GROUP BY id se voce colocar idNC só vão aparecer 2 registros : ITEM-C3 ( 1 ) ITEM-X1 ( 2 ) os demais registros não aparecem porque estão dentro do grupo e tem o mesmo valor de idNC.
  18. Verifique as agulhas do cabeçote ( pode ser desgaste ) ou o circuito eletrico que faz o controle das agulhas. abraço
  19. ok... agora quero que voce me passe suas tabelas com todos os campos e com alguns registros, da maneira como voce passou TBNOTA (master) id num_nc data val1 val2 val3 1 0001 2020-05-17 10.0 1.0 3.0 2 9619 2020-04-01 0.09 0.57 0.0 3 0003 2020-03-15 7.36 1.13 0.0 AUTO TBOPERACAO (detalhes) id nome_item_ qde preco_un idNC 1 ITEM-X1 1.0 525.3 2 2 ITEM-B2 15.0 103.87 2 3 ITEM-B2 10.0 104.0 2 4 ITEM-C3 41.0 452.0 1 5 ITEM-C3B 15.0 98.8 1 Auto Coloque com valores para que eu possa montar essas tabelas aqui e testar
  20. ok... vamos ver se chegamos a uma solução quantos campos voce tem na tabela Master e na tabela Detalhes ? a relação entre as 2 tabelas é pelo campo id ? os calculos são efetuados depois da seleção dos registros ? quantos campos da tabela são resultado de calculos ( ou seja vão receber um valor de calculo ) ? qual a quantidade aproximada de registros, depois do select ?
  21. exemplo de interpolação linear no mysql 10.2.5. Classe LineString Uma LineString é uma Curve com interpolação linear entre pontos. Se puderem me dar um vislumbre, sou grato. Te passei o link do Manual de Referencia do MYSQL para fazer isso ------------------------------------------------------------------------------------ Se quiser exemplos: https://www.google.com.br/search?ei=sAyaXqfjBeXF5OUPk7GygAw&q=linestring+mysql+exemplos&o que=linestring+mysql+exemplos&gs_lcp=CgZwc3ktYWIQAzoECAAQRzoGCAAQFhAeOgUIABDNAjoFCCEQoAE6BAghEBU6BwghEAoQoAFQkAtY_i1g3jRoAHACeAGAAdgCiAG-EJIBBzAuMy40LjKYAQCgAQGqAQdnd3Mtd2l6&sclient=psy-ab&ved=0ahUKEwin--fgofDoAhXlIrkGHZOYDMAQ4dUDCAs&uact=5 abraço
  22. Voce não acha que seria muito mais simples, selecionar os registros que voce quer das tabelas, jogar em um dbgrid e depois proceder aos calculos dos registros ? A vantagem disso é que a performance fica mais rapida. Se voce acha que fazer os calculos ficaria lento, então voce pode optar em usar ( Threads - para efetuar os calculos em segundo plano ) ... o usuario nem vai perceber. Quando eu monto tudo isso no programa eu consigo ver os outros detalhes se eu selecionar manualmente um ítem da tabela master, então aparece todos os detalhes da nota escolhida e todos os cálculos corretos Se voce quer ver todos os campos de um registro, os mesmos deverão aparecer na Select. Sugestão: use o sqlite expert ( Gerenciador de Banco de Dados) ... com ele voce pode construir Selects utilizando as suas tabelas e testá-las em tempo real. Uma vez criada e testada a Select, voce pode usá-la no seu programa. http://www.sqliteexpert.com/download.html ou o SQLite Studio https://sqlitestudio.pl/index.rvt abraço
  23. Va em Menu < Tools > na opção < Environment Options na Paleta < Library > Acrescente o caminho das suas BPls, ou coloque as suas BPLs no diretório padrão do Delphi abraço
  24. Jhonas

    Procedure com erro

    então onde fica o erro? O erro está justamente no momento de como passar o valor da data para o parametro dentro da select. DATEDIFF(dtf,dti) as qtd_dias DATEDIFF('2020-03-09','2020-01-01') as qtd_dias Abraço
  25. Veja no link http://download.nust.na/pub6/mysql/doc/refman/4.1/pt/opengis-geometry-model.html abraço
×
×
  • Criar Novo...