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