• Publicidad

Problema con OLE DB

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con OLE DB

Notapor natxo » 2011-05-25 06:51 @327

Hola,

necesito verificar que la conexión a una base de datos Oracle desde una máquina con Windows funciona con OLE DB (no ODBC, por desgracia, mi vida sería más fácil). He conseguido conectar y sacar datos, pero no consigo que me devuelva una columna en concreto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!perl
use warnings;
use strict;

# thanks to http://sunsite.berkeley.edu/ead/tools/eaddb/fundamentals.html
       
# invoke the Win32::OLE methods for database connectivity
use Win32::OLE;
use Win32::OLE::Const 'Microsoft ActiveX Data Objects';

# define the conection and recordset objects
my $Conn = Win32::OLE->new("ADODB.Connection");
my $RS   = Win32::OLE->new("ADODB.Recordset");

# define the data source name
my $DSN = "Provider=OraOLEDB.Oracle.1;Password=secret;Persist Security Info=True;User ID=query;Data Source=mydb";

# define the sql statement we want to execute
my $SQL = "select * from feestdag where FEES_OMSCHRIJVING like 'Tweede Kerstdag'";

# expected return (change next year)
my $result = "2011-12-26 00:00:00" ;

# open the db connection
$Conn->Open($DSN);

# open the recordset
$RS->Open($SQL, $Conn);

# loop through results until no more results are available
until ($RS->EOF) {
   my $value1 = $RS->Fields("FEES_OMSCHRIJVING")->value;
   my $value2 = $RS->Fields("FEES_DATUM")->value;
   print "$value1\n";
   print "$value2\n";
   
   $RS->MoveNext;
}

# close recordset and connection objects
$RS->Close;
$Conn->Close;
 
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Si ejecuto el programa, tengo esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
c:\drv>c:\Perl\bin\perl.exe testoledb.pl
Tweede Kerstdag
Win32::OLE::Variant=SCALAR(0x346d8bc)
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿Por qué me sale esa referencia en el segundo valor $value2? ¿Cómo puedo desreferenciarlo?
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Publicidad

Re: Problema con OLE DB

Notapor explorer » 2011-05-25 07:16 @344

Echa un vistazo al manual de Win32::OLE::Variant.

La variable es un objeto de la clase Win32::OLE::Variant, y en ese documento se describen métodos para sacar la información que hay dentro de ella.

O usar Data::Dumper y ver qué contiene... a lo mejor solo contiene un escalar, con lo que haciendo un

print "${$value2}\n";

valdría.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con OLE DB

Notapor scout » 2011-05-25 07:24 @350

¿Probaste la consulta fuera de Perl y tienes el resultado que quieres...? Cuando me conecto a una base y me da problemas vuelvo un paso y pruebo el sql por separado...
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Re: Problema con OLE DB

Notapor natxo » 2011-05-25 08:54 @413

explorer escribiste:Echa un vistazo al manual de [url=http://search.cpan.org/perldoc?Win32::OLE::Variant]


Bingo.

Si añado 'use Win32::OLE::Variant;' al script, entonces funciona. Muy extraño. Si ejecuto lo mismo con ODBC en vez de OLE DB los resultados son parecidos aunque no exactamente iguales:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
Tweede Kerstdag
12/26/2011
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si saco los datos mediante DBI con ODBC, lo que me sale es esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
Tweede Kerstdag
2011-12-26 00:00:00
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Se trata evidentemente del mismo día, pero su manera de representarlo es distinto. Curioso. Lo importante es que funciona lo que quería y que ahora puedo demostrar que el controlador de Oracle está bien instalado en la máquina (y si no funciona la aplicación, no es problema de la instalación si no de la aplicación, es decir, no es mi problema ¡je,je!). Gracias.
saludos,
Natxo Asenjo
natxo
Perlero nuevo
Perlero nuevo
 
Mensajes: 76
Registrado: 2007-08-09 16:22 @723
Ubicación: Países Bajos

Re: Problema con OLE DB

Notapor explorer » 2011-05-25 13:14 @593

La diferencia de la presentación es a causa de que la información de la base de datos "atraviesa" distintos controladores (ODBC / OLE), y cada uno de ellos trata los campos especiales de forma distinta.

P.D. Normalmente, las instalaciones de Oracle suelen venir acompañadas de un intérprete de Perl y de DBD::Oracle, con lo que puedes dialogar con el motor sin tener que usar ODBC u OLE.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 37 invitados