Parametros com CDS
olha só meu problema, estou usando um ClientDataSet para fazer select mim trazer resultados baseados nas informaçoes de alguns paramentros, vejam , estou usando cada consulta em um botão diferente:
e no outro:
quando executo qualquer uma das consultas acima dar tudo normal mas quando tento executar a outra consulta, dar um erro ´ Parameter not found ´
O q será que não estou fechando galera?
procedure TFrmMatriculas.BitBtn1Click(Sender: TObject);
begin
with DmConsultas.CDS_Consulta do
begin
Close;
Params.Clear;
CommandText:=´´;
CommandText:=´Select COD_ALUN, NOME_ALUNO, CURSO, SERIE, TURMA, TURNO, ´+
´SEXO, DATA_NASCIMENTO, NATURALIDADE, ESTADO_NATURALIDADE, ´+
´NACIONALIDADE, ESCOLA_ANTERIOR, CIDADE_ESCO_ANT, ESTADO_ESCO_ANT, ´+
´UF_ESCO_ANT, NOME_PAI, NOME_MAE, NOME_RESP, SITUACAO_ALUNO from ALUNOS where ´+
´SERIE = :Serie and ´+
´TURMA = :Turma and ´+
´TURNO = :Turno and ´+
´SITUACAO_ALUNO = :Situacao´;
FetchParams;
Params.ParamByName(´Serie´).AsString:= CBox_Serie.Text;
Params.ParamByName(´Turma´).AsString:= CBox_Turma.Text;
Params.ParamByName(´Turno´).AsString:= CBox_Turno.Text;
Params.ParamByName(´Situacao´).AsString:= ´PRÉ-MATRICULADO´;
Open;
end;
end;
e no outro:
with DmConsultas.CDS_Consulta do
begin
Close;
Params.Clear;
CommandText:=´´;
CommandText:=´Select COD_ALUN, NOME_ALUNO, CURSO, SERIE, TURMA, TURNO, ´+
´SEXO, DATA_NASCIMENTO, NATURALIDADE, ESTADO_NATURALIDADE, ´+
´NACIONALIDADE, ESCOLA_ANTERIOR, CIDADE_ESCO_ANT, ESTADO_ESCO_ANT, ´+
´UF_ESCO_ANT, NOME_PAI, NOME_MAE, NOME_RESP, SITUACAO_ALUNO from ALUNOS where ´+
´CURSO = :Curso and ´+
´SITUACAO_ALUNO = :Situacao´;
Params.Clear;
FetchParams;
Params.ParamByName(´Curso´).AsString:= CBox_Curso.Text;
Params.ParamByName(´Situacao´).AsString:= ´PRÉ-MATRICULADO´;
Open;
end;
quando executo qualquer uma das consultas acima dar tudo normal mas quando tento executar a outra consulta, dar um erro ´ Parameter not found ´
O q será que não estou fechando galera?
Erivando
Curtidas 0
Respostas
Emerson Nascimento
06/01/2007
exclua as linhas onde você tem FetchParams e Params.Clear
nessa instrução não há necessidade do FetchParams e nem do Params.Clear, porque você está criando esses parâmetros, e não trazendo do dataset principal.
e no outro:
e nesse outro você criava os parametros - na instrução - e depois excluía-os, com o Params.Clear.
procedure TFrmMatriculas.BitBtn1Click(Sender: TObject); begin with DmConsultas.CDS_Consulta do begin Close; CommandText := ´Select COD_ALUN, NOME_ALUNO, CURSO, SERIE, TURMA, TURNO, ´+ ´SEXO, DATA_NASCIMENTO, NATURALIDADE, ESTADO_NATURALIDADE, ´+ ´NACIONALIDADE, ESCOLA_ANTERIOR, CIDADE_ESCO_ANT, ESTADO_ESCO_ANT, ´+ ´UF_ESCO_ANT, NOME_PAI, NOME_MAE, NOME_RESP, SITUACAO_ALUNO ´+ ´from ALUNOS where ´+ ´SERIE = :Serie and ´+ ´TURMA = :Turma and ´+ ´TURNO = :Turno and ´+ ´SITUACAO_ALUNO = :Situacao´; Params.ParamByName(´Serie´).AsString := CBox_Serie.Text; Params.ParamByName(´Turma´).AsString := CBox_Turma.Text; Params.ParamByName(´Turno´).AsString := CBox_Turno.Text; Params.ParamByName(´Situacao´).AsString := ´PRÉ-MATRICULADO´; Open; end; end;
e no outro:
with DmConsultas.CDS_Consulta do begin Close; CommandText := ´Select COD_ALUN, NOME_ALUNO, CURSO, SERIE, TURMA, TURNO, ´+ ´SEXO, DATA_NASCIMENTO, NATURALIDADE, ESTADO_NATURALIDADE, ´+ ´NACIONALIDADE, ESCOLA_ANTERIOR, CIDADE_ESCO_ANT, ESTADO_ESCO_ANT, ´+ ´UF_ESCO_ANT, NOME_PAI, NOME_MAE, NOME_RESP, SITUACAO_ALUNO ´+ ´from ALUNOS where ´+ ´CURSO = :Curso and ´+ ´SITUACAO_ALUNO = :Situacao´; Params.ParamByName(´Curso´).AsString:= CBox_Curso.Text; Params.ParamByName(´Situacao´).AsString:= ´PRÉ-MATRICULADO´; Open; end;
GOSTEI 0
Erivando
06/01/2007
Obrigado emerson.en pela ajuda mas...
eu somente retirei o
mas porque não precisa do FetchParams? , já que eu eu estou criando tando a consulta quanto os parametros em tempo de execução!!!?
eu somente retirei o
// FetchParams;
nas duas consultas ACIMA e deu tudo certo, então ficou assim:with DmConsultas.CDS_Consulta do
begin
Close;
Params.Clear;
CommandText:=´´;
CommandText:=´Select ....´;
Params.ParamByName(´....´).AsString:= ´.,.´;
Open;
edn;
mas porque não precisa do FetchParams? , já que eu eu estou criando tando a consulta quanto os parametros em tempo de execução!!!?
GOSTEI 0
Emerson Nascimento
06/01/2007
só pra constar:
[b:bbcd966c13]Params.Clear é desnecessário[/b:bbcd966c13], pois quando você altera o commandtext, os parâmetros são excluídos e recriados automaticamente conforme a instrução do commantext.
[b:bbcd966c13]CommandText:=´´ é redundante[/b:bbcd966c13], pois quando você altera o commandtext, o novo valor já é assumido, sem necessidade de excluir o conteúdo anterior. imagine uma variável numérica, de nome [i:bbcd966c13]valor[/i:bbcd966c13], com conteúdo 25. daí você quer alterar esse conteúdo da variável para 55.
você faz simplesmente [i:bbcd966c13]valor := 55[/i:bbcd966c13]:
valor := 25;
//novo valor
valor := 55;
e não:
valor := 25;
//novo valor
valor := 0; // isso é tão desnecessário quanto CommandText:=´´
valor := 55;
e, quanto à sua pergunta:
FetchParams serve para restaurar os parâmetros do provider ligado ao clientdataset. como a sua instrução é montada diretamente no clientdataset, esse método não deve ser usado.
[b:bbcd966c13]Params.Clear é desnecessário[/b:bbcd966c13], pois quando você altera o commandtext, os parâmetros são excluídos e recriados automaticamente conforme a instrução do commantext.
[b:bbcd966c13]CommandText:=´´ é redundante[/b:bbcd966c13], pois quando você altera o commandtext, o novo valor já é assumido, sem necessidade de excluir o conteúdo anterior. imagine uma variável numérica, de nome [i:bbcd966c13]valor[/i:bbcd966c13], com conteúdo 25. daí você quer alterar esse conteúdo da variável para 55.
você faz simplesmente [i:bbcd966c13]valor := 55[/i:bbcd966c13]:
valor := 25;
//novo valor
valor := 55;
e não:
valor := 25;
//novo valor
valor := 0; // isso é tão desnecessário quanto CommandText:=´´
valor := 55;
e, quanto à sua pergunta:
FetchParams serve para restaurar os parâmetros do provider ligado ao clientdataset. como a sua instrução é montada diretamente no clientdataset, esse método não deve ser usado.
GOSTEI 0
Erivando
06/01/2007
blz emerson, valeu a força!
GOSTEI 0