Fórum # Params de uma procedure em tempo de execução com BDE #226309
15/04/2004
0
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
Curtir tópico
+ 0Posts
16/04/2004
Motta
pq não cria um componente para cada tipo de bd e chama conforme a opção ?
Gostei + 0
16/04/2004
Fbiocorrea
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
16/04/2004
Motta
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
Clique aqui para fazer login e interagir na Comunidade :)