Array
(
)

passar valor para parametro em instrucao SQL

Joe_wah
   - 12 jan 2006

No codigo abaixo eu pretendia que a variavel ´varcodigo´ fosse passada para o para o parametro ´c_varcodigo´ da instrucao SQL, mas isso nao esta acontecendo.O codigo esta plenamente funcional só nao consigo passar o valor para a instrucao SQL.O que estou fazendo de errado?


varcodigo := DataModule1.ClientDataSet1.FieldValues[´CODIGO´];
DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_varcodigo);
DataModule1.SQLDataSet2.ParamByName(´c_varcodigo´).asinteger := varcodigo;
DataModule1.SQLDataSet2.ExecSQL;


Eixox
   - 12 jan 2006

#Código


varcodigo := DataModule1.ClientDataSet1.FieldValues[´CODIGO´];
DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_varcodigo);
DataModule1.SQLDataSet2.ParamByName(´c_varcodigo´).asinteger := varcodigo;
DataModule1.SQLDataSet2.ExecSQL;


function TForm1.Teste: Integer;
var
Codigo : Integer;
Varr : Integer;
begin
SQLDataSet1.Active := False;
Codigo := SQLDataSet2.FieldValues[´CODCLI´];
SQLDataSet1.CommandText := ´´;
SQLDataSet1.CommandText := ´Select * from clientes where codcli = :pcodigo´;
SQLDataSet1.ParamByName(´pcodigo´).AsInteger := Codigo;
SQLDataSet1.Active := True;
Varr := SQLDataSet1CODCLI.Value;
Result := Varr;
end;

Eu fiz uma função e retornou corretamente o resultado. Bem verifique se o valor que está sendo atribuído a sua primeira variável corresponde exatamente ao tipo ou tente deixar o seu código mais ou menos igual a minha função que obrigatoriamente tem que funcionar.


Joe_wah
   - 12 jan 2006

Valeu, eu acabei de fazer um teste e descobri q esta funcionando no sentido de que o valor esta sendo passado(ao menos quando nao uso a variavel) mas aparentemente a instrucao SQL nao esta funcionando, nada aocorre, mas se eu subtituo por um valor fixo ela funciona, veja, isso funciona:

DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_varcodigo´;
DataModule1.SQLDataSet2.ParamByName(´c_varcodigo´).asinteger := 34;

Mas isso abaixo nao funciona ( e posso dar certeza que a variavel ´varcodigo´ esta com o valor certo que deveria), a unica diferenca é q mudie o 34 para variavel varcodigo

DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_varcodigo´;
DataModule1.SQLDataSet2.ParamByName(´c_varcodigo´).asinteger := varcodigo;


Joe_wah
   - 12 jan 2006

fiz outros testes e decobri q esta tudo funcionando PORÈM esse codigo é chamado sempre q um evento ocorre mas ele só esta sendo execuatdo na primeira vez q o evento ocorre, depois não funciona mais!!!!!!!!!!!!


Eixox
   - 13 jan 2006

Acho então que está faltando você ativar e desativar a sua consulta não.

Mande na íntegra o seu código para que eu possa ver o que você está fazendo.


Martins
   - 13 jan 2006

tente assim, se bem q o resultado deveria ser o esperado.

#Código



varcodigo := DataModule1.ClientDataSet1.FieldByName(´CODIGO´).AsInteger;

DataModule1.SQLDataSet2.CommandText := ´SELECT * FROM HISTORICO_PACIENTES WHERE CODIGO=:c_varcodigo´;

DataModule1.SQLDataSet2.ParamByName(´c_varcodigo´).asinteger := varcodigo;

DataModule1.SQLDataSet2.ExecSQL;



Ou então post o q foi pedido pelo eixox!!