Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Como conecto un servidor web con uno de bases de datos
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Mensaje Jue Sep 21, 2006 1:46 pm
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Como conecto un servidor web con uno de bases de datos Responder citando

Saludos:

Soy nuevo utilizando perl y tengo un problema, estoy haciendo una aplicacion web y tengo un servidor web y tengo otra maquina donde tengo bases de datos, ¿como puedo desde la maquina donde estara la pag. web hacer consultas a la maquina donde estan las bases de datos?

He podido desplegar consultas si la base de datos y el servidor web estan en la misma maquina, pero ese no es mi caso.

utilizo el siguiente codigo para hacer pruebas:

Perl:
#!/usr/bin/perl -w
#
use DBI;
my $dbh = DBI->connect("dbi:Informix:b_xxxx:168.xxx.xxx.x","usuario","password")
    or die "Can't connect to Informix";
my $prep = "select * from txxxx";
my $sth = $dbh->prepare($prep);
$sth->execute( );
$dbh->disconnect;



Y me sale el siguiente error:

Código:
DBI connect('b_xxxx:168.xxx.xxx.1','usuario',....) failed: SQL: -354: incorrect database or cursor name format


Ese codigo lo ejecuto en la maquina donde estara el servidor web, he cambiado el hostname quitando la direccion IP y poniendo el nombre del host de la maquina a la q conecto, en las dos maquinas tengo instalado perl y DBI/DBD , ojala pudieran ayudarme, se los agradecere mucho.
Mensaje Jue Sep 21, 2006 2:41 pm
AkonD
Perlero Nuevo
Perlero Nuevo
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
Responder citando

Tienes configurado el servidor mysqld para que acepte conexiones remotas? creo que por defecto solo acepta localhost..

El error que te sale creo que es pq no selecionas la base de datos correctamente..
Mensaje Jue Sep 21, 2006 6:49 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

En el dbi debes indicar el host al que te vas a conectar.
Mensaje Vie Sep 22, 2006 12:45 pm
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Responder citando

saludos:

en el dbi pongo el host al q me quiero conectar, pongo su direccion IP de la maquina, aunq creo q el problema se refiere como lo dice AkonD, a que mi servidor de bases de datos q utiliza Informix no esta configurado para aceptar busquedas remotas, estoy investigando como configurarlo, no se si uds sepan donde hacerlo?

gracias.
Mensaje Vie Sep 22, 2006 2:01 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

El primer resultado en Google me ha sacado este thread:
http://www.linux.org.ve/pipermail/l-desarrollo/2004-September/000347.html

A ver si te da pistas...
Mensaje Vie Sep 22, 2006 4:04 pm
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Responder citando

gracias, en el link que pones encontre una explicacion de como solucionar el problema, en seguida la pruebo y comento el resultado, nuevamente gracias.
Mensaje Vie Sep 29, 2006 4:21 am
macgregor
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
Responder citando

Código:
#!/usr/bin/perl -w
#
use DBI;
my $dbh = DBI->connect("dbi:Informix:b_xxxx:168.xxx.xxx.x","usuario","password")
or die "Can't connect to Informix";
my $prep = "select * from txxxx";
my $sth = $dbh->prepare($prep);
$sth->execute( );
$dbh->disconnect;



Actualmente estoy ejecutando mis cgi's en un servidor Linux que envia las peticiones a otro servidor Windows que se encuentra en una red privada donde esta la Base de Datos Oracle.

Código:

my $IP="666.666.666.666";  # la ip del servidor donde está la DB

$gestor_datos->{Apuntador} = DBI->connect("dbi:Oracle:(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = $IP)(PORT =
1521)))(CONNECT_DATA =
(SERVICE_NAME=$gestor_datos->{Nombre})))","$gestor_datos->{Usuario}",
"$gestor_datos->{Password}"); 


Fijate que es lo mismo que intentas hacer tú, usamos la misma librería para conectar, pero distinto driver.

(el puerto de conexión seguro que no es el mismo! el 1521 es el que usa oracle por defecto)

Lo de $gestor_datos->{algo} lo debes cambiar por tus variables, esto viene de unos módulos que cree para conectar y lanzar consultas.
Estos módulos los puedes consultar en este foro, en el apartado de MÓDULOS.

Se crearon pensando en Oracle, pero ya ves que en el fondo usan DBI igual que tú.

Si te interesan y necesitas algún ejemplo solo tienes que postear aqui Smile

Un saludo
Mensaje Lun Oct 09, 2006 11:05 am
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Hace la conexion pero no muestra la informacion en la WEB Responder citando

Saludos:

Tengo ahora otro proplema con el mismo proyecto, ojala puedan ayudarme nuevamente, tengo el siguiente codigo.

Perl:
#****************************************************#
#! /usr/bin/perl -w
use CGI;
use DBI;

$q = new CGI;

# mandando servidor los encabezados de la pagina html                           
print $q->header;                                                               
print $q->start_html(-title=>"Centros de Consulta", -bgcolor=>"#3333CC", -text=>"#FFFFFF");
print "<center><H2>CONSULTA DE SUELDO BASE</H2></center>";
print $q->hr();                                                                 
#creando una form o ventana                                                   
print $q->startform();                                                         
print "<font color=\"white\">";                                               
print "RFC del empleado:  ";                                             
print $q->textfield('RFC','',13);                                             
print $q->hr();
# creando un submit button                                                     
print $q->submit('BUSCAR');                                                 
# cerrando la forma                                                             
print $q->endform();                                                           

#se preciona el boton                                                           
#if ( $q->param('BUSCAR')) { 
#lee el textfeld
$v_rfc = $q->('RFC');

# creando conexion
my $dbh = DBI->connect('dbi:Informix:nomina@basedatos','pato','pato')or die print "No hay conexion con la base<br>";

#consulta el numero de registros existentes para ese empleado
my $prep = "select count(*) from sueldos where rfc= ? ";
my $sth = $dbh->prepare($prep);
$sth->execute($v_rfc );
my ($n_registros) = $sth->fetchrow_array();     
print "este es el numero $n_registros\n";                                                   
#Verifica si existe el empleado entonces
if($n_registros eq 0 ) {
#no existe
print "No existe ese registro<BR>";
$sth->finish;                                                                   
$dbh->disconnect();                                                             
print $q->hr();                                                                 
print $q->end_html();
}#fi($n_registros ==0)       

#Existen registros para ese empleado
if($n_registros eq 1 ) {
#hace una nueva busqueda
$sth->finish;                                                                 
my $prep = "select empledo, puesto, qna, cheque from sueldos where rfc=? ";
my $sth = $dbh->prepare($prep);
$sth->execute($v_rfc );

#Cebeza de la tabla
print "<TABLE Border=10 CellPadding=5><TR>";
# construyendo los encabezados de la tabla                                     
print "<th bgcolor=Red>EMPLEADO</th>
       <th bgcolor=Red>PUESTO</th>
       <th bgcolor=Red>QUINCENA</th>           
       <th bgcolor=Red>SUELDO</th>                                             
       </TR>"
;

while ( my ($empleado, $puesto, $qna, $cheque)=$sth->fetchrow_array() ) {
#Construccion de la tabla para este usuario
# llena la tabla                                                               
print "<TR><TD>"."$empleado"."</TD><TD>"."$puesto"."</TD><TD>"."$qna"."</TD><TD>"."$cheque"."</TD><TD></TR>";     
};                                                                             
print "</TABLE>";

};#fin while
};#fin else
$sth->finish;                                                                   
$dbh->disconnect();                                                             
print $q->hr();                                           
print $q->end_html();
#};#fin if boton


##******************************************************

El problema q tengo es q si este programa se abre en el navegador, no ejecuta la conexion a la base de datos, sale el mensaje de q no se pudo conectar, y cuando lo corro desde la maquina, con "perl patito.pl" si hace la conexion y hace la tabla, lo despliega como corrida, ojala uds, sepan q sucede, ya le busque y no encuentro q pasa.

Gracias, ojala puedan ayudarme.
Mensaje Lun Oct 09, 2006 2:49 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Al principio del programa, donde pone:

Código:
#****************************************************#
#! /usr/bin/perl -w

lo cambias por:
Código:
#!/usr/bin/perl -w
#****************************************************#


Atención al espacio en blanco...
Mensaje Lun Oct 09, 2006 2:54 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

explorer escribió:
Al principio del programa, donde pone:

Código:
#****************************************************#
#! /usr/bin/perl -w

lo cambias por:
Código:
#!/usr/bin/perl -w
#****************************************************#


Atención al espacio en blanco...

En UNIX es mejor esto:
Perl:
#!/usr/bin/env perl
use warnings;

Ya que env conose el path de ejecución de Perl.
Mensaje Lun Oct 09, 2006 4:18 pm
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Responder citando

Saludos, quite ya el espacio en blanco y nada, el problema es q cuando abro este programa con el navegador, yo quisiera la consulta a la bases de datos, pero no la hace, no hay problema cuando la base esta en la misma maquina donde tengo el servidor web, pero esta base que quiero consultar en ese programa esta en otra maquina, no se si haya alguna restriccion, como ya mensione, si corro el programa con la instruccion perl, si se conecta bien a la base de datos, ojala tengan alguna idea.
Mensaje Lun Oct 09, 2006 5:34 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Si, has quitado el espacio en blanco. ¿Pero has puesto como primera línea a #!/usr/bin/perl? Eso es lo importante.

Para comprobar que realmente es un script perl y está bien puesta la cabecera, en vez de ejecutarlo con 'perl patito.pl' hazlo con 'patito.pl'.

¿Qué es lo que sale en los registros de actividad del servidor web (los ficheros log) a la hora de ejecutar el programa? Ahí tendrás muchas pistas.
Mensaje Lun Oct 09, 2006 5:35 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4212
Ubicación: Valladolid, España
Responder citando

Si la base de datos está en otra máquina, quizás tengas que poner el valor 'Host' dentro del 'connect' para que DBI sepa dónde está la base de datos.

Y, naturalmente, el motor de base de datos Informix debe permitir conectarse desde fuera de su máquina.

Y, claro, los puertos de conexión no deben de estar filtrados ni en la máquina de origen ni en la de destino.

Ultima edición por explorer el Lun Oct 09, 2006 5:38 pm, editado 1 vez
Mensaje Lun Oct 09, 2006 5:37 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

No estarás abriendo el programa con un browser como si fuera un HTML, verdad?
Espero que no, porque si es así, je je núnca funcinara.
El servidor ejecuta el script y retorna la salida del programa.
Buno no creo que eso sea pero como se dice por aquí "posr si las moscas".
Algún error que ver?
Viste los logs del servidor?
Por cierto en esta linea:
Perl:
my $dbh = DBI->connect('dbi:Informix:nomina@basedatos','pato','pato')or die print "No hay conexion con la base<br>";

Quita el print, no hace falta.
Ejecuta
Código:
perl  -Mdiagnostics -wc patito.pl

A ver que dice.
Mensaje Mar Oct 10, 2006 2:24 pm
Juan JOse
Perlero Nuevo
Perlero Nuevo
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
Responder citando

Saludos:

Uffffff, el problema esta solucionado, muchas gracias, resulta q cuando corria el programa desde mi usuario el programa se conectaba correctamente, esto porque tiene el profile configurado a un sqlhosts donde esta configuradas las bases a usar, pero cuando se corre desde un navegador, utiliza el usuario del servidor web, y este tenia otro archivo sqlhosts donde no estaba configurada la base de datos a utilizar, muchas gracias, este foro fue de gran ayuda, estare en contacto, jaja, seguramente con mas problemas y dudas.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos Todas las horas son GMT - 6 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2



Powered by phpBB © 2001, 2005 phpBB Group