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 

IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet?

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
jpauloss
Profissional
Profissional


Registrado: Quinta-Feira, 17 de Agosto de 2006
Mensagens: 600
Localização: Salvador - Bahia

MensagemEnviada: Ter Mar 04, 2008 8:53 am    Assunto: IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet? Responder com Citação

Estou com essa rotina de importação, vou colocar uma parte
Código:
  begin
    Application.ProcessMessages;
    Readln(farq, linha); //Lê a linha e posiciona o cursor na próxima
    Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(pb.Max);

    //Buscando pelo Parâmetro codigo, para verificar se já existe na tabela
    dm.cdsMaterial.Params.ParamByName('COD_ORDENADO').asString := Trim(Copy(Linha, 1, 6));
    dm.cdsMaterial.Open;  //Abre o CDS

    if dm.cdsMaterial.IsEmpty then   //Se Não existir o registro
     begin
      dm.cdsMaterial.Append; //Insira os dados da linha atual
     end

    else //Senão, se o registro já existir
      dm.cdsMaterial.Edit; //Coloca em modo de edição para atualizar os campos

    //Aqui os campos recebem as linhas lidas
    dm.cdsMaterialCOD_ORDENADO.AsString := Trim(Copy(Linha, 1, 6));
    dm.cdsMaterialDESCRICAO.Value := Trim(Copy(Linha, 8, 30));
    dm.cdsMaterialUN.Value := Trim(Copy(Linha, 39, 30));
    dm.cdsMaterialPRECO_UNITARIO.AsString := Trim(Copy(Linha, 70, 30));
    dm.cdsMaterial.Post; //Salve o registro em memória
    //dm.cdsMaterial.ApplyUpdates(0);  //Aplica as atualizações em memória no banco //Já está no DM.cdsMaterialAfterPost
    dm.cdsMaterial.Close;  //Fecha o CDS
    Inc(i);
    pb.Position := pb.Position + 1;
    Next;

O problema é no dm.cdsMaterial.IsEmpty, quer dizer ele está entendendo que está vazio, mas na realidade está os mesmo dados da tabela MATERIAIS, aí ele deveria pular para o
ELSE
dm.cdsMaterial.Edit;
Só que isso não acontece. O que pode ser?
_________________
Escolha um trabalho que você ame e não terás que trabalhar um único dia em sua vida...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
AnOnImUs.Info
Colaborador
Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007
Mensagens: 1119
Localização: Goiânia - GO

MensagemEnviada: Ter Mar 04, 2008 9:02 am    Assunto: Re: IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet? Responder com Citação

As vezes o delphi da umas loucuras.... que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente.

tente da uma melhorada em seu codigo... assim tenho certeza que o delphi poderar interpreta-lo da forma desejada.

Obs.: Nao esquecendo que antes de voce passar para o seu client um parametros voce tem que fecha-lo antes.

Código:

with dm.cdsMaterial do begin
  Close;
  Params.ParamByName('COD_ORDENADO').asString := Trim(Copy(Linha, 1, 6));
  Open;

  if IsEmpty then
      Append
  else Edit;
end;


Qualquer duvida posta ai !
_________________
Reter o conhecimento é promover a ignorância !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Ter Mar 04, 2008 9:19 am    Assunto: Responder com Citação

Citação:
que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente.


haha du vi de o dó... isso non exciste!!!

ele compila o que vc manda compilar, nao tem magica!
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
AnOnImUs.Info
Colaborador
Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007
Mensagens: 1119
Localização: Goiânia - GO

MensagemEnviada: Ter Mar 04, 2008 9:32 am    Assunto: Responder com Citação

DonOctavioDelFlores escreveu:
Citação:
que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente.


haha du vi de o dó... isso non exciste!!!

ele compila o que vc manda compilar, nao tem magica!


ANTES....

Código:

function TFuncoes.ObterSequencia(Nome_Tabela,Empresa : String):String;
var qCons     : TSqlQuery;
    Nome_Gen  : String;
begin
   qCons := TSQLQuery.Create(Nil);
   qCons.SQLConnection := Conexao;
   Nome_Gen := 'GEN_'+Nome_Tabela+'_'+Empresa;
   {verificando se existe}
   with qCons do begin
     SQL.Add('SELECT * FROM RDB$GENERATORS');
     SQL.Add('WHERE');
     SQL.Add('    RDB$SYSTEM_FLAG IS NULL');
     SQL.Add('AND RDB$GENERATORS.RDB$GENERATOR_NAME = '+QuotedStr(Nome_Gen)+'');
     Open;
   if IsEmpty then begin
     {deve-se então criar o generator}
     //StartCommit;
     Close;
     SQL.Clear;
     SQL.Add('INSERT INTO RDB$GENERATORS (RDB$GENERATOR_NAME)');
     SQL.Add('VALUES ('+QuotedStr(Nome_Gen)+')');
     ExecSQL;
     //Commit;
   end;
     //StartCommit;
     Close;
     SQL.Clear;
     SQL.Add('SELECT GEN_ID('+Nome_Gen+',1) FROM RDB$DATABASE');
     Open;
     //Commit;
     Result := qCons.Fields[0].Text;
  end;
