Ir para conteúdo
Fórum Script Brasil

cobbra

Membros
  • Total de itens

    18
  • Registro em

  • Última visita

Tudo que cobbra postou

  1. Basicamente, para que as vezes ficar neste dúvida é criar um webservice. Bibliotecas para isso, normalmente são SOAP ou NuSOAP, ou ainda WDSL. Estou pesquisando mais sobre isso. O fórum tem, porém pouco ajuda na hora de questões de segurança. Obrigado.
  2. Olá amigos, eu ainda estou enfrentando algumas dores de cabeça com códigos malucos. Tenho um sistema que precisa receber dados via CURL por exemplo, de qualquer usuário registrado, e ele precisa retornar um resultado para o usuário. Ao mesmo tempo, precisa gravar o log a respeito do usuário no Mysql e outras funções a respeito do usuário e o uso disso, capturar os valores postados, e devolver um código, após efetuar uma rotina, que para o usuário representa sucesso, erro etc.. Gravar, as funções e cria-las ok... Mas gerou uma dúvida de segurança. Pensei em colocar este arquivo de recebimento (um form com hidem) em uma pasta, e os módulos com as inserções no banco, registro de log, detalhes de login e tudo mais em outra pasta para separar o recebimento das execuções.... Mas como passar isso sem que o usuário veja, e como receber o resultado na volta? O usuário vai enviar os dados da seguinte maneira: www.domínio.com.br?userid=nome&outravariavel&outravariavel etc... Será uma espécie de API... ou melhor é uma API Pensei em usar um .htacces restringindo o acesso a pasta com os módulos e a listagem de diretórios, ou alterar as permissões. O que me dizem, como efetuar isso com segurança e ainda retornar isso num array para o usuário? Sei lá, se vcê tiver uma idéia melhor comente. Se fosse um login e SESSION seria algo mais simples.. mas aqui vou lidar com login, recebimento de dados, gravação no banco e somente um retorno, por exemplo "20" que significaria erro de usuário... Confuso não? Funciona algo como PAGSEGURO, seria melhor criar um outro arquivo de retorno? Acho isso bastante inconveniente.... Pra te falar a verdade, pensei que neste caso, a segurança tem que vir em primeiro lugar, então foquei na tentativa de uma solução para isso, e para o usuário algo bem KISS (Keep it stupid simple) - Manter isso estupidamente simples. Obrigado - Qualquer idéia é bem vinda - referente ao problema é claro... rs.
  3. Opa JoW Killer O Sistema é o WHMCS, gerenciador administrativo financeiro do WHM para servidores web. Ele ativa isso através de um Hook, e ele limita mesmo o trabalho. Quando uma função, por exemplo um ticket é ativado, ele aciona a função que você criou a este hook em um arquivo qualquer. Bem, enfim, vou testar sua função, mas vou tentar jogar isso para um arquivo html, quem sabe assim ele libera. Ele é encardido para acionar, o suporte é ...., mas é o sistena numero um pra isso... dureza. Achei uma parte do acionamento, mas ainda sem sucesso para a leitura destes dados. Fico grato pela ajuda... já havia tentado com o fereach, pensei até que eu estava enferrujando em PHP.. heheheh Print_r... e ai vai... me parece que a forma que ele melhor aceita é via log... preciso jogar isso em algum log dai é provável que possa ser lido, e ai programar usando o conteúdo do array relativo a função. A cada chamada executada pelo sistema, ele lança um array, $vars com dados como userid, ticketid.. e ai vai... Bem, vou testar... já virei noites aqui, e tentando capturar, deixei isso de lado, e estou gastando tempo com o que já consegui de informações de variáveis vendo outros posts sobre o assunto por ai. Fico agradecido, e aviso o resultado....
  4. Amigo, realmente funciona, e você está certo, assim como o colega acima. Porém é o sistema mesmo que limita a exibição do resultado. Então mesmo com foreach e o print_r direto para exibir todo o conteúdo do array eu não consegui, devido ao sistema. As funções funcionam em outros casos, porém neste vou ter que criar um log ou outra coisa do tipo que ele permita ver a saída. Valeu pela ajuda, tópico fechado.
  5. Olá Colega... sim.. entendi o princípio... desculpe a demora na resposta.. Estou agora tentando entender como montar isso.. . hehehe Pois tem "n" resultados para este array... Estou pesquisando aqui e testando como buscar isso. Primeiro preciso mostrar cada um dos "campos" (itens) disponíveis para serem recuperados, e depois buscar a variável de cada um... Praticamente uma árvore de valores... Exemplo: Valor 1 - Valo11 - n resultados valor12 - x resultados valor2 - N.. e ai vai com seus n subitens... E gerar algum arquivo ou guardar isso no banco de dados para referência... Tem alguma idéia?
  6. Olá amigos, estou com um problema estranho em uma integração. O sistema de que recebo os dados, é fechado, então ele libera as variáveis através de um array por post provavelmente. O problema está que, ao tentar resgatar os valores através do array, ele me retorna vazio ou ainda somente uma parte do array, por ter arrays em arrays. Tentei usando o comando print_r($variavel) porém o sistema não permite a impressão (na tela) dos dados... Testei também usando uma variável para coletar os dados.. porém nada feito. Tentei enviar par ao banco de dados, mas o array não é passado... Na verdade, dentro de este array passado, estão as variáveis necessárias para meu uso, por exemplo $variavel['userid']porém Não consegui coletar os dados. Alguém já passou por isso? Tem algum exemplo para resgatar estes dados.. nem que seja para gerar uma string única.
  7. Pesquisei no fórum, achei algumas dicas, porém foge um pouco da idéia aqui. Vi nestes posts http://scriptbrasil.com.br/forum/index.php?showtopic=126349 Porém, gostaria de saber se alguém tem algum exemplo bem prático, em Delphi 7 com PHP 5 por exemplo Conheço e já verifiquei, sobre o NuSOAP, que é mais simples de interagir, mas não tenho a mínima idéia de onde começar. - Como buscar os dados usando o Delphi e um Script em PHP (WSDL) por exemplo? - Como enviar dados, ler dados, gravar dados no Servidor com PHP usando NuSOAP? - Alguém tem algum exemplo para testes? Preciso interagir uma aplicação assim. Eu já uso um componente para acesso direto ao MySQL no servidor, diferente do ZeoLIB, que funciona perfeito. Mas neste caso, em especial, não posso acessar o Mysql, preciso acessar via SCRIPT php e delphi diretamente. Alguma ajuda? Se você tiver um exemplo editável, seria muito bem vindo...
  8. A dica funciona. E se for usado XML somente, funciona perfeitamente. Uso um componente pago para acesso ao Mysql que gera o XML em outro formato, e o princício é o mesmo. Obrigado Jhonas, tópico resolvido.
  9. Jhonas, a dica é excelente. Mas conferi a forma como é gerada meu xml, e vi a incompatibilidade. Este é o formato para importação do Excel. Na verdade o componente cita como sendo " XML format compatible with ADO format ". Vou ter que refazer aqui, para acessar os dados e jogar isso em um formato compreensível com XML do ClientDataSet. Uma boa dica é quando salvar: ClientDataSet.SaveToFile(ExtractFilePath(Application.ExeName) + 'Arquivo.xml', dfXMLUTF8); Bem, vou tentar fazer a exportação por outro meio. Já dou um retorno... mas se souber de um componente que leia neste formato de xml... de um toque, isso facilitaria até mesmo o uso. Até... e vamos aos testes...
  10. Voce está usando palavras acentuadas ??? Sim e no outro componente do banco de dados ele aceita isso e joga isso em xml numa boa.. porém o ClientDataSet não aceita.. Vi algumas coisas sobre isso, e vi que ele tem a opção de utf-8, mas ele não abre o xml que tenho aqui. Talvez seja mais fácil fazer uma rotina de exportar o banco de dados em xml num padrão mais compatível com o ClientDataSet, ou achar um componente mais atual para isso. O que você recomenda? Desculpe a demora para testar a dica acima, estava em plena mudança, ai não foi possível testar. Obrigado Jhonas, a idéia é boa, mas ainda estou travando na ida e vinda dos dados do banco de dados e na conversão disso em xml. Valeu pela ajuda até aqui.
  11. Jhonas, funciona bem a idéia. Mas agora pintou outro problema. Como resolver o problema de econding em utf-8? Tem alguma idéia de como fazer isso?
  12. Amigo, está lá a dica, e um script bem completinho. Até.. e bem uso a todos. Ainda não testei a dica aqui. Vou gastar tempo com ela. http://scriptbrasil.com.br/forum/index.php?showtopic=139970
  13. Olá, gostaria de deixar uma informação preciosa aqui, para quem precisa criar aplicações em Delphi que usem Google Maps. Os usos são diversos. De software para barcos até controle de localização de objetos. Antes de sair copiando e colando, gostaria somente que você respeitasse os créditos, tanto de onde você achou essa informação, quanto também de quem você puxou isso. Se de acordo, aproveite o conteúdo abaixo. Abaixo, está o conteúdo do HTML com os JavaScripts para que sejam acionados posteriormente no Delphi. Está tudo muito mastigado, e todos os comandos comentados. Sendo assim, no exemplo em Delphi, vou somente explicar como chamar a função JavaScript. Recomendo Primeiro, que você gere um Key no Google Maps, só assim ele vai funcionar corretamente. Salve o código abaixo, como um arquivo chamado Mapa.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <!-- Adicione sua Google API Key onde está ALTERESEUKEY--> <!-- Fiz a alteração da versão do Google Maps de V=2 para V=2.151 para acionamento do DOM no Tabbed Max --> &lt;script src="http://maps.google.com/maps?file=api&v=2.151&key=ALTERESUAKEY" type="text/javascript"></script> <!-- // Direitos Autorais: Adriano H. Hedler - adriano(at)hhedler.com // // Todas as informações contidas neste script, // caso sejam aproveitadas ou usadas, devem citar a fonte, e incluir este cabeçalho. // GPL - Free License - Uso não comercial // Data de Programação: Julho - 2009 // Dados de Script: // Script em Java Script para Interação com programação Delphi e Mysql e/ou XML conforme necessidade. - Revisão 1.8 // Ferramentas Auxiliares: Google Maps / Google Earth 3D // Obs. *Este script só é ativo em seus recursos se conectado na internet. // O Script é Comentado, caso deseja alterar ou adaptá-lo. // Alterações: Versão do Google Maps no Key foi alterada para Acesso a Recursos DOM do JavaScript, sendo assim a versão utilizada é: V=2.151 // --> <style type="text/css"> <!-- <!-- // Formatação do Texto e Conteúdo geral das DIVs --> html, body { width: 100%; height: 100%; margin : 0px; overflow-y: hidden; overflow-x: hidden; } #map { width: 100%; height: 100%; } .texto_simples { font-family:Arial, Helvetica, sans-serif; font:"Arial"; font-weight: bold; font-size:11px; } <!-- // Formatação da Janela mostrada quando o Zoom é Selecionado dentro do Google Maps - Recurso DragZoom --> #zoominout { font-family:Arial, Helvetica, sans-serif; font:"Arial"; padding:10px; font-size:10px; border:solid 1px; border-color:#000000; } --> </style> </head> <!-- // Formatação Necessária para tomar toda a tela do navegador --> <body LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0> <!-- DIV map que contém o mapa que será criado e seus atributos --> <div id="map" style="height: 100%; width: 100%;"></div> <!-- Scripts para recursos da Criação de Popup´s Dinâmicos e função de DragZoom, recurso auxiliar --> <!-- &lt;script src="tabbedmaxcontent_packed.js" type="text/javascript"></script> --> &lt;script src="tabbedmaxcontent.js" type="text/javascript"></script> &lt;script src="dragzoom.js" type="text/javascript"></script> &lt;script src="MStatusControl.js" type="text/javascript"></script> &lt;script type="text/javascript"> // Início de Script // Criação do MAPA e Centralização com Zoom específico. Aqui centralizado no Brasil. var map = new GMap2(document.getElementById("map"), {draggableCursor: 'crosshair', draggingCursor: 'all-scroll'}); map.setCenter(new GLatLng(-15.792254,-56.250000), 4); // Ativa movimento pelo Rollow do Mouse - Recurso Ativado, mas pode ser desativado dentro do Programa. map.enableScrollWheelZoom(); // Adiciona o Mapa de Terreno Físico e cria a hierarquia de controle. map.addMapType(G_PHYSICAL_MAP); var ctrl2 = new GHierarchicalMapTypeControl(); // Marker Manager var mm = new GMarkerManager(map); // Google Earth: desabilitado por falta de API para Desktop - Habilite caso queira ver o mapa em 3D. Basta retirar a // // map.addMapType(G_SATELLITE_3D_MAP); // Este recurso não permite a captura de tela e outras funções. Somente Criação de Ponto. // Marca como default o modelo Hybrido de Mapa ctrl2.addRelationship(G_SATELLITE_MAP, G_HYBRID_MAP, null, true); // Adiciona o controle extendido do mapa através da variável. ctrl1 = new GLargeMapControl(); // Opção de Drag com ícones {+} e {-} - recursos adicionais ctrl3 = new DragZoomControl({}, otherOpts, {}), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(47,10)); var otherOpts = { buttonStartingStyle: {background: '#FFF', paddingTop: '0px', paddingLeft: '0px', border:'none'}, buttonHTML: '<img title="Zoom In" src="imagens/zoom.png">', buttonStyle: {width:'17px', height:'17px'}, buttonZoomingHTML: '<div id="zoominout"><blink>Clique e arraste sobre uma área do MAPA<br>(ou clique aqui<br>para resetar)</blick></div>', buttonZoomingStyle: {background:'#BFDBFF', width:'100px', height:'100%', color:'#15428B'}, backButtonHTML: '<img title="Zoom out" src="imagens/zoomout.png">', backButtonStyle: {display:'none',marginTop:'4px',width:'17px', height:'17px'}, backButtonEnabled: true, overlayRemoveTime: 1500} ctrl3 = new DragZoomControl({}, otherOpts, {}), GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(47,100)); // Adiciona Escala para Medição e Referência ctrl4 = new GScaleControl(); // Ativa GPS para inicialização ctrl5 = new MStatusControl({DMS:false, background:'#BFDBFF', foreground:'#15428B'}); // Ativa os controles // Ativa Controle de Zoom e Slider map.addControl(ctrl1); // Ativa Controle de Tipo de Mapa map.addControl(ctrl2); // Controle de Zoom out e In map.addControl(ctrl3); // Ativa Escala map.addControl(ctrl4); // Ativa Controle GPS map.addControl(ctrl5); // Criação de Marcas conforme quantidade de Abas estabelecidas: (4) // Cria a marca com as informações a seguir function createMapMarker (lat, lng, texto1, texto2, tab1, tab2) { // Segunda Parte var pt = new GLatLng(lat, lng); var marker = new GMarker(pt, {draggable: true, trackMarkers: true}); map.addOverlay(marker); GEvent.addListener(marker, 'click', function(latlng){ var min = '<div class=texto_simples>Informações Simplificadas:<br>Clique em [+] para maiores informações.<br>Dados para Referência:<br> ' + latlng + '</div>'; var sum = 'Informações sobre a Localização GPS (em decimais-compatível Google Maps):<br><b>GPS: ' + latlng + '</b> e <b>' + Math.random() + '</b>'; var tabs = [ new MaxContentTab('Um texto aqui', 'marker content 0'), new MaxContentTab('Um texto aqui', 'marker content 1'), new MaxContentTab('Um texto aqui', 'marker content 2'), new MaxContentTab('Um texto aqui', 'marker content 3')]; marker.openMaxContentTabsHtml(map, min, sum, tabs, { maxTitle: "<div class=texto_simples>Informações Complementares</div>" }); }); } // Ativa Função de arraste do Mapa com o Mouse - Chamado diretamente do Sistema function eDrag() { map.enableDragging(); } // Desativa a Função de Arraste do Mapa com o Mouse - Chamado diretamente do Sistema function dDrag() { map.disableDragging(); } // Refresh para os pontos function reloadMarkers() { mm.refresh(); } // Seção de Controles // ************************************************************** // Função para Remover Controles function removecontroles(){ // Ativa Controle de Zoom e Slider map.removeControl(ctrl1); // desativa Controle de Tipo de Mapa map.removeControl(ctrl2); // Desativa Controle de Zoom out e In map.removeControl(ctrl3); // Dessativa Escala map.removeControl(ctrl4); // Desativa visualização de GPS map.removeControl(ctrl5); } // Funções de Remoção para Cada Controle // Remove somente o controle selecionado // Remove Zoom function removezoom() { map.removeControl(ctrl1); } // Remove Tipo de Mapa function removetipomapa() { map.removeControl(ctrl2); } // Remove Controle de Zoom function removectrlzoom() { map.removeControl(ctrl3); } // Remove Zoom function removeescala() { map.removeControl(ctrl4); } // Remove GPS function removegps() { map.removeControl(ctrl5); } // ************************************************************* // Função para reativar Controles function reativacontroles(){ // Ativa Controle de Zoom e Slider map.addControl(ctrl1); // Ativa Controle de Tipo de Mapa map.addControl(ctrl2); // Controle de Zoom out e In map.addControl(ctrl3); // Ativa Escala map.addControl(ctrl4); // Ativa visualização de GPS if (ctrl5 == 10) { } if (ctrl5 != 10) { map.addControl(ctrl5); } } // Funções para Cada Controle // Adiciona somente o controle desejado function reativazoom(){ // Ativa Controle de Zoom e Slider map.addControl(ctrl1); } // Ativa Tipo de Mapa function reativatipomapa() { map.addControl(ctrl2); } // Ativa Controle de Zoom function reativactrlzoom() { map.addControl(ctrl3); } // Ativa Zoom function reativaescala() { map.addControl(ctrl4); } // Remove GPS function reativagps() { if (ctrl5 == 10) { } if (ctrl5 != 10) { map.addControl(ctrl5); } } // ** Fim de seção de controles // Atualiza Janela GPS function atualizajanelagps(tipocoord, posjanela) { if (tipocoord == 0) { if (posjanela == 0) { removegps(); var pos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 45)); ctrl5 = new MStatusControl({DMS:true, position:pos, background:'#FFB381', foreground:'#000000', vertical:true}); map.addControl(ctrl5); } if (posjanela == 1) { removegps(); var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(65, 0)); ctrl5 = new MStatusControl({DMS:true, position:pos, background:'#FFB381', foreground:'#000000', vertical:true}); map.addControl(ctrl5); } if (posjanela == 2) { removegps(); ctrl5 = new MStatusControl({DMS:true, background:'#BFDBFF', foreground:'#15428B'}); map.addControl(ctrl5); } } if (tipocoord == 1) { if (posjanela == 0) { removegps(); var pos = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(0, 45)); ctrl5 = new MStatusControl({DMS:false, position:pos, background:'#FFB381', foreground:'#000000', vertical:true}); map.addControl(ctrl5); } if (posjanela == 1) { removegps(); var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(65, 0)); ctrl5 = new MStatusControl({DMS:false, position:pos, background:'#FFB381', foreground:'#000000', vertical:true}); map.addControl(ctrl5); } if (posjanela == 2) { removegps(); ctrl5 = new MStatusControl({DMS:false, background:'#BFDBFF', foreground:'#15428B'}); map.addControl(ctrl5); } } if ((tipocoord == 5) & (posjanela == 5)) { ctrl5 = 10; } } // Fim de Script </script> </body> </html> Repare que ele cita 3 scripts externos,: Estes scripts, são necessários para alguns efeitos e recursos adicionais, e estão disponíveis nos seguintes endereços, com suas respectivas explicações: Cada um destes Scripts, tem suas funções e configurações, mas por padrão, se você baixa-las e coloca-las na mesma pasta do Mapa.html irão funcionar. Basta salvar com o mesmo nome orginal. Em cada um dos endereços acima, você encontrará explicações e exemplos de uso, e poderá descobrir o que pode ser feito com eles. No meu exemplo "Mapa.html" criei funções em JavaScript para retirar e inserir novamente os controles no mapa. Assim, nossa vida é facilitada para usar os diversos recursos que o Google Maps nos oferece. Aqui, desativei o Google Earth 3D, mas você poderá usa-lo também, porém, os camandos em JavaScritp são exclusivos para Google Maps, e não irão funcionar para o 3D. Vamos para o Delphi: Crie uma nova aplicação, e vamos inserir os componentes no FORM. Adicionei no USES os seguintes recursos: SHDocVw, MSHTML, ActiveX. Coloque um WebBrowser e aumente ele do tamanho que desejar no FORM. O Mapa foi feito para se auto-ajustar ao tamanho disponível com CSS. No ONCREATE do Form1 deixe com os seguintes dados: Assim, ele busca o mapa no diretório da aplicação que você está fazendo, e executa a página assim que o programa for executado. Para isso funcionar, você precisa salvar sua aplicação na mesma pasta onde você salvou o Mapa.html. Pronto. Até aqui, qualquer tutorial da web faria o trabalho. Agora vem o truque ;) Para cada função que temos no mapa.html em JavaScript, poderemos chama-la diretamente de dentro do Delphi, com os sequintes comandos: Crie um Button e dê um duplo clique nele. Isso abrirá o procedimento Clique dele, onde você chamará a função em JavaScript da página HTML. procedure TForm1.Button1Click(Sender: TObject); var variaveis :string; begin // isso aqui abaixo, é necessário para executar comandos diretamente no WebBrowser with WebBrowser1.Document as IHTMLDocument2 do with parentWindow do begin // Aqui eu digo qual função eu quero chamar, e jogo isso para a variável variaveis := 'ddragpoint()'; // Aqui ele executa o JavaScript propriamente dito, dentro do Mapa.html que está ativo no WebBrowser: execScript(variaveis, 'JavaScript'); end; end; Isto é só um exemplo veja as funções, e crie botões conforme sua necessidade. Para adicionar pontos móveis, com abas, e com tudo que tem direito, execute a função (Use isso somente depois de ter todos os JavaScripts dentro da mesma pasta): procedure TForm1.Button1Click(Sender: TObject); var variaveis :string; begin with WebBrowser1.Document as IHTMLDocument2 do with parentWindow do begin variaveis := 'createMapMarker("20","30","Exemplo","Exemplo","Aba 1", "Aba 2")'; execScript(variaveis, 'JavaScript'); end; end; Bem, agora é somente diversão. Use JavaScript para chamar ou executar qualquer coisa no mapa, ou em outra aplicação. É possível assim, interagir com aplicações web, e outras "coisitas más". Bom uso, boa diversão. O Mais chato tá feito, prontinho em HTML. Para funções que estejam assim no java script: function NomedaFuncao() { } Não há necessidade de parâmetros. Caso esteja assim: function NomedaFuncao(nome1,nome2) { } Você precisará informar parâmetros para funcionar tudo certinho. Para maiores informações, consulte a API do Google Maps, e faça as adaptações necessárias ao seu projeto. Até e bom uso. Adriano - Brasil ------------------------------------------------------------------------------ "O Senhor é quem dá a Sabedoria, é dEle que vem a inteligência."
  14. Jhonas, excelente... B) Vou olhar aqui e testar, e passo um feedback. Serão 3 processos para o XML alterado e 2 para chegada ao banco: Importar Mysql e Salvar em XML-> Alterar XML -> Salvar XML do Delta Alterado --->> Processo de Alteração Finalizado. Puxar dados do XML alterado e Salvar em MySQL diretamente.... Processo de Sincronização do BD ok. Ótimo, vou avaliar aqui e já mando um retorno... obrigado!! Uma pergunta: onde posso deixar alguma dica sobre uso do Google Maps, e disponibilizar para a Comunidade do Fórum? Aqui a gente encontra informação, mas deixa informação também. Valeu, e mando um retorno, e se tudo ok, posto aqui e deixo como resolvido o Tópico.
  15. Alguém tem alguma idéia?? Sei que não é um problema comum... mas alguém já passou por este problema?
  16. Amigo, alguns sites podem te dar as dicas necessárias, (só não sei se é permitido postar endereços de outros sites):Acho que este é um bom caminho, divindo em 3 partes - mais recomendado para aprender: http://imasters.uol.com.br/artigo/1340/dot...lphi_-_parte_1/ http://imasters.uol.com.br/artigo/1383/del...lphi_-_parte_2/ http://imasters.uol.com.br/artigo/1459/del...lphi_-_parte_3/ Outro mais enxuto... menos completo: http://www.planetadelphi.com.br/dica/6996/...o-xml-no-delphi E uma vídeo aula, mas precisa ser cadastrado no site: http://www.activedelphi.com.br/modules.php...cle&sid=233 ------------------------------------------ Também o exemplo zipado do amigo Jhonas vai lhe ajudar a ver na prática... Se precisar de mais material, pesquise no Google - "Criando um Cadastro em XML no Delphi" você encontrará outras vídeo aulas também. Bem, sobre atualizar somente os campos, é uma solução, mas no caso seria complicado, pois teria que fazer uma requisição ao banco diretamente a cada alteração de campo. Mas em alguns locais onde será usada esta aplicação não terá acesso a internet. Haverá necessidade de uma sincronização posterior. Alguém sabe como fazer o armazenamento das alterações do Delta do ClienteDataSet para alterar posteriormente somente os campos dos registros alterados? Salvar em XML por exemplo os dados alterados e puxar isso depois para o banco de dados? Pensei em algo como salvar as alterações em um XML separado, e depois verificar quais campos estão limpos e só jogar o que tivesse conteúdo. Neste caso teria que receber estes dados alterados do Delta. Se alguém souber de algo assim.... Ainda não achei uma solução mais ajustada a este problema.
  17. Cara, desde já, obrigado pela resposta e disposição em ajudar. Passei 2 dias procurando isso, e em outro fórum, nem mesmo fui educamente respondido. Está de parabéns pela educação e disposição. De fato pensei nisso que você propos também. Na ordem, eu puxo os dados do banco de dados de uma só vez e converto tudo para xml. Isso para que possa ser usado em local sem acesso a internet. Pensei em gerar um XML somente com os dados alterados. Li a respeito do Delta do ClienteDataSet, inclusive no livro do Marco Cantu. Com o Delta é possível fazer isso? Jogar por exemplo somente os dados alterados em um novo xml e depois lança-los quando possível no banco de dados? To apanhando nisso, se fosse somente gravar um novo registro seria simples, o problema é jogar isso tudo outra vez para o banco de dados, sem alterar os campos dos registros originais, somente os atualizados. Não sei se estou sendo claro. É como alterar somente o peso de uma pessoa em um registro, os outros dados não precisam ser alterados, pois outra pessoa está alterando somente o campo idade deste mesmo registro... um exemplo.... Tem alguma sugestão? Um exemplo possível para eu visualizar? Desde já, obrigado ao Fórum, pela educação e disposição em responder. Estão de Parabéns e isto estimula a ajudar também. Em breve posso enviar algumas dicas sobre google maps, que são úteis usando o delphi. Obrigado...
  18. Olá... :blink: Tenho um número de registros específicos que não mudam, 300, nem são acrescentados e/ou retirados, somente modificados, e cerca de 30 usuários que vão acessar estes dados e alterar campos específicos de cada registro. Cada campo deste registro tem dados variáveis, como por exemplo número de pessoas, nome do representante deste local, etc. Quando um usuário acessa, ele irá alterar um dos campos do registro, conforme ele consiga os dados. que podem em determinado momento, e vai acontecer, ser o mesmo registro que outro usuário está alterando. Mas preciso salvar somente aquele campo alterado sem sobscrever os outros campos não alterados. Tentei usar o Delta do ClienteDataSet, mas não sei como faze-lo salvar somente o campo alterado. Estes dados serão acessados via web, em Mysql. É através do ProviderFlags? Não posso bloquear o registro para outro usuário, tenho que deixar aberto e salvar somente o campo alterado. Não posso criar uma conexão persistente pois dependendo da localidade o usuário não terá internet, e talvez tenha que salvar em XML... Alguma dica? Alguém já passou por isso? alguém tem um exemplo para analisar??
×
×
  • Criar Novo...