Oracle con ADO

User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Oracle con ADO

Post by Sebastián Almirón »

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
User avatar
metaldrummer
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile
Contact:

Post by metaldrummer »

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
David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Post by Sebastián Almirón »

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.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Sebastian,

> ¿Entiendo que no se pueden usar indices con ORACLE?

La limitación es de ADO no de Oracle, posiblemente.

Lo solucionas usando sentencias SQL que implican el uso de indices (ORDER BY, etc.)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
metaldrummer
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile
Contact:

Post by metaldrummer »

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
David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Post by Sebastián Almirón »

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
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
User avatar
metaldrummer
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile
Contact:

Post by metaldrummer »

Sebastián favor mira tu correo.
Saludos
David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl
User avatar
Sebastián Almirón
Posts: 125
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Post by Sebastián Almirón »

metaldrummer wrote:Sebastián favor mira tu correo.
Saludos
Gracias David. Ahora mismo le hecho un vistazo.

Saludos
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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
David, podrias enviarme el ejemplo a mi correo:

soporte@lebsoft.es

Muchas gracias
Un saludo

Manuel
MarioDava
Posts: 18
Joined: Mon Jan 29, 2007 1:29 am

Post by MarioDava »

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
Hola,

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.
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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.
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):

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
MarioDava
Posts: 18
Joined: Mon Jan 29, 2007 1:29 am

Post by MarioDava »

Manuel Valdenebro wrote:
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.
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):

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
Me puedes explicar un poco que es:

Local cProv := "MSDAORA.1"

y porque MSDAORA.1, yo acceso a una base remota de Orcale 10g

Saludos y gracias,
Mario A. Dávalos
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

MarioDava wrote:Me puedes explicar un poco que es:
Local cProv := "MSDAORA.1"
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.

static FUNCTION FDATALINK (oCon)
LOCAL oDataLink := TOleAuto():New("Datalinks"), ;
oConn := oDataLink:PromptNew()

msginfo (oConn:ConnectionString)
oCon:CLOSE()

RETURN nil
Un saludo

Manuel
MarioDava
Posts: 18
Joined: Mon Jan 29, 2007 1:29 am

Post by MarioDava »

Manuel Valdenebro wrote:
MarioDava wrote:Me puedes explicar un poco que es:
Local cProv := "MSDAORA.1"
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.

static FUNCTION FDATALINK (oCon)
LOCAL oDataLink := TOleAuto():New("Datalinks"), ;
oConn := oDataLink:PromptNew()

msginfo (oConn:ConnectionString)
oCon:CLOSE()

RETURN nil
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?

Antes me conectaba via ODBC y mis querys correian perfecto, ahora las querys que usan fechas no funcionan.

Saludos,
Mario A. Dávalos
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

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?
Mario,

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
Post Reply