ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Gravar Varias linhas de uam vez Resolvido
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Seg Dez 29, 2014 3:18 pm    Assunto: Gravar Varias linhas de uam vez Resolvido Responder com Citação

Pessoal estou em um dilema aqui já tem alguns dias e vim recorrer a vocês, pois não estou encontrando a solução. Seguinte tenho uma lista que vai vir em um .TXT nela constam vários códigos do tipo 000-14585-12542-0005 isso vai vir linha a linha, então preciso copiar isso de um arquivo .txt e colar no delphi onde venha linha a linha da mesma forma que copiei do .txt após estarem todos um abaixo do outro no delphi eu vou pedir para ele gravar de uma só vez no banco de dados e caso já exista o código gravado preciso que o sistema não grave pule esse código ou mesmo delete ele depois de terminar o loop de gravação. Algo assim. Está complicado para fazer ele entender de gravar linha a linha, tipo para eu colar e já ficar um abaixo do outro. Fico no aguardo de alguma solução. Obrigado pessoal.

Editado pela última vez por jefmachia em Ter Set 29, 2015 7:42 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Ghost_Rider
Colaborador
Colaborador


Registrado: Segunda-Feira, 6 de Outubro de 2003
Mensagens: 4437

MensagemEnviada: Seg Dez 29, 2014 5:12 pm    Assunto: Responder com Citação

Bom, primeiro, se cada linha é um registo, e vc precisa verificar se o registro existe, não tem como fazer tudo de uma vez.
Para "colar" no delphi, teria que jogar as linhas num memo, uma abaixo da outra, o que é simples, mas se você precisar verificar se os códigos existem, não é exatamente isso que você esta desejando no seu topico...explica melhor sua necessidade...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Seg Dez 29, 2014 7:37 pm    Assunto: Responder com Citação

Ghost_Rider estou aqui quebrando a cuca ainda, na realidade consegui fazer um loop usando o MEMO até ai blz, agora estou precisando fazer ele gravar uma a um - Mas para explicar um pouco melhor, um amigo cadastra códigos de usuário então esses codigos não podem ser repetidos, poderia ser pelo memo não tem problema, ele so vai precisar checar se existe ou não antes de gravar que penso eu que isso seja meio simples, vou pedir para ele consultar e se retornar igual a zero ele grava até ai tranquilo, agora minha briga está para fazer um loop na hora de gravar para que ele vai gravando uma a uma. Estou quase chegando lá, se puder me ajudar no loop para gravar, vai ajudar bastante. Vou passar a forma em que estou gravando.

MyQuery1.FieldByName('nome').AsString := Memo1.Lines.Strings[i];
MyQuery1.Post;

Eu preciso fazer ele postar mais que uma vez, assim ele está gravando somente uma linha e não todas.


para ficar claro o uso disso para ele. Ele trabalha com umas vendas online para jogos virtuais e ele tem um sisteminha online mesmo que já gera pra ele os codigos de todos que compraram lá, então ele quer pegar os codigos dessa lista e jogar em outro sistema, para que daqui amanhã quando ele tem coisas novas ele não mande MI mais que uma vez para o cliente dele. Então por esse motivo preciso que não exista código repetido....
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Seg Dez 29, 2014 8:09 pm    Assunto: Responder com Citação

Amigos já quase resolvi todo o problema, so preciso de mais um empurrão aqui. Seguinte vou postar o código, ele já está gravando no banco de dados, agora preciso que ele veja se já existe e não grave se existir. A consulta é até meio simples a minha dúvida é a seguinte, como fazer ele não copiar esse registro para o banco caso o mesmo exista e continuar gravando o restante da lista.

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i : Integer;
begin
MyQuery1.Insert;
for i := 0 to Memo1.Lines.Count - 1 do



if Memo1.Lines.Strings[i] = '' then
begin
abort;
end
else begin
MyQuery1.Insert;
MyQuery1.FieldByName('nome').AsString := Memo1.Lines.Strings[i];
MyQuery1.Post;
end;
MessageDlg('Arquivos Geavados Com Sucesso', mtWarning, [mbOK], 0);

end;

end.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Seg Dez 29, 2014 10:47 pm    Assunto: Responder com Citação

Amigos é o seguinte, dai mesmo consegui fazer o que eu precisava. Bom agora vem o dilema número dois, vamos ver se conseguem me ajudar.
Preciso que o procedimento seja o inverso desse, ou seja, a pessoa vai colar os códigos em um MEMO e depois preciso apertar que que exclua esse dados, tentei mudando a linha do POST para DELETE mas não funcionou. Tem alguma idéia e sabe me falar se da pra fazer isso? Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Dez 30, 2014 8:55 am    Assunto: Responder com Citação

Explique melhor a sua segunda dúvida. Você quer excluir o registro no banco ou apenas excluir a linha no memo?
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Dez 30, 2014 9:07 am    Assunto: Responder com Citação

Se for para excluir o registro no banco siga o exemplo abaixo, substituindo pelos nomes da tabela e campos do seu banco no comando SQL:

