Problemas com ADO

Delphi

30/03/2005

No Interbase utilizo a expressão abaixo:

Query.ParamByName(´CAMPO´).Value;

Como faria isso no ADO?????


Emir Neto

Emir Neto

Curtidas 0

Respostas

Rjun

Rjun

30/03/2005

Query.Parameters.ParamByName(´CAMPO´).Value;

Rogério


GOSTEI 0
Rômulo Barros

Rômulo Barros

30/03/2005

ADOQuery1.Parameters.ParamByName(´CAMPO´).Value


_____________________________________________
[b:8649918e12][color=blue:8649918e12]Utilize a Ferramenta de Pesquisa do Fórum[/color:8649918e12][/b:8649918e12]

Pesquisar pelos termos
_____________________________________________
[b:8649918e12]Veja como[url=http://forum.clubedelphi.net/viewtopic.php?t=16976] OBTER RESPOSTAR RÁPIDAS[/url][/b:8649918e12]
[b:8649918e12]Veja as novas [url=http://forum.clubedelphi.net/viewtopic.php?t=59817]MUDANÇAS NA ESTRUTURA[/url] do site[/b:8649918e12]
[b:8649918e12]Leia sempre as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]REGRAS DE CONDUTA[/url][/b:8649918e12]


GOSTEI 0
Emir Neto

Emir Neto

30/03/2005

Meu problema é este:
qryAccess.Parameters.ParamByName(´P_DESCRICAO´).Value := qryTransfere.FieldByName(´DESCRICAO´).Value;


a resposta que obtenho é que o campo p_descricao não foi encontrado, mas o mesmo é um parâmetro que existe.


GOSTEI 0
Rjun

Rjun

30/03/2005

Você criou o parâmetro ? Como que está o código SQL da query ?

Rogerio


GOSTEI 0
Emir Neto

Emir Neto

30/03/2005

O código está fidedigno ao abaixo:


CONST
c_SQL_PegaDados : String = ´SELECT DESCRICAO,MICROREGIAO,RPA ´+
´FROM BAIRRO ´;

c_SQL_GravaDados: String = ´INSERT INTO BAIRRO ´+
´(DESCRICAO,MICROREGIAO,RPA) ´+
´VALUES (:P_DESCRICAO, ´+
´:P_MICROREGIAO, ´+
´:P_RPA) ´;
begin
With qryTransfere do
Begin
Close;
SQL.Clear;
SQL.Add(c_SQL_PegaDados);
Open;
First;
end;

prgr.Max := qryTransfere.RecordCount;
While NOT qryTransfere.Eof do
Begin
With qryAccess do
Begin
Close;
SQL.Clear;
SQL.Add(c_SQL_GravaDados);
qryAccess.Parameters.ParamByName(´P_DESCRICAO´).Value := qryTransfere.FieldByName(´DESCRICAO´).Value;
qryAccess.Parameters.ParamByName(´P_MICROREGIAO´).Value := qryTransfere.FieldByName(´MICROREGIAO´).Value;;
qryAccess.Parameters.ParamByName(´P_RPA´).Value := qryTransfere.FieldByName(´RPA´).Value;;
ExecSQL;
end;
qryTransfere.Next;

prgr.Position := prgr.Position + 1;
end;
end;


GOSTEI 0
Ariovaldo

Ariovaldo

30/03/2005

Tente isso

qryAccess.Parameters[0].Value := qryTransfere.FieldByName(´DESCRICAO´).Value;

Onde [0] seria a sua ordem de parametros


GOSTEI 0
Rjun

Rjun

30/03/2005

Se você não coloca o código SQL dentro do componente, ele não cria os parâmetros. É melhor você colocar o código direto no componente. Ou então, crie os parametros via código também.

Rogério


GOSTEI 0
Emir Neto

Emir Neto

30/03/2005

Agora informa que o índice está fora de faixa.


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

30/03/2005

Fala emir, e aí beleza irmão!!!

Cara sobre parâmetros, tais lembrado quando agente programava com o componente IBObjects, e tinha um diferencial dele que não precisava reconhecer os parâmetros carregados. Acho que com você está acontecendo o contrário, se o cara chato não está reconhecendo os parâmetros passados a partir do conteúdo SQL informado é porque não não foi solicitado este carrgamento. No meu ponto de vista se você solicitasse a cada mudança do conteúdo SQL através do método [b:5f28f3434f]Prepare [/b:5f28f3434f]ou [b:5f28f3434f]Prepared := True[/b:5f28f3434f], sempre antes de atribuir os parâmetros, funcionaria. Tipow um exemplo abaixo exclusivo para o teu caso:

function testeADO : Integer ;
  const c_SQL_NomeTabela : String = ´INSERT INTO TABELA(CODIGO, NOME, DATA) VALUES (:PCODIGO, :PNOME, :PDATA)´;
  var   Qry_Aux : TADOQuery;
  begin
    Qry_Aux            := TADOQuery.Create(Nil); // instanciando o objeto
    Qry_Aux.Connection := TADOConnection;        // declarando a conexão
    try
      try
        Qry_Aux.SQL.Clear;
        Qry_Aux.SQL.Add(c_SQL_NomeTabela);
        for i := 0 to 100 do begin
          Qry_Aux.ParamCheck := True;
          Qry_Aux.Prepared   := True;
          Qry_Aux.Parameters.ParamByName(´PCODIGO´).AsInteger := i + 1;
          Qry_Aux.Parameters.ParamByName(´PCODIGO´).AsString  := ´Rafael Number´ + IntToStr(i+1);
          Qry_Aux.Parameters.ParamByName(´PDATA´).AsDateTime  := Now;
          Qry_Aux.ExecSQL;
          Qry_Aux.Prepared   := False;
          Qry_Aux.ParamCheck := False;
        end;
      except
        on e : except do begin
          ShowMessage(´Deu um erro cara. É tricolor ou auvi-rubro´);
        end;
      end;
    finally
      Qry_Aux.Free;
    end;
  end;


Uma dica [b:5f28f3434f]emir[/b:5f28f3434f], não usa [b:5f28f3434f]value[/b:5f28f3434f] não, variáveis do tipo variant só fazem confundir as coisas. Procurar atribuir aos tipos certos, se mesmo assim você não souber procura no help do delphi sobre o tipo TFieldType, você pode tentar obter o tipo dinamicamente. Só para Lembrar TFieldType, está encapsulado dentro de TField que por sua vez você possa utilizá-lo a partir da propriedade [b:5f28f3434f]Fields[/b:5f28f3434f] do próprio [b:5f28f3434f]ADOQuery[/b:5f28f3434f].

Falow [b:5f28f3434f]emir[/b:5f28f3434f], aquele abraço!!!

:wink:
Espero ter ajudado!!!

Espero ter ajudado


GOSTEI 0
Emir Neto

Emir Neto

30/03/2005

Obrigadíssimo cara. T+


GOSTEI 0
POSTAR