Select faltando registros com Delphi Prism e Firebird
24/02/2010
0
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.
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.
Paulo Freire
Curtir tópico
+ 0
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;
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
Clique aqui para fazer login e interagir na Comunidade :)