ADOQuery erro: objeto paramiter definido incorretamente

Delphi

17/12/2007

Ola estou programando em c++ Builder e estou usando Oracle

Tentei o seguinte codigo:

TADOQuery *ExecSQL = FPrincipal->SQLQuery;
/*      Salvar dados   */
        ExecSQL->SQL->Clear();
        ExecSQL->SQL->Add("DECLARE "
        "v_novo_cand package_candidato_info.novo_candidato;"
        "v_tel_cand package_candidato_info.telefone_candidato;"
        "v_tipo_cand package_candidato_info.tipo_candidato;"
        "v_cand_estag package_candidato_info.candidato_estagiario;"
        "v_cur_cand package_candidato_info.curriculo_candidato;"
        "v_form_cand package_candidato_info.formacao_candidato;"
        "v_emp_ant_cand package_candidato_info.empregoAnt_candidato;"
        "BEGIN "
        "  v_tel_cand(1).candidato := 1;"
  "v_tel_cand(1).telefone := ´99217891´;"
        "insere_candidato(v_novo_cand, v_tel_cand, v_tipo_cand, v_cand_estag, v_cur_cand, v_form_cand, v_emp_ant_cand);"
        "End;");
        ExecSQL->ExecSQL();


Quando eu rodo no sqldeveloper ele insere normalmente mas ao executar no ADOquery da o seguinte erro:
´Objeto paramter definido incorretamente . As informações sao incosistentes ou incompletas.´
Achei q a execução do SQLQuery era a mesma do SQL DEVELOPER

vo manda o procedure e o package

create or replace PACKAGE package_candidato_info IS

  TYPE novo_candidato IS TABLE OF Candidato¬ROWTYPE INDEX BY binary_integer;                         /*Coleção da tabela Candidato*/
  TYPE telefone_candidato IS TABLE OF TelefoneCandidato¬ROWTYPE INDEX BY binary_integer;         /*Coleção da tabela TelefoneCandidato*/
  TYPE tipo_candidato IS TABLE OF TipoCandidato¬ROWTYPE INDEX BY binary_integer;                     /*Coleção da tabela TipoCandidato*/
  TYPE candidato_estagiario IS TABLE OF Estagiario¬ROWTYPE INDEX BY binary_integer;                   /*Coleção da tabela Estagiario*/
  TYPE curriculo_candidato IS TABLE OF Curriculo¬ROWTYPE INDEX BY binary_integer;                      /*Coleção da tabela Curriculo*/
  TYPE formacao_candidato IS TABLE OF Formacao¬ROWTYPE INDEX BY binary_integer;                    /*Coleção da tabela Formação*/
  TYPE empregoAnt_candidato IS TABLE OF EmpregoAnt¬ROWTYPE INDEX BY binary_integer;              /*Coleção da tabela EmpregoAnt*/
 
END package_candidato_info;


e o procedure

create or replace
PROCEDURE insere_candidato (
  p_cand_info IN package_candidato_info.novo_candidato,
  p_cand_telefone IN package_candidato_info.telefone_candidato,
  p_cand_tipo IN package_candidato_info.tipo_candidato,
  p_cand_estag IN package_candidato_info.candidato_estagiario,
  p_cand_cur IN package_candidato_info.curriculo_candidato,
  p_cand_form IN package_candidato_info.formacao_candidato,
  p_cand_emp_ant IN package_candidato_info.empregoAnt_candidato) IS
 
  v_n NUMBER := 0;--Armazena o tamanho das coleções para que a operação de COUNT não tenha que ser realizada a cada iteração do for
  v_candidato NUMBER := 0;
 
  BEGIN
 
  --Insere na tabela Candidato, permite inserção de vários candidatos em uma única chamada
  v_n := p_cand_info.COUNT;
  FOR i IN 1 .. v_n LOOP
    INSERT INTO Candidato VALUES (p_cand_info(i).codigo, p_cand_info(i).RG, p_cand_info(i).CPF, p_cand_info(i).nome,
        p_cand_info(i).rua, p_cand_info(i).numero, p_cand_info(i).bairro, p_cand_info(i).cep, p_cand_info(i).cidade,
        p_cand_info(i).estado, p_cand_info(i).tipocadastro, p_cand_info(i).lideranca,
        p_cand_info(i).conhecimentoTecEspec, p_cand_info(i).conhecimentoGeral, p_cand_info(i).relSocial,
        p_cand_info(i).tolHierarquia, p_cand_info(i).salMinimo, p_cand_info(i).salMaximo);
        END LOOP;--fim das inserções em candidato
/*Insere na tabela TelefoneCandidato*/
  v_n := p_cand_telefone.COUNT;
  FOR i IN 1 .. v_n LOOP
 
    SELECT COUNT(*) INTO v_candidato FROM Candidato
    WHERE p_cand_telefone(i).candidato = Candidato.codigo;
    IF (v_candidato <> 0) THEN /*Verifica se o candidato que será inserido em TelefoneCandidato existe em Candidato*/
      INSERT INTO TelefoneCandidato VALUES (p_cand_telefone(i).candidato, p_cand_telefone(i).telefone);
    END IF; /*se não existe, ignora a inserção*/
    v_candidato := 0;
 
  END LOOP; /*fim das inserções em TelefoneCandidato*/

...(o resto segue a ideia)


END insere_candidato;


Se alguem puder me explicar como eu resolvo isso.. ou como esse objeto AdoQuery funciona ou alguma luz rsrs..
num sei mais o q faze..
flw


Vitorrm

Vitorrm

Curtidas 0
POSTAR