Erro no Select do IBDataSet

Delphi

10/05/2006

Boa noite pessoal ....como eu faço para essa procedure funcionar ....estou usando D7 e interbase..a minha tabela eh a seguinte
Codigo integer Nome varchar Endereco varchar Portugues integer Matematica integer Ingles integer

Quer dizer parte dela neh

eu tenho um sisteminha que faz o cadastro dos alunos e a pesquisa.....dai eu quero saber apenas os que fazem matematica e portugues dai eu vou na parte de pesquisa e tico no combobox matematica e portugues
sendo que 1 eh ticado e 0 e sem o tic

e a minha procedure eh a seguinte

procedure TFormCadastro.BitBtn1Click(Sender: TObject); Var Mat, Port, Ing: integer; begin IBDataSet1.ClearFields; IBDataSet1.Close; IF cbMat.Checked = True then Mat:= 1 else Mat:= 0; IF cbPort.Checked = True then Port:= 1 else Port:= 0; IF cbIng.Checked = True then Ing:= 1 else Ing:= 0; IBDataSet1.ParamByName(´mat´); IBDataSet1.ParamByName(´port´); IBDataSet1.ParamByName(´ing´); IBDataSet1.SelectSQL.Add(´Select * from ficha where MATEMATICA = :mat and PORTUGUES = :port and INGLES = :ing´); IBDataSet1.ExecSQL; IBDataSet1.Open; if IBDataSet1.RecordCount=0 then Begin ShowMessage(´Nenhum aluno foi encontrado com esses dados!´); abort; End;


dah o seguinte erro
Field mat not found


Sendo que as Variaveis Mat Port e Ing eu quero passar como parametro para o Select

oque eu preciso fazer para issu funcionar.....vlw pessoal ...obrigado por enquanto


$grandaum$

$grandaum$

Curtidas 0

Respostas

Rafaela.campos

Rafaela.campos

10/05/2006

Então, no caso a definição dos parametros tem q vir depois da definição da SQL, e, vc não precisa de:
IBDataSet1.ClearFields;

outra coisa use a propriedade Text ao invés do método Add, pelo seguinte fato: se ja existir algo na propriedade SelectSQL o método Add adicionará a nova cláusula à ja existente, enquanto a propriedade Text substituirá o conteúdo, desta forma seu código ficaria assim:

IBDataSet1.SelectSQL.Text:=´Select * from ficha where MATEMATICA = :mat and PORTUGUES = :port and INGLES = :ing´;

//definição dos parametros como inteiros referenciando as variaveis
//criadas na procedure

IBDataSet1.ParamByName(´mat´).AsInteger:=Mat;
IBDataSet1.ParamByName(´port´).AsInteger:=Port;
IBDataSet1.ParamByName(´ing´).AsInteger:=Int;

IBDataSet1.Open;

-------

Ah, e como vc está trazendo resultados de dados do banco e não executando operações de alteração use somente o Open sem : IBDataSet1.ExecSQL;

Espero ter ajudado

Att.


GOSTEI 0
$grandaum$

$grandaum$

10/05/2006

Legal funcionou ...mas ele naum tah mostrando no dbgrid..e agora?
vlw pela força ai hein Rafaela


GOSTEI 0
Rogerio_amorim

Rogerio_amorim

10/05/2006

$Grandaum$ ,

Esse seu select é editável ? caso não for , vc deveria simplesmente usar um ibquery junto com um datasource e apontar o dbgrid para o datasource. Mas se for editável vc deve saber que é necessário acessar o dataset editor do componente ibdataset e proceder as configurações para que funcione.


Rogerio Amorim


GOSTEI 0
$grandaum$

$grandaum$

10/05/2006

Obrigado a todos....meu problema foi resolvido ...muito obrigado


GOSTEI 0
POSTAR