end;


DEPOIS...

Código:

function TFuncoes.ObterSequencia(Nome_Tabela,Empresa : String):String;
var qCons     : TSqlQuery;
    Nome_Gen  : String;
begin
   qCons := TSQLQuery.Create(Nil);
   qCons.SQLConnection := Conexao;
   Nome_Gen := 'GEN_'+Nome_Tabela+'_'+Empresa;
   {verificando se existe}
   qCons.SQL.Add('SELECT * FROM RDB$GENERATORS');
   qCons.SQL.Add('WHERE');
   qCons.SQL.Add('    RDB$SYSTEM_FLAG IS NULL');
   qCons.SQL.Add('AND RDB$GENERATORS.RDB$GENERATOR_NAME = '+QuotedStr(Nome_Gen)+'');
   qCons.Open;
   if qCons.IsEmpty then begin
     {deve-se então criar o generator}
     //StartCommit;
     qCons.Close;
     qCons.SQL.Clear;
     qCons.SQL.Add('INSERT INTO RDB$GENERATORS (RDB$GENERATOR_NAME)');
     qCons.SQL.Add('VALUES ('+QuotedStr(Nome_Gen)+')');
     qCons.ExecSQL;
     //Commit;
   end;
   //StartCommit;
   qCons.Close;
   qCons.SQL.Clear;
   qCons.SQL.Add('SELECT GEN_ID('+Nome_Gen+',1) FROM RDB$DATABASE');
   qCons.Open;
   //Commit;
   Result := qCons.Fields[0].Text;
end;



o mesmo codigo... so que no primeiro utilizei o "WITH"... ele dava erro, ja no segundo e a mesma coisa so que sem o "WITH".... e ele funciona perfeitamente.

me explique melhor por gentileza ?
_________________
Reter o conhecimento é promover a ignorância !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Ter Mar 04, 2008 9:50 am    Assunto: Responder com Citação

é simples...

no with vc deixa os metodos "soltos"...

dae se por acaso, existir uma funcao IsEmpty (pode ser qq outra, qq uma usada dentro do with) em alguma biblioteca declarada na uses, quai ele vai usar a do objeto do with ou a IsEmpty da biblioteca?????

Se vc deixa uma funcao "ambigua" a culpa nao é do compilador, e ele nao vai compilar algo na base do chute...
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
AnOnImUs.Info
Colaborador
Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007
Mensagens: 1119
Localização: Goiânia - GO

MensagemEnviada: Ter Mar 04, 2008 9:54 am    Assunto: Responder com Citação

DonOctavioDelFlores escreveu:
é simples...

no with vc deixa os metodos "soltos"...

dae se por acaso, existir uma funcao IsEmpty (pode ser qq outra, qq uma usada dentro do with) em alguma biblioteca declarada na uses, quai ele vai usar a do objeto do with ou a IsEmpty da biblioteca?????

Se vc deixa uma funcao "ambigua" a culpa nao é do compilador, e ele nao vai compilar algo na base do chute...




entao de acordo com suas palavras, voce esta concordando comigo !
_________________
Reter o conhecimento é promover a ignorância !
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Ter Mar 04, 2008 10:11 am    Assunto: Responder com Citação

Citação:
modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente.


existe uma diferenca entre como o codigo é escrito, e o que o codigo faz... vc pode modificar milhares de vezes a forma como o codigo é escrito, mas o que o codigo faz é apenas uma coisa, não importa como ele esteja representado...

mas ja tamos desviando o assunto... é coisa de interpretacao... esses dias vi uma frase... "words break if you push them too far" é +- por ai...
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
DonOctavioDelFlores
Colaborador
Colaborador


Registrado: Quarta-Feira, 12 de Setembro de 2007
Mensagens: 2630
Localização: Pra lá de Bagda

MensagemEnviada: Ter Mar 04, 2008 10:21 am    Assunto: Responder com Citação

Citação:
mas na realidade está os mesmo dados da tabela MATERIAIS, aí ele deveria pular para o
ELSE
dm.cdsMaterial.Edit;
Só que isso não acontece. O que pode ser?


respondendo o topico Very Happy

se o IsEmpty retorna true é pq é true!!!! já debugou pra ver o recordcount????

mas provavelmente deve ser esse prametro "Trim(Copy(Linha, 1, 6));" que fica invalido e nao retorna nada...
_________________
“The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
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
Página 1 de 1

 
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