Fórum Execução de SqlQuery Dinâmica #227321
21/04/2004
0
estou tendo problemas durante a execução de uma SqlQuery Dinâmica. eu crio esta query em tempo de execução no OnExite de um DBEdit. Os códigos estão abaixo para serem analisados, mas infelizmente não está dando certo.
-----
procedure TFClasse.DBEdit1Exit(Sender: TObject);
var QVerifica:TSQLQuery;
begin
QVerifica:=TSQLQuery.Create(Self);
QVerifica.SQLConnection:=dm.SQLConnec;
QVerifica.Active:=True;
with QVerifica do
begin
close;
SQL.Clear;
SQL.Add(´select cod_classe from classe where cod_classe= :cod´);
ParamByName(´cod´).AsString:=dm.CDSClasseCOD_CLASSE.AsString;
PrepareStatement;
open;
if recordcount>0
then begin
MessageBeep(MB_ICONASTERISK);
Application.MessageBox(´Código para classe já cadastrado!´,´Informação do Sistema´,MB_OK);
DBEdit1.SetFocus;
DBEdit1.Clear;
end;
end;
QVerifica.Destroy();
inherited;
end;
----------
Erro apresentado durante a execução, ao sair do DBEdit.:
´Missing Query,Table name or procedure name´.
-------------------
Este erro diz que falta na Query o nome da tabela ou da procedure, mas eu não consegui descobrir qual proprie-
dade que deve ser configura, o porjeto compila normalmente, o erro ocorre durante a execução. Para fazer uma analogia e verificar se apresentava o mesmo erro, eu coloquei no
DataModule uma SQLQuery,um DataSetProvider e um ClientDataSet, um vinculado ao outro da forma que deve ser, pa-
ra que eu pudesse utulizar esta query para as verificações de rotina, como verificar se já há um determinado
código gravado, por exemplo, haja vista a query principal estar em modo de inserção e não poder fazer este
papel, mas infelizmente, apresentou também o mesmo erro.Se alguém souber onde está o erro na criação desta
Query em tempo de execução por favor me responda, pois estou precisando urgentemente de uma resposta
Ricardo Giordano
Curtir tópico
+ 0Posts
21/04/2004
Fabio.hc
Vc colocando um edit, vc altere esta linha.
...
ParamByName(´cod´).AsString:=edit1.text;
...
Gostei + 0
21/04/2004
Ricardo Giordano
Gostei + 0
21/04/2004
Vinicius2k
Existe um erro principal que está causando seu problema...
Vc estah ativando a query sem uma instrução SQL... lembre-se Active:= True eh equivalente ao método Open...
Mas tbm existem 2 outros problemas q mesmo após retirar esta linha vc vai encontrar... PrepareStatement e RecordCount...
Estes dois métodos não podem ser usados... abaixo as razões :
Seu código seria então (um pouco otimizado tbm) :
procedure TForm1.DBEdit1Exit(Sender: TObject); var QVerifica: TSQLQuery; begin QVerifica:=TSQLQuery.Create(Self); QVerifica.SQLConnection:= SQLConnection1; with QVerifica do begin SQL.Add(´select COD_CLASSE from CLASSE where COD_CLASSE = :cod´); ParamByName(´cod´).AsString:=dm.CDSClasseCOD_CLASSE.AsString; Prepared:= True; Open; if QVerifica.FieldByName(´COD_CLASSE´).AsString = dm.CDSClasseCOD_CLASSE.AsString then begin MessageBeep(MB_ICONASTERISK); Application.MessageBox(´Código para classe já cadastrado!´,´Informação do Sistema´,MB_OK); DBEdit1.SetFocus; DBEdit1.Clear; end; end; QVerifica.Free; end;
Espero ter ajudado...
Gostei + 0
21/04/2004
Vinicius2k
QVerifica.SQLConnection:= SQLConnection1;
Leia-se :
QVerifica.SQLConnection:=dm.SQLConnec;
Esqueci de adaptar este trecho do exemplo que montei para o seu código... :oops:
Gostei + 0
22/04/2004
Ricardo Giordano
Gostei + 0
22/04/2004
Ricardo Giordano
Valeu mesmo pela dica. Apenas tive que fazer uma alteração nos códigos que vc me enviou. A alteração foi a seguinte:
onde se lê:
if QVerifica.FieldByName(´COD_CLASSE´).AsString = dm.CDSClasseCOD_CLASSE.AsString
then begin
.
.
.
end;
Leia-se:
if Fields[0].AsString<>´´
then begin
.
.
.
end;
Esta alteração foi necessária pelo fato da confição (if) não estar sendo executada, mesmo quando existir algum registro com já cadastrado com um código que estamos tentando inserir novamente.
Obrigado camarada!!
Gostei + 0
22/04/2004
Vinicius2k
Mas o que importa eh q vc solucionou... na verdade acho q a condição é a parte menos importante da rotina visto que a query ou retorna 1 registro ou retorna vazia... inclusive, sua solução ficou melhor...
T+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)