Colsuta no delphi

Delphi

01/11/2004

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.


_celo

_celo

Curtidas 0

Respostas

Reginaldo174

Reginaldo174

01/11/2004

Informe qual a mensagem de erro !


GOSTEI 0
_celo

_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.


GOSTEI 0
Rafs

Rafs

01/11/2004

Falta um espaço após a palavra ´matricula´
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

_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.


GOSTEI 0
Rafs

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.
  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

_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á
:)


GOSTEI 0
Rafs

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


GOSTEI 0
_celo

_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á


GOSTEI 0
Rafs

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

_celo

01/11/2004

Os componentes que tou usando é o da paleta dbExpress. e o Datasource da paleta Data Access


GOSTEI 0
Horus

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:

consulta := ´select matricula, nome from alunos´;
consulta := ´ where matricula like´ + #39 + ´¬´ + EdtConsulta.Text + ´¬´+ 39;


Espero ter ajudado.


GOSTEI 0
Vinicius2k

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

_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


GOSTEI 0
Vinicius2k

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

_celo

01/11/2004

Valeu cara funcionou legal.
:)


GOSTEI 0
POSTAR