Fórum Colsuta no delphi #256782
01/11/2004
0
Alguem poderia me ajudar.
procedure TForm2.BtnConsultaClick(Sender: TObject);
var
Consultar: string;
begin
Consulta := ´select Matricula,nome from alunos where ´;
consulta := consulta+´matricula´+´like ´´¬´ + EdtConsulta.Text + ´´´´;
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DM.SQLConnection1.StartTransaction(Transacao);
DM.SQLQueryConsulta.Close;
DM.SQLQueryConsulta.SQL.Clear;
DM.SQLQueryConsulta.SQL.Append(Consultar);
DM.SQLQueryConsulta.Open;
DM.SQLConnection1.Commit(Transacao);
except
on Exc:Exception do
begin
ShowMessage(´Ocorreu um erro na consulta: ´ + Exc.Message);
DM.SQLConnection1.Rollback(Transacao);
end;
end;
begin
DM.SQLQueryConsulta.First;
ListView1.Items.Clear;
while true do
begin
ListView1.Items.Add;
ListView1.Items.Item[ ListView1.Items.Count - 1 ].Caption := DM.SQLQueryConsulta.Fields.Fields[0].AsString;
ListView1.Items.Item[ ListView1.Items.Count - 1 ].SubItems.Add(DM.SQLQueryConsulta.Fields.Fields[1].AsString);
try
DM.SQLQueryConsulta.Next;
except
break;
end;
end;
end;
end;
end.
_celo
Curtir tópico
+ 0Posts
01/11/2004
Reginaldo174
Gostei + 0
01/11/2004
_celo
Mas quando ta executando da dois erros :
Quando eu coloco pra consulta o codigo ´001´
Ocorreu um erro na consulta: Token unknown -line 1, char 55 001
e depois
SQLQueryConsulta: Cannot perform this operation on a closed dataset.
Gostei + 0
01/11/2004
Rafs
A sua instrução está sendo enviada assim para o componente
select Matricula,nome from alunos where matriculalike´¬blablabla´
faça assim
Consulta := ´select Matricula,nome from alunos where ´; consulta := consulta+´matricula like ´´¬´ + EdtConsulta.Text + ´´´´;
Apesar de que não tenho mais o costume de utilizar aspas duplas no código para que o componente entenda que está sendo enviada uma string. Hj utilizo a função QuotedStr(), isto porque, além do código ficar mais claro e limpo, tive alguns problemas com o Delphi7 e Firebird.
Neste caso seu código ficaría assim:
Consulta := ´select Matricula,nome from alunos where ´; consulta := consulta+´matricula like ´+QuotedStr(´¬´ + EdtConsulta.Text);
Gostei + 0
01/11/2004
_celo
Mas quando coloco um código que nao existem o ListView1 cria uma barra
de rolagem e o programa trava. Parece que ele fica procurando algo.
Gostei + 0
01/11/2004
Rafs
O problema que você deve estar tendo é pq vc força a Query a se posicionar no próximo registro e caso haja algum erro encerrar o while.
Mude o código [b:83fc28fc95]while[/b:83fc28fc95] para o código abaixo e veja se funciona.
while not DM.SQLQueryConsulta.Eof do begin ListView1.Items.Add; ListView1.Items.Item[ListView1.Items.Count - 1].Caption := DM.SQLQueryConsulta.Fields.Fields[0].AsString; ListView1.Items.Item[ListView1.Items.Count - 1].SubItems.Add(DM.SQLQueryConsulta.Fields.Fields[1].AsString); DM.SQLQueryConsulta.Next; end;
Acredito que isto resolva, mas caso ainda persista o problema, estarei a disposição
Gostei + 0
01/11/2004
_celo
Tem como vc me mostra como coloco o resultado da consulta em num
DBgrid.
Agradeço desde já
:)
Gostei + 0
01/11/2004
Rafs
Na propriedade [b:e2d1d67c8e]DataSource[/b:e2d1d67c8e] do DBGrid, clique na seta para baixo e selecione o DataSource que acabou de colocar no form.
Na propriedade [b:e2d1d67c8e]DataSet[/b:e2d1d67c8e] do DataSource, clique na seta para baixo e selecione o SQLQueryConsulta que está no DM.
Mas para que o DataSource enxergue a SQLQueryConsulta você precisa adicionar o DM à clausula uses do seu formulário, onde se encontra o DataSource.
Ao abrir o SQLQueryConsulta, irá apresentar os dados no DBGrid
Gostei + 0
01/11/2004
_celo
quando eu coloco pra consultar ele aparece o seguinte erro:
Ocorreu um erro na consulta:
Operation not allowed on a unidirectional dataset.
agradeço desde já
Gostei + 0
02/11/2004
Rafs
Amigo,
Diga-me quais os componentes que vc está utilizando, seríam os componentes da palheta IBExpress?
Gostei + 0
03/11/2004
_celo
Gostei + 0
03/11/2004
Horus
Você declarou a variável como ´consultar´ e está usando ela como ´consulta´.
Ou então tenta assim:
consulta := ´select matricula, nome from alunos´; consulta := ´ where matricula like´ + #39 + ´¬´ + EdtConsulta.Text + ´¬´+ 39;
Espero ter ajudado.
Gostei + 0
03/11/2004
Vinicius2k
Colega,
O dbExpress é unidirecional, logo, vc não pode ligar um DataSet ou Query diretamente em componenentes que exigem navegação bidirecional... vc precisará utilizar a midas (TDataSetProvider e TClientDataSet) para ter sucesso...
Veja este tópico com os esquemas de ligação disponíveis :
http://delphiforum.icft.com.br/forum/viewtopic.php?t=51337
Espero ter ajudado...
T+
Gostei + 0
03/11/2004
_celo
vinivius, obrigado, agora conectou legal. muito obrigado pela dica cara!
Se num for muito incomodo teria como vc me falar como faço para limpar o dbGrid. Pois faço um consulta e queria quando apertasse um botão limpar o bdGrid.
valewwww
Gostei + 0
03/11/2004
Vinicius2k
Seu botão deve chamar o método Close do ClientDataSet que a DBGrid está ligada.
ClientDataSet1.Close;
Só uma observação :
Quando se trabalha com a Midas, os métodos Open e Close, ou o set da propriedade Active:= True ou False, devem ser executados apenas no ClientDataSet... vc pode deixar a o DataSet ou Query, inativos e não é necessário aplicar estes métodos sobre ele...
T+
Gostei + 0
03/11/2004
_celo
:)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)