Código:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to Memo1.Lines.Count - 1 do
  Begin
    if Memo1.Lines.Strings[i] = '' then
    abort
    else
    begin
      MyQuery1.Close;
      MyQuery1.SQL.Clear;
      MyQuery1.SQL.Add('Delete from tabela where nome = ' + QuotedStr(Memo1.Lines.Strings[i]));
      MyQuery1.ExecSQL;
    end;
  End;
  MessageDlg('Exclusão efetuada com sucesso', mtWarning, [mbOK], 0);
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Ter Dez 30, 2014 10:58 am    Assunto: Responder com Citação

Obrigado Natanbh1, vou fazer o teste aqui e depois posto se correu tudo certinho. Obrigado amigo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Ter Dez 30, 2014 11:25 am    Assunto: Responder com Citação

natanbh1 a solução foi perfeita, funcionando tudo certinho e maravilha.... Obrigado amigo e obrigado a todos que colaboraram feliz ano novo a todos....
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Ter Dez 30, 2014 3:09 pm    Assunto: Responder com Citação

Antes de fecharem, me deparei com uma outra coisa aqui, agora preciso que seja exibido esses dados em uma memo, tem como fazer isso? A pessoa precisa copiar esses dados e colar em outro lugar. Obrigado
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Dom Jan 04, 2015 6:32 pm    Assunto: Responder com Citação

Pessoal tudo resolvido e já solucionado, so precisava de fazer um loop para mostrar os dados na memo de 50 em 50. Alguem tem alguma ideia de como fazer?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Dom Jan 04, 2015 7:05 pm    Assunto: Responder com Citação

Pessoal vou colar o código para verem se tem como, estou usando banco access segue abaixo o código que está funcionando em um loop geral de todos, eu preciso colocar um botão para exibir de 150 em 150 registros, ai ele vai apertar um botão próximo, limpa a tela e coloca mais 150 registos no memo..... segue abaixo o código para facilitar. Obrigado desde já.


procedure Tclientes.sBitBtn1Click(Sender: TObject);
begin
sMemo1.Text := '';
ADOQuery1.Close;
ADOQuery1.Parameters.ParamByName('nome').Value := sEdit1.Text + '%';
ADOQuery1.ExecSQL;
ADOQuery1.Active := true;
while not ADOQuery1.Eof do
begin
sMemo1.Lines.Add(ADOQuery1.FieldByname('nome').AsString);
ADOQuery1.Next;
end;
if ADOQuery1.RecordCount = 0 then
begin
MessageDlg('Nada Encontrado!', mtWarning, [mbOK], 0);
end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Seg Jan 05, 2015 10:13 am    Assunto: Responder com Citação

Tente assim:

Código:
procedure Tclientes.sBitBtn1Click(Sender: TObject);
var
    i: Integer;
begin
    ADOQuery1.Close;
    ADOQuery1.Parameters.ParamByName('nome').Value := sEdit1.Text + '%';
    ADOQuery1.ExecSQL;
    ADOQuery1.Active := True;

    if not ADOQuery1.Eof then
    Begin
      sMemo1.Clear;

      for i := ADOQuery1.RecNo to ADOQuery1.RecNo + 150 do
      begin
        if not ADOQuery1.Eof then
        Begin
          sMemo1.Lines.Add(ADOQuery1.FieldByName('nome').Value);
          ADOQuery1.Next;
        end;
      End;
    End;

    if ADOQuery1.RecordCount = 0 then
      MessageDlg('Nada Encontrado!', mtWarning, [mbOK], 0);
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
jefmachia
Novato
Novato


Registrado: Quinta-Feira, 24 de Outubro de 2013
Mensagens: 93

MensagemEnviada: Seg Jan 05, 2015 6:14 pm    Assunto: Responder com Citação

Natanbh1 olha quase deu certo, dessa forma ele traz 150 e quando aperto o botão ele repete os 150, tipo tenho 9500 registros, eu preciso que ele me mostre a cada apertada 150 por vez tipo ele coloca 150 primeiros registros, depois quando aperto novamente ele mostra mais 150 e dai vai até o final, nesse caso ele está repetindo os 150 primeiros registros e não mostras os outros. Obrigado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Jan 06, 2015 8:27 am    Assunto: Responder com Citação

Isso está acontecendo porque toda vez que você aperta o botão abre-se novamente a pesquisa. A pesquisa e abertura da tabela tem que ser feita apenas uma vez e ficar fora do botão que mostra 150 em 150.

O código abaixo deve ficar em outro botão ou em algum evento.

Código:
    ADOQuery1.Close;
    ADOQuery1.Parameters.ParamByName('nome').Value := sEdit1.Text + '%';
    ADOQuery1.ExecSQL;
    ADOQuery1.Active := True;


O botão que mostra 150 fica assim:

Código:
procedure Tclientes.sBitBtn1Click(Sender: TObject);
var
    i: Integer;
begin
    if not ADOQuery1.Eof then
    Begin
      sMemo1.Clear;

      for i := ADOQuery1.RecNo to ADOQuery1.RecNo + 150 do
      begin
        if not ADOQuery1.Eof then
        Begin
          sMemo1.Lines.Add(ADOQuery1.FieldByName('nome').Value);
          ADOQuery1.Next;
        end;
      End;
    End;

    if ADOQuery1.RecordCount = 0 then
      MessageDlg('Nada Encontrado!', mtWarning, [mbOK], 0);
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB