# Params de uma procedure em tempo de execução com BDE
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
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
Curtidas 0
Respostas
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 ?
pq não cria um componente para cada tipo de bd e chama conforme a opção ?
GOSTEI 0
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
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
nao me ocorre nada mais pratico
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