Bom Dia 
Inverta a ordem da instruções
 
 
--------- Primeiro adicione o comando SQL
  Query := 'select nome from cliente,ClienteConta '+
           'where Cliente.cdCliente = ClienteConta.cdCliente and '+
           'ClienteConta.idCartao = :id';
 
 
--------- Depois teste o Parâmetro ele cria automaticamente
 
  //Adiciona um novo parametro a lista de parametros da query caso nao haja  
nenhum
  with ModuloDados.DataModulePrototipo.ADOQuery1.Parameters do
  begin
    if Count = 0 then // Nesse momento o parâmetro já deve existir com as 
propriedades já definidas
      AddParameter;
  end;

  //inicializa as variaveis de configuração do novo parametro
  with ModuloDados.DataModulePrototipo.ADOQuery1.Parameters.Items[0]  do
  begin
    DataType := ftInteger;
    Direction := pdInput;
    name:= 'id';
    Value:= idCartao;
  end;


Elcio Domingos Ramos <mailto:[EMAIL PROTECTED]> 
DEMAG Cranes & Components Ltda.
Planejamento Industrial 
Fone: (11)2145-7823 - Fax : (11)2145-7910
 
-----Mensagem original-----
De: Sinaide Júnior [mailto:[EMAIL PROTECTED]
Enviada em: sexta-feira, 18 de março de 2005 00:08
Para: delphi-br@yahoogrupos.com.br
Assunto: [delphi-br] Erro inexplicavel - comonente ADOQuery
 

Caros colegas,
  Meu nome é Sinaide Jr. e acabo de ser integrado a lista. 
  Estou desenvolvendo um pequeno sistema e utilizo componentes ADO para acesso 
a banco de dados. Na utilização especificamente do componente ADOQuery tem 
acontecido algo que nao consigo entender. Criei um procedimento em que adiciono 
(em RunTime) um objeto Parameter na Coleção Parameters do referido Componente e 
"seto" as senguintes propriedades como indicado abaixo:

    DataType := ftInteger;
    Direction := pdInput;
    name:= 'id';
    Value:= idCartao;

Em seguida Insiro a String contendo o código SQL (uma consulta) à propriedade 
SQL do componente ADOQuery atraves do método append, e em seguida ativo este 
componente atraves do metodo open. Feito isso acesso normalmente os campos do 
resultSet com os dados resultantes da consulta, faço o que tenho que fazer com 
eles, fecho o ADOQuery  através do médoto close e em seguida deleto o parametro 
da coleção Paramerters (que utilizei na consulta) atraves do método Clear. 

Se eu chamar este mesmo procedimento uma segunda vez passando os mesmos valores 
como parametro, o ambiente aborta o programa e retorna  seguinte mensagem:
Objeto Parameter definido incorretamente. As informações são incosistente ou 
incompletas. 

É engraçado porque os passos do procedimento são extamente os mesmos e este 
funciona na primeira vez em que é chamado mas nao na segunda.
Será que estou fazendo algo errado ou me esquecendo. Se o parametro foi esta 
definido incorretamente, porque funciona na primeira vez então? Existe algo que 
deve ser destruido, ou desativado para utilizar o objeto ADOQuery mais uma vez? 
Para nao deixar duvidas do que estou fazendo, mando o código do famigerado 
procedimento abaixo:

Function TPersistencia.makeCliente(var idCartao:integer; var 
cliente:TCliente):integer;
var
query:String;

begin
  //Adiciona um novo parametro a lista de parametros da query caso nao haja  
nenhum
  with ModuloDados.DataModulePrototipo.ADOQuery1.Parameters do
  begin
    if Count = 0 then
      AddParameter;
  end;
  //inicializa as variaveis de configuração do novo parametro
  with ModuloDados.DataModulePrototipo.ADOQuery1.Parameters.Items[0]  do
  begin
    DataType := ftInteger;
    Direction := pdInput;
    name:= 'id';
    Value:= idCartao;
  end;
  Query := 'select nome from cliente,ClienteConta '+
           'where Cliente.cdCliente = ClienteConta.cdCliente and '+
           'ClienteConta.idCartao = :id';
  with ModuloDados.DataModulePrototipo do
  begin
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Append(Query);  //Adiciona String de consulta
    ADOQuery1.Open;   //na segunda chamada o programa para aqui!

    if ADOQuery1.RecordCount < 0 then
      ShowMessage('Erro no acesso a query Conta em makeCliente.') //ERRO
    else if ADOQuery1.RecordCount = 0 then
           Result := 0 //Cliente não encontrado
         else begin
                Cliente.setNome(ADOQuery1['nome']);
                Result := 1;
              end;//if
    ADOQuery1.Close;
    ADOQuery1.Parameters.Clear;
  end;//with
end; 


Será que alguém pode me ajudar? Estou desesperado com este bug. Desde ja 
agradeço a atenção e a ajuda de todos.
Um abraço.
Sinaide Jr.

            
---------------------------------
Yahoo! Mail - Com 250MB de espaço.  Abra sua conta!

[As partes desta mensagem que não continham texto foram removidas]






-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED] ou [EMAIL PROTECTED]






Yahoo! Grupos, um serviço oferecido por:




  <http://br.i1.yimg.com/br.yimg.com/i/br/ads4/2309_lrec_yshopping2.gif> 


  
<http://br.rd.yahoo.com/SIG=12ansofna/M=264105.3931087.6562589.1588051/D=brclubs/S=2137111264:HM/EXP=1111319337/A=2361264/R=6/SIG=10v4acpp0/*http://br.shopping.yahoo.com/>
 

 
 
  _____  

Links do Yahoo! Grupos
*         Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
  
*         Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> 
  
*         O uso que você faz do Yahoo! Grupos está sujeito aos Termos do 
<http://br.yahoo.com/info/utos.html>  Serviço do Yahoo!. 


[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

Para ver as mensagens antigas, acesse:
 http://br.groups.yahoo.com/group/delphi-br/messages

Para falar com o moderador, envie um e-mail para:
 [EMAIL PROTECTED] ou [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a