# Params de uma procedure em tempo de execução com BDE

Delphi

15/04/2004

Pessoal,
Estou desenvolvendo uma aplicação que precisa funcionar em Oracle e em SQL Server, porém não estou conseguindo tratar em tempo de execução os parametros.
Ou seja no código, quando o acesso é MS SQL eu passo dbo. antes do nome da procedure e @ antes dos parâmetros. No Oracle eu passo apenas o nome da procedure e o nome dos parâmetros.
mas obtenho o erro:
Param not found.
Já quando seto os parametros em tempo de projetos consigo menipulá-los.
Já tentei passar por referência o parâmetro mas mesmo assim não funciona. Ex.: Proc1.Params[1].value := ´teste´
Caso alguem tenha uma experiência com o problema ou saiba resolvê-lo por favor me informar.

Grato,
Fábio


Fbiocorrea

Fbiocorrea

Curtidas 0

Respostas

Motta

Motta

15/04/2004

A escolha do bd, como ocorre ?

pq não cria um componente para cada tipo de bd e chama conforme a opção ?


GOSTEI 0
Fbiocorrea

Fbiocorrea

15/04/2004

A escolha do bd, como ocorre ? pq não cria um componente para cada tipo de bd e chama conforme a opção ?

1ª pergunta - Ela é feita através de um arquivo ini onde são informadas as configurações de Driver name, database, etc. e hoje pode variar entre Ms SQL e Oracle.

2ª pergunta - O problema é que futuramente não sei qual o banco que o cliente vai preferir, alguns estão comentando algo sobre Interbase, outros até sobre DB2.
E o problema é que o sitema vai ficar pesado, e a cada mudança de banco uma série de implementações deverão ser feitas.
Em nossa empresa não querem gerar versões do software para cada cliente.
Você ou algum outro conhece uma procedure ou função para adicionar o parametros da procedure em tempo de execução?


GOSTEI 0
Motta

Motta

15/04/2004

Como cada bd tem seus padrões e limites , podem e devem haver diferenças nas sp´s, e como vcs naõ querem versões diferentes a solução seria criar as sp´s dinamicamente segue um exemplo
 

procedure TForm1.Button1Click(Sender: TObject);
begin
  sp.CleanupInstance;
  // Atribui o DataBaseName
  sp.DatabaseName := ´db1´;
  // Manter nomes dos parametros da SP iguais como estao no Oracle
  sp.StoredProcName := ´IDADE´;
  // Cria os parametros dinamicamente
  with sp.Params.CreateParam (ftFloat,´DtNasc´,ptInput) do // Manter nome da SP no Oracle
   AsDateTime := DateTimePicker1.Date;
  with sp.Params.CreateParam (ftFloat,´DtCalc´,ptInput) do
   AsDateTime := DateTimePicker2.Date;
  sp.Params.CreateParam (ftFloat,´RETURN´,ptResult);
  try
    // Executa
    sp.ExecProc;
  except
    // Se deu craca
    on e:Exception do
    begin
      ShowMessage (e.Message);
    end;
  end;
  // Recupera o resultado , no caso é uma Fuction
  Label1.Caption := sp.Params[2].AsString; {}
end;  

procedure TForm1.FormCreate(Sender: TObject);
begin
  database1.Open;
  // Instancia a SP
  sp := TStoredProc.Create(Self);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  sp.Free;
end;

 


nao me ocorre nada mais pratico


GOSTEI 0
POSTAR