Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) xml com delphi


flavioavilela

Pergunta

boa noite a todos...

estou desenvolvendo uma aplicação e em uma janela, estou usando xml para guardar os dados no local, para que, caso a rede caia ou alguma coisa do genero, eu possa continuar trabalhando, independente da rede... agora, eu já consegui gerar o xml, já consegui levar do xml para o banco e vice-versa... minha dúvida é: ao finalizar todo o procedimento que desejo, clicando no botão salvar, ele pega tudo que foi gerado no xml e manda pro banco???? ou de tempo em tempo ele manda os dados pro banco??? alguém pode dar uma idéia de como atualizar o banco de dados com os dados do xml???

ahh, outra questão também, como que eu faço para verificar, antes de mandar os dados pro banco, se a rede está conectada blzinha ou um cabo está solto, o servidor desligado, enfim, se a rede está funcionando beleza para mandar pro banco???????

desde já, obrigado a todos...

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Coloque 1 componente SQLQuery que fica na paleta DbExpress e um XMLTransformProvider. coloque também 2 ClientDataSet's e um DataSetProvider, que ficam na paleta DataAcess...

Ligue DataSetProvider na SQLQuery, e o ClientDataSet no DataSetProvider...

Não se esqueça de ligar sua SQLQuery na sua Conexão...

Agora monte sua query no componente SQLQuery, puxando todos os campos do banco que pretende gravar informações... exemplo:

SELECT NOME, CIDADE, ESTADO
FROM TABELA
Então dê 2 cliques no componente SQLQuery e vai abrir uma janelinha dos campos que vai estar em branco, daí você clica com o botão direito emcima dela e clica em Add all Fields, e em seguida faça esse processo também no ClientDataSet para adicionar todos os campos... Agora ligue o outro ClientDataSet no XMLTransformProvider, salve e feche o projeto... ainda com o Delphi aberto, clique em Tools e depois na opção XML Mapper... Abriu um programinha, você clica em File e depois em Open, e abre o seu arquivo XML... Agora do lado direito onde apareceu seus campos, você dá 2 cliques em cada campo, para que ele vá para o meio... Assim que terminar de colocar todos no meio, você clica com o botão direito do mouse, no lado esquerdo <<<, no mesmo lugar que você estava dando 2 cliques, só que aí você seleciona a opção Create Datapacket from XML, em seguida clique no botão do meio chamado Create and Test Transformation e veja se está correto, em seguida feche a telinha de teste, e ainda na parte do meio você clica com o botão direito do mouse e clica em SaveTransformation... Salve o arquivo na pasta da sua aplicação. Abra seu projeto novamente e vá no XMLTransformProvider e na opção TransformRead / Transformation, selecione o arquivo .xtr que você salvou na pasta da sua aplicação... então dê 2 cliques no ClientDataSet que está ligado ao XMLTransformProvider e clique com o botão direito na caixinha em branco e selecione Add all fields... Agora você pode criar um botão acrescentar em qualquer rotina o código de inserção: vou chamar de cdsXml o que está ligado no XmlTransformProvider e de cds só o que está ligado no DataSetProvider...
cdsXml.close;
XMLTransformProvider1.XMLDataFile := 'C:\Arquivo.xml';
cdsXml.Open;
if cds.Active = false then
cds.Open;
cds.Append;
cds.FieldByName('NOME').Text := cdsClidemoXml.fieldByName('NOME').Text;
cds.FieldByName('CIDADE').Text := cdsClidemoXml.fieldByName('CIDADE').Text;
cds.FieldByName('ESTADO').Text := cdsClidemoXml.fieldByName('ESTADO').Text;
cds.ApplyUpdates;
agora no evento OnReconcileError do cds coloque isso:
ShowMessage(E.Message);

Assim se aparecer algum erro você vai ver qual...

ufa... acho que é só isso... faz um teste aí e qualquer coisa fala.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

tipo, criar os arquivos xml eu já consegui... imagino que você postou ai ensinando como criar o xml... estou usando clientdataset com adoquery... já crio tudo blzinha... minha dúvida é quase em relação a lógica da aplicação...

sabendo como criar o xml com dados de uma tabela e vice-versa, penso em fazer assim: ao iniciar o sistema, eu copio prum xml(Venda.xml) todos os dados da tabela Venda (por exemplo)... a medida que eu vou fazendo uma venda (por exemplo), eu crio um outro xml (ItensVenda.xml) somente para armazenar aqueles itens de venda daquele momento, para que, quando concretizar a venda clicando no botão salvar, eu pego tudo que está no xml (ItensVenda.xml) e mando pro banco, atualizando o mesmo... terminando a venda e salvando no banco, eu atualizo o xml (Venda.xml), para que quando começar outra venda tenho a tabela Venda atualizada, para que eu possa pegar o codigo sequencial da próxima venda, por exemplo..... assim, em todos os processos da venda e em todos os momentos, estarei com os dados para realizar uma venda, na máquina local............ é isso mesmo??? estou pensando certo??? ou alguém tem outra idéia de como fazer isso???

a questão que não sei fazer, é verificar se a rede está "disponível" para mandar os dados pro banco ou não... isso que queria saber em relaçao a desenvolvimento....

Link para o comentário
Compartilhar em outros sites

  • 0

