Fórum IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet? #354738
04/03/2008
0
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?
Jpauloss
Curtir tópico
+ 0Posts
04/03/2008
Flyskin
Gostei + 0
04/03/2008
Hall 9000
//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
O problema pode estar no fato de vc não estar fechando cds antes de refazer a pesquisa. Ficaria assim:
dm.cdsMaterial.Close;// adicionar esta linha!!!!!!
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
Lembrando, o IsEmpty funciona normal no cds.
Falou!
Gostei + 0
01/09/2014
Roberto Novakosky
Verifique se o teu ClientDataSet está ligado a algum DBCheckBox, e se o DBCheckBox possui algum evento programado nele. (pode ser algum outro componente visual tb)
Se tiver evento programado neste componente, tenha certeza que verificar antes cds.IsEmpty. (só porque o DBCheckBox tem um evento de onClick mexendo no cds, o client retorna IsEmpty como falso, porque é adicionado automaticamente um record vazio no cds, mas como ainda nao tem post recordCount continua retornando zero, entendeu .. isEmpty passa a retornar falso, porque existe um record pendente no cds). Para resolver faça um código dentro do evento para saltar fora como
no onClick por exemplo (pode ser algum outro teu)
if cds_xxx.IsEmpty then Exit;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)