Oracle con ADO
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Oracle con ADO
Hola a todos.
Estoy haciendo unas primeras pruebas con Oracle XE 10g, en concreto pasar una DBF de clientes a una tabla Oracle con la nueva herramienta ADORDD.
En un principio me está funcionando y una vez pasados los datos le hago un Browse y me muestra la tabla Oracle. ¡Que maravilla, tengo que hacer el cambio de todas las bases de datos de mi aplicación (más de 150) y parece que no va a suponer el tremendo esfuerzo que me imaginaba!
De momento tengo una pega (ya me saldrán otras): _ que contienen una Ñ (supongo que para las letras acentuadas pasará lo mismo) no me los graba y me salta un error. He estado mirando y en el registro de Windows Oracle tiene el valor NLS_LANG = SPANISH_SPAIN.WE8MSWIN1252
El error que salta no creo que sea muy descriptivo:
Error 41954080/16389 E_FAIL: COUNT from Errorsys, line 0
Pero se que el problema está en las Ñ porque si las quito de los registros se lo traga sin problemas.
¿ Por donde empiezo a mirar ? Soy nuevo en ADO y en ORACLE
Saludos
Estoy haciendo unas primeras pruebas con Oracle XE 10g, en concreto pasar una DBF de clientes a una tabla Oracle con la nueva herramienta ADORDD.
En un principio me está funcionando y una vez pasados los datos le hago un Browse y me muestra la tabla Oracle. ¡Que maravilla, tengo que hacer el cambio de todas las bases de datos de mi aplicación (más de 150) y parece que no va a suponer el tremendo esfuerzo que me imaginaba!
De momento tengo una pega (ya me saldrán otras): _ que contienen una Ñ (supongo que para las letras acentuadas pasará lo mismo) no me los graba y me salta un error. He estado mirando y en el registro de Windows Oracle tiene el valor NLS_LANG = SPANISH_SPAIN.WE8MSWIN1252
El error que salta no creo que sea muy descriptivo:
Error 41954080/16389 E_FAIL: COUNT from Errorsys, line 0
Pero se que el problema está en las Ñ porque si las quito de los registros se lo traga sin problemas.
¿ Por donde empiezo a mirar ? Soy nuevo en ADO y en ORACLE
Saludos
- metaldrummer
- Posts: 113
- Joined: Wed Jan 10, 2007 8:43 pm
- Location: Coquimbo-Chile
- Contact:
Sebastián por favor postea el código que utilizas para el traspaso.
Yo estoy utilizando ado en oracle 10g express edition sin problemas. Me toma todo, Ñ, acentos, TODO!!!!
Tengo además unas funciones que cree para conectarme al motor y controlar cuando se realiza la conexión.
Además el como agregar los datos sin tener que utilizar sentencias SQL. Directamente usando ADO.
Incluso tengo una rutina que agrega datos a una tabla .dbf temporal y luego los pasa a la tabla que necesito en oracle sin problemas.
Hace dos días hice una presentación de un módulo de punto venta y caja a un cliente en sus instalaciones utilizando una conexión ADSL de 512mb donde el cliente hacia nuestro server que es público en forma excelente.
Saludos
David Lagos S.
Coquimbo - Chile
Yo estoy utilizando ado en oracle 10g express edition sin problemas. Me toma todo, Ñ, acentos, TODO!!!!
Tengo además unas funciones que cree para conectarme al motor y controlar cuando se realiza la conexión.
Además el como agregar los datos sin tener que utilizar sentencias SQL. Directamente usando ADO.
Incluso tengo una rutina que agrega datos a una tabla .dbf temporal y luego los pasa a la tabla que necesito en oracle sin problemas.
Hace dos días hice una presentación de un módulo de punto venta y caja a un cliente en sus instalaciones utilizando una conexión ADSL de 512mb donde el cliente hacia nuestro server que es público en forma excelente.
Saludos
David Lagos S.
Coquimbo - Chile
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
Hola David, de momento solo estoy haciendo pruebas, el siguiente código me marca el error al llegar a un registro que contiene Ñ. En la tabla Oracle, que solo tiene _, el campo codigo de ese registro se queda grabado, sin embargo el campo nombre que es el que contiene la Ñ se queda en blanco:
#include "FiveWin.ch"
#include "adordd.ch"
function Main()
USE clientes VIA 'ADORDD' TABLE "clientes" ORACLE FROM '127.0.0.1' USER 'SEBAS' PASSWORD 'mandarina' shared alias oraclientes
sele oraclientes
#define adIndex 0x100000
MsgInfo( HB_AdoRddGetRecordset():Supports( adIndex ) )
REQUEST DBFCDX
RddSetDefault('dbfcdx')
use clientes new VIA 'DBFCDX' alias gdfclientes
sele gdfclientes
set order to 1
go top
do whil !eof()
if !empty(codigo) .and. !empty(nombre)
ccliente := codigo
cnombre := nombre
sele oraclientes
append blank
if rlock()
replace codigo with ccliente, nombre with cnombre
unlock
endif
endif
sele gdfclientes
skip
enddo
sele oraclientes
Browse()
USE
return nil
En la declaración USE he intentado poner CODEDEPAGE 850 pero sigue sin funcionar
El MsgInfo() es para ver si mi conexión ADO soporta indices y me devuelve .F. ¿Entiendo que no se pueden usar indices con ORACLE?
Gracias por tu atención.
#include "FiveWin.ch"
#include "adordd.ch"
function Main()
USE clientes VIA 'ADORDD' TABLE "clientes" ORACLE FROM '127.0.0.1' USER 'SEBAS' PASSWORD 'mandarina' shared alias oraclientes
sele oraclientes
#define adIndex 0x100000
MsgInfo( HB_AdoRddGetRecordset():Supports( adIndex ) )
REQUEST DBFCDX
RddSetDefault('dbfcdx')
use clientes new VIA 'DBFCDX' alias gdfclientes
sele gdfclientes
set order to 1
go top
do whil !eof()
if !empty(codigo) .and. !empty(nombre)
ccliente := codigo
cnombre := nombre
sele oraclientes
append blank
if rlock()
replace codigo with ccliente, nombre with cnombre
unlock
endif
endif
sele gdfclientes
skip
enddo
sele oraclientes
Browse()
USE
return nil
En la declaración USE he intentado poner CODEDEPAGE 850 pero sigue sin funcionar
El MsgInfo() es para ver si mi conexión ADO soporta indices y me devuelve .F. ¿Entiendo que no se pueden usar indices con ORACLE?
Gracias por tu atención.
Code: Select all
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- metaldrummer
- Posts: 113
- Joined: Wed Jan 10, 2007 8:43 pm
- Location: Coquimbo-Chile
- Contact:
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
David:metaldrummer wrote:Sebastian:
Dame un correo donde enviarte un ejemplo.
La idea es que te olvides del concepto de .dbf
Yo por lo menos trabajo con ADO duro y puro y no tengo problemas.
Saludos
David
Estoy evaluando el tiempo que me llevaría pasar una aplicación de dbfs a Oracle, por exigencia del cliente, a la vez que de FW16 a FWH (esto último ya he pasado parte porque tiene varios ejecutables). Es una aplicación muy gorda, unas 150 dbfs, más de 300.000 línea de código, 5 Dlls de recursos, lenguaje Script propio (basado en TScript que creo no está disponible para Harbour), etc.
Así que agradezco todas las ayudas, mi email es:
sebas@moralzarzal.com
Saludos
- metaldrummer
- Posts: 113
- Joined: Wed Jan 10, 2007 8:43 pm
- Location: Coquimbo-Chile
- Contact:
- Sebastián Almirón
- Posts: 125
- Joined: Mon Dec 12, 2005 9:56 am
- Location: Moralzarzal - Spain
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
David, podrias enviarme el ejemplo a mi correo:metaldrummer wrote:Sebastian:
Dame un correo donde enviarte un ejemplo.
La idea es que te olvides del concepto de .dbf
Yo por lo menos trabajo con ADO duro y puro y no tengo problemas.
Saludos
David
soporte@lebsoft.es
Muchas gracias
Un saludo
Manuel
Manuel
Hola,metaldrummer wrote:Sebastian:
Dame un correo donde enviarte un ejemplo.
La idea es que te olvides del concepto de .dbf
Yo por lo menos trabajo con ADO duro y puro y no tengo problemas.
Saludos
David
Yo tambien uso ADO, pero la conexion a la base la hago por medio de un ODBC previamente configurado:
oCnx200:=TAdoConn():New()
IF !oCnx200:Open( "ORACLE CBS", "CBS", "pedro234" )
Msginfo('No hay conexión con el Servidor de Oracle...')
Return( .f. )
ENDIF
Como hago la conexión sin usar ODBC.
Saludos,
Mario A. Dávalos
México, D.F.
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
La conexión por ADO es mucho mas rápida y directa. Esta es una forma de conectar son Oracle (recuerda iniciar previamente la BD):MarioDava wrote: Yo tambien uso ADO, pero la conexion a la base la hago por medio de un ODBC previamente configurado:Como hago la conexión sin usar ODBC.
Local cProv := "MSDAORA.1"
Local cHost := "127.0.0.1" // tambien puedes poner el nombre de la BD
Local cUser := "hr"
local cPass := "hr"
local oCon := TOLEAuto():New('ADODB.Connection')
// realiza la conexion con la Base de Datos
TRY
oCon:Open("Provider=" + cProv + ";" + ;
"Data Source= " + cHost + ";" + ;
"User ID=" + cUser + ";" + ;
"Password=" + cPass + ";" )
CATCH
MSGSTOP ("Provider: " + cProv + CRLF + ;
"Host: " + cHost + CRLF + ;
"Usuario: " + cUser + CRLF + ;
"Clave: " + cPass, "Error de Conexión")
RETURN nil
END
Un saludo
Manuel
Manuel
Me puedes explicar un poco que es:Manuel Valdenebro wrote:La conexión por ADO es mucho mas rápida y directa. Esta es una forma de conectar son Oracle (recuerda iniciar previamente la BD):MarioDava wrote: Yo tambien uso ADO, pero la conexion a la base la hago por medio de un ODBC previamente configurado:Como hago la conexión sin usar ODBC.
Local cProv := "MSDAORA.1"
Local cHost := "127.0.0.1" // tambien puedes poner el nombre de la BD
Local cUser := "hr"
local cPass := "hr"
local oCon := TOLEAuto():New('ADODB.Connection')
// realiza la conexion con la Base de Datos
TRY
oCon:Open("Provider=" + cProv + ";" + ;
"Data Source= " + cHost + ";" + ;
"User ID=" + cUser + ";" + ;
"Password=" + cPass + ";" )
CATCH
MSGSTOP ("Provider: " + cProv + CRLF + ;
"Host: " + cHost + CRLF + ;
"Usuario: " + cUser + CRLF + ;
"Clave: " + cPass, "Error de Conexión")
RETURN nil
END
Local cProv := "MSDAORA.1"
y porque MSDAORA.1, yo acceso a una base remota de Orcale 10g
Saludos y gracias,
Mario A. Dávalos
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
MSDAORA.1 es el provider OLE estandar de Microsoft para acceder a una base de datos Oracle, aunque el mismo Oracle tiene otro provider-OLE propio. Si usas la función siguiente (cortesía de Biel), puedes probar si la conexión es correcta, usando el Datalink de Microsoft.MarioDava wrote:Me puedes explicar un poco que es:
Local cProv := "MSDAORA.1"
static FUNCTION FDATALINK (oCon)
LOCAL oDataLink := TOleAuto():New("Datalinks"), ;
oConn := oDataLink:PromptNew()
msginfo (oConn:ConnectionString)
oCon:CLOSE()
RETURN nil
Un saludo
Manuel
Manuel
Gracias Manuel, finalmente pude hacer la conexión a Oracle vía ADO, tengo una pregunta que hacerte, has usado en tus querys en la clausula WHERE capos tipo fecha? y si es el caso, te funcionan bien, a mi no?Manuel Valdenebro wrote:MSDAORA.1 es el provider OLE estandar de Microsoft para acceder a una base de datos Oracle, aunque el mismo Oracle tiene otro provider-OLE propio. Si usas la función siguiente (cortesía de Biel), puedes probar si la conexión es correcta, usando el Datalink de Microsoft.MarioDava wrote:Me puedes explicar un poco que es:
Local cProv := "MSDAORA.1"
static FUNCTION FDATALINK (oCon)
LOCAL oDataLink := TOleAuto():New("Datalinks"), ;
oConn := oDataLink:PromptNew()
msginfo (oConn:ConnectionString)
oCon:CLOSE()
RETURN nil
Antes me conectaba via ODBC y mis querys correian perfecto, ahora las querys que usan fechas no funcionan.
Saludos,
Mario A. Dávalos
- Manuel Valdenebro
- Posts: 706
- Joined: Thu Oct 06, 2005 9:57 pm
- Location: Málaga-España
Mario,MarioDava wrote:Gracias Manuel, finalmente pude hacer la conexión a Oracle vía ADO, tengo una pregunta que hacerte, has usado en tus querys en la clausula WHERE capos tipo fecha? y si es el caso, te funcionan bien, a mi no?
Aquí estamos aprendiendo a "porrazos" y con la ayuda de todos. Por eso sería bueno nos comentaras como te has conectado, con que cadena de conexión.
En cuando al problema de las fecha, yo no tengo problemas. La siguiente consulta sobre la tabla EMPLOYEES la realiza correcamente:
select * from employees where LAST_NAME LIKE 'D%' AND hire_date > '01/01/1998'
¿Estas usando comillas dobles ó sencillas?
Un saludo
Manuel
Manuel