O que postei não é como criar um XML, e sim como inserir os dados dele no banco...

Dei o exemplo usando DbExpress, siga a lógica e adapte ao seus códigos.

Segue exemplo pra saber se a rede está acessível:

Insira um componente IdIpWatch que fica na paleta Indy Misc.

no FormCreate você coloca isso:

IdIPWatch1.HistoryEnabled := FALSE;

IdIPWatch1.Active := TRUE;

e no evento OnStatusChange do IdIpWatch você coloca isso:

if IdIPWatch1.ForceCheck  then
  ShowMessage('Rede Conectada! ')
else
  ShowMessage('Rede Caiu. Sistema será finalizado! ');

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

ok, vou fazer um teste aqui e retorno... vlw...

na sua opinião, veja se estou correto:

ao iniciar o sistema, eu copio prum xml(Venda.xml) todos os dados da tabela Venda (por exemplo)... a medida que eu vou fazendo uma venda (por exemplo), eu crio um outro xml (ItensVenda.xml) somente para armazenar aqueles itens de venda daquele momento, para que, quando concretizar a venda clicando no botão salvar, eu pego tudo que está no xml (ItensVenda.xml) e mando pro banco, atualizando o mesmo... terminando a venda e salvando no banco, eu atualizo o xml (Venda.xml), para que quando começar outra venda tenho a tabela Venda atualizada, para que eu possa pegar o codigo sequencial da próxima venda, por exemplo e limpo o xml (ItensVenda.xml) para que possa ser inserido outros itens da nova venda..... assim, em todos os processos da venda e em todos os momentos, estarei com os dados para realizar uma venda, na máquina local, ah, e crio também um outro xml (Produto.xml) para armazenar todos os produtos do meu banco e a cada venda terminada, atualizo o (Produto.xml), para caso o pessoal do estoque tenha cadastrado novas mercadorias............ é isso mesmo??? estou pensando certo??? ou alguém tem outra idéia de como fazer isso???

Link para o comentário
Compartilhar em outros sites

  • 0

Olha... se você trabalha em rede, eu não aconselharia usar um xml pra guardar o código sequencial... eu uso Generator... é bem mais facil pois quando eu já faço um cadastro no banco ele já pega o código automatico! Qual banco de dados você utiliza?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

sql server... eu tb pensei em usar generator mesmo mas dai tirei para fazer o esquema com o xml, pois se eu usar xml ele não vai guardar no codigo no xml, e quando vou mandar pro banco, vai sem o código saca... ou as vezes eu que não soube fazer... mas, tem finalidade isso ai tudo que eu disse acima? guardar os dados atualizados no xml da venda, itensvenda e produto e outras tabelas que precisar??? ou é viavel só a tabela de produto, vendo que venda e itensvenda vou so usar para guardar os dados da venda corrente???? o que acha???

Editado por flavioavilela
Link para o comentário
Compartilhar em outros sites

  • 0

Olha... por ser na rede eu não faria nada disso com XML, não há necessidade, eu tenho um sistema aqui na empresa e ele é em rede, todas as alterações e inserções eu faço diretamente no banco e uso generator, meu banco é firebird... se eu fizesse por xml ia gastar muito mais memória... a rede tinha que ser muito vagabunda pra ter que ficar armazenando dados e testando ela, o que você poderia fazer é checar a rede na hora que você clicar em salvar, aí sim se ela não estiver disponível você guarda os dados em um XML e depois que abrir o programa novamente você faz uma checagem, exemplo: se tiver um arquivo.xml na pasta X, você lê ele e joga no banco, acompanhando o valor do generator, porque se der problema em mais de uma estação ao mesmo tempo, os 2 teriam que gravar algo no banco, daí o código nunca ia ficar duplicado. Mas você quem sabe, tem códigos meus que estão tão bagunçados... mas estão funcionais... se estiver bem pra você e funcionando com rapidez é o que importa :P

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

1- é porque estou seguindo uns requisitos aqui para homologação de um sistema comercial e um dos requisitos é o programa funcionar independente da rede saca... por isso quero fazer isso... sem rede ou com rede ele vai funcionar... saca...

2- ah, o exemplo que você me passou para verificar se tem rede ou não funcionou blzinha... só teve um problema... ele só entra no evento se tiver rede... se não tiver, não entra... tipo, minha intensão é: se tiver rede, beleza, vai tudo pro banco, se não, exibe uma mensagem na tela falando que existe falha de comunicação com o servidor saca... e do jeito que você me disse, só verifica se está disponível, não verifica se não está disponível saca...

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi...

então você faz assim mesmo com XML se tiver sem rede... pra checar você faz isso:

if GetSystemMetrics(SM_NETWORK) and $01 = $01  then
begin
ShowMessage('O computador está em rede!');
//Tem rede, vou gravar no banco!
end
else
begin
ShowMessage('O computador não está em rede!');
//Não tem rede, vou gravar no XML!
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
ola pessoal, podem alguém me ajudar.
estou fazendo integração com empresa de enviar sms, ate já envia o problema e retorno por exemplo consultar sms lidos, respondidos e que retorno não retorna so variável ele retorna tipo Dataset e não e como eu leu isso? alguém sabe?
segue links
função é a StatusSMSNaoLido
obs: isso em delphi pascal
Editado por dreamsoft1244
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...