PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Busca do campo nome no banco de dados da erro #470418

18/02/2014

0

Olá Pessoal,
O que eu estou tentando fazer é o seguinte, existe um campo EDIT que é onde o usuário vai digitar o nome do produto. E o que eu queria fazer é que "OnChange" enquanto o usuário estiver escrevendo se o produto já existir no banco de dados vai aparecer uma mensagem "Que o produto já existe!". Eu já consegui fazer de uma forma porém ela não consegue diferenciar de maiusculo e minusculo, este é o modo de como eu fiz:
procedure TF_FormProduto.edtNomeChange(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to TClientDataSet(dtsConsultar.DataSet).RecordCount -1 do
  begin
    if edtNome.Text = TClientDataSet(dtsConsultar.DataSet).FieldByName('NOMBRE').AsString then
    begin
      ShowMessage('Produto já existe! Caso queira inserir mais unidades vá para a Entrada.');
      edtNome.SetFocus;
      exit;
    end;
  end;
end;


Por isso eu comecei a querer utilizar a propriedade CommandText para fazer ele pegar direto do banco de dados independende de ser maiuscula ou minuscula. Então comecei a fazer desta forma:
O CODIGO:
procedure TF_FormProduto.edtNomeChange(Sender: TObject);
begin
  with TClientDataSet(dtsConsultar.DataSet) do
  begin
    close;
    CommandText:= 'select NOMBRE from producto where NOMBRE like ' + QuotedStr('%' + edtNome.Text + '%');
    open;
  end;
  if DMPesq.cds_PesqProduto.RecordCount > 0 then
  begin
    ShowMessage('Produto já existe! Caso queira inserir mais unidades vá para a Entrada.');
  end;
end;


O CommandText no ClientDataSet que no caso ta sendo chamado pelo DataSource chamado dtsConsultar.
select A.id_producto, A.nombre, B.nombre AS proveedor, C.nombre AS marca, D.NOMBRE as GRUPO, E.NOMBRE as PROCEDENCIA, F.NOMBRE as TIPO_PRODUCTO, G.NOMBRE as UNIDAD, A.CODIGO_INTERNO, A.CODIGO_BARRA, A.CODIGO_GR, A.ESTOQUE_REAL, A.ESTOQUE_TEMPORARIO, A.ESTOQUE_INICIAL, A.ESTOQUE_MINIMO, A.FECHA_FABRICADO, A.FECHA_VENCIMIENTO, A.PRECIO_COSTO, A.PRECIO_MEDIO, A.PRECIO_VENTA, A.PORCENTAJE_COMISION, A.porcentaje_maxima FROM producto A, proveedor B, marca C, grupo D, procedencia E, tipo_producto F, unidad G WHERE A.id_proveedor = B.id_proveedor AND A.ID_MARCA = C.ID_MARCA and A.ID_GRUPO = D.ID_GRUPO and A.ID_PROCEDENCIA = E.ID_PROCEDENCIA and A.ID_TIPO_PRODUCTO = F.ID_TIPO_PRODUCTO and A.ID_UNIDAD = G.ID_UNIDAD


Porém quando eu utilizo esse modo de comparar o que o usuário digito no campo EDIT com o que existe no campo NOMBRE da tabela do banco de dados, aparece o seguinte erro:
Project CCMS.exe raised exception class EDatabaseError with message 'cds_PesqProduto: Field 'ID_PRODUCTO' not found'.


Eu já fiz tudo que eu sei fazer pra tentar solucionar esse erro, já criei um outro ClientDataset com um outro commandText para pegar todos no caso pelo fato de ele nao estar achando o ID do producto:
select * from producto


Porém dai ele fala que toda hora acha o produto mesmo não existindo o produto na tabela. E mais outras coisas que não levaram a lugar algum.

Alguem saberia o que eu estou fazendo de errado?

Desde já agradecido!!!
Edson Vilhalba

Edson Vilhalba

Responder

Posts

18/02/2014

Edson Vilhalba

Pessoal descobri o erro mesmo assim muito obrigado!
Caso alguem queira só fazer isto:

No commandtext do clientdataset coloque:
Select * from produto


E no EDIT coloque OnExit:
procedure TF_FormProduto.edtNomeExit(Sender: TObject);
begin
  if edtNome.Text <> EmptyStr then
  begin
     with TClientDataSet(dtsALLConsultar.DataSet) do
     begin
      close;
      CommandText:= 'select * from producto where NOMBRE like ' + QuotedStr('%' + edtNome.Text + '%');
      open;
     end;
     if DMPesq.cds_PesqALLProducto.RecordCount > 0 then
     begin
      ShowMessage('Produto já existe! Caso queira inserir mais unidades vá para a Entrada.');
     end;
  end;
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar