Select faltando registros com Delphi Prism e Firebird

24/02/2010

1

Tenho um sistema usando Delphi Prism e Firebird 2.0, onde controle os equipamentos de informatica da empresa, porem se eu der o mesmo comando select no IBExpert me retorna todos os registros, no meu botão esta assim:

  var con := new FbConnection(ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString);
  var SQL := "SELECT EQUIPAMENTOS.NUM_PATR, EQUIPAMENTOS.DESCRICAO " +
            "FROM " +
            "EQUIPAMENTOS " +
            "WHERE EQUIPAMENTOS.ID_DEPARTAMENTO=@ID_DEPARTAMENTO " +
            "ORDER BY EQUIPAMENTOS.NUM_PATR ASC";

  var cmd := new FbCommand(SQL, con);
  cmd.CommandType := CommandType.Text;
  cmd.parameters.addwithvalue("@ID_DEPARTAMENTO", dpDepto.SelectedValue);
  con.Open();


  try
   
    var dr := cmd.ExecuteReader();
   
    if dr.Read then
    begin
      GridView1.DataSource := dr;
      GridView1.DataBind;
    end;
     
     
  finally
    con.Close();
  end;


Sempre que clico no botão, me falta de 1 ou 2 registros, alguem sabe me dizer porque isso ocorre, obrigado pela ajuda.
Responder

Posts

24/02/2010

Thiago Santana

Amigo faça o seguinte! Gere a consulta SQL desejada no ibexpert e depois copie o código para dentro da VAR SQL existente no seu código para testar se tá td blza, caso esteja inclua um componente para receber o valor  da VAR SQL para vc testar se está vindo td correto ou se a montagem da consulta está indo errada para dentro da VAR SQL! Assim vc irá saber o que está acontecendo, já passei por isso e fiz esses testes e descobrir que era a concatenação dentro da váriavel que recebia o SQL que estava errada... Espero ter ajudado 
Responder

24/02/2010

Paulo Freire

Ola Thiago, também ja fiz isso, aogra criei uma Store procedure:

CREATE OR ALTER PROCEDURE EQUIP_POR_DEPTO (
    id_departamento integer)
returns (
    num_patr integer,
    num_patr_new smallint,
    descricao varchar(120))
as
BEGIN
  FOR
    SELECT EQUIPAMENTOS.NUM_PATR,
          EQUIPAMENTOS.NUM_PATR_NEW,
          EQUIPAMENTOS.DESCRICAO
    FROM EQUIPAMENTOS
    WHERE EQUIPAMENTOS.ID_DEPARTAMENTO = :ID_DEPARTAMENTO
    ORDER BY EQUIPAMENTOS.NUM_PATR_NEW
    INTO
      :NUM_PATR,
      :NUM_PATR_NEW,
      :DESCRICAO
  DO
  BEGIN
    SUSPEND;
  END
END^

SET TERM ; ^

GRANT SELECT ON EQUIPAMENTOS TO PROCEDURE EQUIP_POR_DEPTO;

GRANT EXECUTE ON PROCEDURE EQUIP_POR_DEPTO TO SYSDBA;


Se eu executar a Store Procedure no IbExpert me retorna todos os registros, agora se eu executa do sistema não, meu botão esta assim:

var con := new FbConnection(ConfigurationManager.ConnectionStrings["Conexao"].ConnectionString);
    var cmd := new FbCommand("EQUIP_POR_DEPTO", con);
    cmd.CommandType := CommandType.StoredProcedure;   
 
    cmd.parameters.addwithvalue("ID_DEPARTAMENTO", dpDepto.SelectedValue);
    con.open();

    try
   
      var dr := cmd.ExecuteReader();   
      if dr.Read then
      begin
        GridView1.DataSource := dr;
        GridView1.DataBind;
      end;
   
    finally
      con.Close();
    end;
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira