Colsuta no delphi
O que esta errado nesse codigo?
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.
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
Curtidas 0
Respostas
Reginaldo174
01/11/2004
Informe qual a mensagem de erro !
GOSTEI 0
_celo
01/11/2004
Naum informa nenhum erro na compilação.
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.
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
Rafs
01/11/2004
Falta um espaço após a palavra ´matricula´
A sua instrução está sendo enviada assim para o componente
faça assim
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:
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
_celo
01/11/2004
Valew cara, esta parte ficou legal mas tem mas um pro quando coloco um codigo ´matricula´ existente ele axa.
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.
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
Rafs
01/11/2004
Estava reolhando o seu código e creio que você se esqueceu de colocar uma linha... Quando você encerra a instrução [b:83fc28fc95]try[/b:83fc28fc95], na linha seguinte existe um [b:83fc28fc95]begin[/b:83fc28fc95], sería um [b:83fc28fc95]if[/b:83fc28fc95] na linha imediatamente anterior ao [b:83fc28fc95]begin[/b:83fc28fc95]?
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.
Acredito que isto resolva, mas caso ainda persista o problema, estarei a disposição
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
_celo
01/11/2004
Esta consultando. mas ainda da um erro ´Cursor Unknwown´
Tem como vc me mostra como coloco o resultado da consulta em num
DBgrid.
Agradeço desde já
:)
Tem como vc me mostra como coloco o resultado da consulta em num
DBgrid.
Agradeço desde já
:)
GOSTEI 0
Rafs
01/11/2004
Adicione um DBGrid e um DataSorce ao formulário.
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
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
_celo
01/11/2004
Rafs
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á
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
Rafs
01/11/2004
Rafs
Operation not allowed on a unidirectional dataset.
Amigo,
Diga-me quais os componentes que vc está utilizando, seríam os componentes da palheta IBExpress?
GOSTEI 0
_celo
01/11/2004
Os componentes que tou usando é o da paleta dbExpress. e o Datasource da paleta Data Access
GOSTEI 0
Horus
01/11/2004
Pode parecer bobagem mas, tenho que dizer...
Você declarou a variável como ´consultar´ e está usando ela como ´consulta´.
Ou então tenta assim:
Espero ter ajudado.
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
Vinicius2k
01/11/2004
Os componentes que tou usando é o da paleta dbExpress. e o Datasource da paleta Data Access
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
_celo
01/11/2004
horus valew cara pela dica. Quando fui rodar descobrir mas mesmo assim valew. :)
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
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
Vinicius2k
01/11/2004
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.
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
_celo
01/11/2004
Valeu cara funcionou legal.
:)
:)
GOSTEI 0