Ajuda com consulta usando DBExpress
Boa tarde a todos, estou tentando fazer uma consulta e não estou conseguindo. Se alguém pudar ajudar fico grato.
Esta é a forma correta? Ou estou errando em algo.
Estou usando Delphi XE, Firebird 2.1 e DBExpress (Trio de ferro....kkk)
Obs: nomeTabela e sufixoTabela passo os parâmetros no Active do Form.
Mesmo tirando eles para teste, não faz a consulta.
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject); var qry: TSQLQuery; begin qry.Close; qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39; qry.Open; end;
Esta é a forma correta? Ou estou errando em algo.
Estou usando Delphi XE, Firebird 2.1 e DBExpress (Trio de ferro....kkk)
Obs: nomeTabela e sufixoTabela passo os parâmetros no Active do Form.
sufixoTabela:= TES; nomeTabela:= TESTE; nomeJanela:= CADASTRO TESTE;
Mesmo tirando eles para teste, não faz a consulta.
Adilson Rumao
Curtidas 0
Respostas
Bruno Leandro
09/04/2012
tenta desta forma abaixo.
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject);
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
qry.SQLConnection := SQLConnection1;
qry.Close;
qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + QuotedStr(N) + #39;
qry.Open;
end;
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject);
var
qry: TSQLQuery;
begin
qry := TSQLQuery.Create(nil);
qry.SQLConnection := SQLConnection1;
qry.Close;
qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + QuotedStr(N) + #39;
qry.Open;
end;
GOSTEI 0
Joel Rodrigues
09/04/2012
Só explicando o código acima: como você está usando uma SQLQuery declarada em seu código, ou seja, não foi um controle adicionado ao form, você precisa INSTANCIÁ-LA antes de utilizar, ou seja:
Antes disso, a query não existe, deve acusar um erro de AccessViolation.
Boa sorte.
qry := TSQLQuery.Create(Self);
Antes disso, a query não existe, deve acusar um erro de AccessViolation.
Boa sorte.
GOSTEI 0
Adilson Rumao
09/04/2012
Devo estar fazendo algo a mais de errado.
Se uso com self:
Se uso com nil:
Não retorna erro mas, não lista nada.
Se uso com self:
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject); var qry: TSQLQuery; begin qry:= TSQLQuery.Create(self); qry.SQLConnection:= DM.SQLConexao; qry.Close; qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39; qry.Open; DS.DataSet.Open; Executar:= navegacao; Executar:= exibePanels; end;
Se uso com nil:
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject); var qry: TSQLQuery; begin qry:= TSQLQuery.Create(nil); qry.SQLConnection:= DM.SQLConexao; qry.Close; qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39; qry.Open; DS.DataSet.Open; Executar:= navegacao; Executar:= exibePanels; end;
Não retorna erro mas, não lista nada.
raised exception class TDBXError with message Token unknowm - line 1, 35 =
GOSTEI 0
Bruno Leandro
09/04/2012
voce queria que o resultado da qry saisse em um dbgrid?
GOSTEI 0
Adilson Rumao
09/04/2012
Isso mesmo, tenho no menu opções de Filtros tipo:
Produtos Ativados, Produtos Desativado, Produtos Alterador em um período etc.
Estou querendo que, ao clicar na opção abra os dados no DBGrid.
Se eu mandar abrir direto no DBGrid com DS.DataSet.Open; os dados aparecem sem problemas mas, com a consulta não.
Esta consulta tbm funciona.
Produtos Ativados, Produtos Desativado, Produtos Alterador em um período etc.
Estou querendo que, ao clicar na opção abra os dados no DBGrid.
Se eu mandar abrir direto no DBGrid com DS.DataSet.Open; os dados aparecem sem problemas mas, com a consulta não.
procedure TfrmCadPadrao.btnOkClick(Sender: TObject);
begin
if (cbxCampo.Text <> EmptyStr) and (edtValorCampo.Text <> EmptyStr) then
begin
if (rdgFiltros.ItemIndex = 0) then
begin
DS.DataSet.Filter := Upper(+ DS.DataSet.Fields[listaField[cbxCampo.ItemIndex]].FieldName +) LIKE +QuotedStr(Uppercase(edtValorCampo.Text)+%);
DS.DataSet.Filtered:= True;
if not DS.DataSet.Active then
DS.DataSet.Open;
end;
Esta consulta tbm funciona.
GOSTEI 0
Bruno Leandro
09/04/2012
é que o seu qry que está sendo criado em tempo de execução, não está ligado ao seu tdatasource (ds), pra exibir os dados acredito que antes do qry.open; voce coloque o ds.dataset := qry;
.
.
ds.dataset := qry;
qry.open;
mas não entendi direito o que voce esta fazendo, talvez esse não seja o melhor jeito.
.
.
ds.dataset := qry;
qry.open;
mas não entendi direito o que voce esta fazendo, talvez esse não seja o melhor jeito.
GOSTEI 0
Adilson Rumao
09/04/2012
Então vamos lá:
Tenho um MainMenu com as opções:
Todos os regfistros desta tabela
Registros alterados no período
Registros incluídos no período
Registros bloqueados para uso
Para mostrar todos os registros da tabela bls, dou um DS.DataSet.Open e ele lista todos.
no data módulo tenho ClienteDataSet, DataSetProvider, SqlDataSet
Inclusão, alteração, exclusão, tudo funciona.
Só nesta parte que parei e não estou conseguindo fazer funcionar.
Lembrando que tenho as variáveis globais nomeTabela e sufixoTabela declaradas.
Não sei se pode ser erro no SELECT, estou estando aqui.
Tenho um MainMenu com as opções:
Todos os regfistros desta tabela
Registros alterados no período
Registros incluídos no período
Registros bloqueados para uso
Para mostrar todos os registros da tabela bls, dou um DS.DataSet.Open e ele lista todos.
no data módulo tenho ClienteDataSet, DataSetProvider, SqlDataSet
Inclusão, alteração, exclusão, tudo funciona.
Só nesta parte que parei e não estou conseguindo fazer funcionar.
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject); var qry: TSQLQuery; begin qry:= TSQLQuery.Create(nil); qry.SQLConnection:= DM.SQLConexao; qry.Close; qry.CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39; DS.DataSet:= qry; qry.Open; //DS.DataSet.Open; Executar:= navegacao; Executar:= exibePanels; end;
Lembrando que tenho as variáveis globais nomeTabela e sufixoTabela declaradas.
Não sei se pode ser erro no SELECT, estou estando aqui.
GOSTEI 0
Bruno Leandro
09/04/2012
antes do qry.Open tenta colocar showmessage(qry.CommandText); para ver se o codigo sql esta correto, talvez tenha alguma informação sem espaço
GOSTEI 0
Adilson Rumao
09/04/2012
Está retornando a consulta SQL, testei ela no IBExpert e funciona normalmente.
select * from teste where ativo_tes=N
GOSTEI 0
Adilson Rumao
09/04/2012
Está retornando a consulta SQL, testei ela no IBExpert e funciona normalmente.
Corrgindo:
select * from teste where ativo_tes=N
Corrgindo:
select * from teste where ativo_tes=N
GOSTEI 0
Adilson Rumao
09/04/2012
Está retornando a consulta SQL, testei ela no IBExpert e funciona normalmente.
Corrgindo:
Tem aspas simples entre o N
select * from teste where ativo_tes=N
Corrgindo:
select * from teste where ativo_tes=N
Tem aspas simples entre o N
GOSTEI 0
Adilson Rumao
09/04/2012
Boa tarde a todos, usando desta forma está filtrando mas, está interferindo nas outras consultas. Não está limpando a sentença SQL depois que faço uma consulta assim:
Ele sempre fica pegando esta sentença SQl. Acredito que esta ainda não seja a forma correta.
TClientDataSet(DS.DataSet).Close; TClientDataSet(DS.DataSet).CommandText:= SELECT * FROM + nomeTabela + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39; TClientDataSet(DS.DataSet).Execute; TClientDataSet(DS.DataSet).Open;
Ele sempre fica pegando esta sentença SQl. Acredito que esta ainda não seja a forma correta.
GOSTEI 0
Bruno Leandro
09/04/2012
voce poderia deixar o sql padrão ex: select * from tabela e quando escolher as opções
Todos os regfistros desta tabela
Registros alterados no período
Registros incluídos no período
Registros bloqueados para uso
utilizar o Filter
ds.dataset.filtered := false;
ds.dataset.filter := ativo = N;
ds.dataset.filtered := true;
Todos os regfistros desta tabela
Registros alterados no período
Registros incluídos no período
Registros bloqueados para uso
utilizar o Filter
ds.dataset.filtered := false;
ds.dataset.filter := ativo = N;
ds.dataset.filtered := true;
GOSTEI 0
Adilson Rumao
09/04/2012
Valeu pela força Bruno. Consegui resolver da seguinte forma:
Criei uma TExecutar = (sentencaSQL);
E nas consultas estou usando assim:
Talvez não seja a melhor forma de se fazer mas, está funcionando de momento. Vou continuar com os testes aqui.
O uso do Filtered também não sei se está correto. Vou testando, e valeu pela força.
Criei uma TExecutar = (sentencaSQL);
{Executa Sentença SQL}
sentencaSQL:
begin
TClientDataSet(DS.DataSet).Close;
TClientDataSet(DS.DataSet).Filtered:= False;
TClientDataSet(DS.DataSet).CommandText:= strSQL;
TClientDataSet(DS.DataSet).Execute;
TClientDataSet(DS.DataSet).Open;
TClientDataSet(DS.DataSet).Filtered:= True;
TClientDataSet(DS.DataSet).First;
if(DS.DataSet.RecordCount = 0) then
begin
mensagem:= Não foi encontrado nenhum registro que + #13
+ satisfaça a sua pesquisa. ;
Application.MessageBox(PChar(mensagem),Informação,MB_OK+MB_ICONQUESTION);
end;
end;
E nas consultas estou usando assim:
procedure TfrmCadPadrao.RegistrosBloqueadosparauso1Click(Sender: TObject);
begin
strSQL:= SELECT * FROM + nomeTabela;
strSQL:= strSQL + WHERE ATIVO_ + sufixoTabela + = + #39 + N + #39;
Executar:= sentencaSQL;
Executar:= exibePanels;
Executar:= navegacao;
end;
procedure TfrmCadPadrao.TodososRegistrosdestaTabela1Click(Sender: TObject);
var
confExibe: Integer;
begin
Beep;
confExibe:= Application.MessageBox(Você optou por exibir todos os registros. + #13
+ Tenha em mente que, isso demanda muito processamento. + #13
+ Deseja continuar mesmo assim?, Atenção,
MB_YESNO+MB_DEFBUTTON2+MB_ICONQUESTION);
if confExibe = IDYES then
begin
strSQL:= SELECT * FROM + nomeTabela;
Executar:= sentencaSQL;
Executar:= exibePanels;
Executar:= navegacao;
end
else
begin
DS.DataSet.Close;
Executar:= navegacao;
end;
end;
Talvez não seja a melhor forma de se fazer mas, está funcionando de momento. Vou continuar com os testes aqui.
O uso do Filtered também não sei se está correto. Vou testando, e valeu pela força.
GOSTEI 0