Oracle con ADO

Oracle con ADO

Postby Sebastián Almirón » Mon Oct 01, 2007 5:18 pm

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): Los campos 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
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby metaldrummer » Wed Oct 03, 2007 2:53 am

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
[b]David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl[/b]
User avatar
metaldrummer
 
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile

Postby Sebastián Almirón » Wed Oct 03, 2007 6:31 am

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 dos campos, 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.[code][/code]
User avatar
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby Antonio Linares » Wed Oct 03, 2007 8:05 am

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

Postby metaldrummer » Thu Oct 04, 2007 2:11 am

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
[b]David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl[/b]
User avatar
metaldrummer
 
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile

Postby Sebastián Almirón » Thu Oct 04, 2007 6:52 am

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
Sebastián Almirón
 
Posts: 157
Joined: Mon Dec 12, 2005 9:56 am
Location: Moralzarzal - Spain

Postby metaldrummer » Tue Oct 09, 2007 3:34 pm

Sebastián favor mira tu correo.
Saludos
[b]David Lagos S.
Coquimbo-Chile
www.wificafe.cl
webmaster@wificafe.cl[/b]
User avatar
metaldrummer
 
Posts: 113
Joined: Wed Jan 10, 2007 8:43 pm
Location: Coquimbo-Chile

Postby Sebastián Almirón » Tue Oct 09, 2007 4:00 pm

metaldrummer wrote:Sebastián favor mira tu correo.
Saludos


Gracias David. Ahora mismo le hecho un vistazo.

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

Postby Manuel Valdenebro » Thu Oct 18, 2007 3:53 am

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

Postby MarioDava » Tue Jan 08, 2008 5:58 pm

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

Postby Manuel Valdenebro » Tue Jan 08, 2008 8:43 pm

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

Postby MarioDava » Tue Jan 08, 2008 9:31 pm

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

Postby Manuel Valdenebro » Wed Jan 09, 2008 5:04 am

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

Postby MarioDava » Thu Jan 10, 2008 12:00 am

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

Postby Manuel Valdenebro » Thu Jan 10, 2008 6:00 am

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

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 17 guests