![]() |
Conección Delphi 2007 a Oracle
Hola,
Tengo que convertir una aplicación Delphi 5 a Delphi 2007 pero no puedo conectarme a Oracle. La aplicación utiliza TStoredProc (s) cuya propiedad: DatabaseName apunta al nombre del db Oracle definido en BDE Administrator. Con Delphi 5 todo funciona bien, pero con Delphi 2007 recibo los siguientes errores: Cuando ejecuto la aplicación: „Project Simulate.exe raised exception class EDBEngineError with message ‚ Your Application is not enabled for use with this driver. Alias: prk’. “ Cuando, en design mode, trato de acceder a la propiedad DatabaseName de un TStoredProc el error es: An error occurred while attempting to initialize the Borland Database Engine(error $210D) (Si configuro BDE Administrator para acceder a Oracle con ODBC el error es el mismo pero el código cambia a $2A06) Tiene alguien alguna idea para resolver este problema? Muchas gracias de antemano Fernando |
Ya que estas migrando, por que no contemplas utilizar ADO?, BDE es una tecnologia obsoleta.
Suerte |
Acceso con ADO a Oracle Stored procedures desde Delphi 2007
Gracias Poliburro,
No tengo experiencia con ADO pero me pregunto si seria factible la conversion sin tener que hacer el cambio en cada Stored Procedure / Formulario ya que el proyecto es bastante extenso. Si alguien tiene una idea (o código disponible para acceder con ADO a Oracle Stored procedures desde Delphi 2007 ) les agradezco nuevamente de antemano Fernando |
Algunas ideas adicionales
Hola,
En el caso del driver nativo BDE es probable que tenga alguna incompatibilidad con la versión de Oracle; pero en el caso del ODBC es un poco raro porque debería manejar un standard. Quizás sería bueno intentar con otro driver ODBC. Paralelamente, te ocurre con todos los Stored Procedure ?. Pasa lo mismo si los invocas directamente vía el SQL Explorer ?. |
ADO parámetros para Oracle Stored Procedure
Gracias a todos por su ayuda pero parece que con Delphi 2007 no es facil acceder a un Stored Procedure Oracle, ni con BDE ni con ADO.
Para probar la conección con ADO he creado una aplicación muy sencilla. Al correr el código: procedure TForm1.Button1Click(Sender: TObject);Hay un error que dice que hay incompatibilidad en el número o tipo de parámetros. Luego de mucha busqueda en la Internet he encontrado una posible solución a este error y esta sería añadir a ConnectionString: Extended Properties="PLSQLRSet=1" pero luego de ejecutar el código el error es el mismo!! Agradezco enormemente a alguien que pueda proporcionar alguna información para resolver este problema Los controles TADOStoredProc y TADOConnection están definidos en Design view: (Tanto la conección como el acceso a los diferentes Procedures del banco de datos estan correctos) object ADOConn1: TADOConnection Connected = True ConnectionString = 'Provider=OraOLEDB.Oracle.1;Password=password;Persist Security Inf' + 'o=True;User ID=userid;Data Source=prk_server;Extended Properties="' + 'PLSQLRSet=1"' Provider = 'OraOLEDB.Oracle.1' Left = 16 Top = 8 end object StpShowParking: TADOStoredProc Connection = ADOConn1 ProcedureName = 'SHOW_PARKING' Parameters = < item Name = 'CSR' Attributes = [paNullable] DataType = ftInterface Direction = pdInputOutput Value = Null end> El Stored Procedure de Oracle es: CREATE OR REPLACE PROCEDURE "SHOW_PARKING" / ( csr IN OUT pck_int_cursors.csr_all) AS BEGIN OPEN csr FOR SELECT parking.prk_id, ... |
Fijate como ejecutas el SP
Yo lo hice con SQL Server y no Oracle a traves de ADO
utilizando un comando, pero es lo mismo si ejecutas desde la conexion ADO Supongamos q tu conexion se denomina Conx: Conx.Execute( 'mySP ' + param1 + ', ' + param2 + ', ' + paramN ); Donde mySP es el nombre del Stored Procedure Te copio un poco de codigo y perdon por el desorden, pero al editar no te muestran las etiquetas de codigo with Data.adoCMD do begin CommandType := cmdStoredProc; CommandText := 'dbo.SP_COMPRAS_INSERT'; Parameters.Clear; Parameters.CreateParameter( '@Id_Compra' , ftLargeInt , pdOutput , 20, 0 ); Parameters.CreateParameter( '@Id_Proveedor' , ftLargeInt , pdInput , 20, StrToInt( txtProveedor.Text ) ); Parameters.CreateParameter( '@Tipo_Comprobante' , ftString , pdInput , 3 , cbTipoDOC.Text ); Parameters.CreateParameter( '@Nro_Comprobante' , ftString , pdInput , 13, txtComprobante.Text ); Parameters.CreateParameter( '@FechaRecepcion' , ftDate , pdInput , 10, Date ); Parameters.CreateParameter( '@MontoIVA' , ftCurrency , pdInput , 20, StrToFloat( txtIVAGral.Text ) ); Execute; end; adoCMD es un adocommand q esta en un datamodule Saludos y Exitos |
| La franja horaria es GMT +2. Ahora son las 11:13:43. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi