Jue Sep 21, 2006 1:46 pm
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
| Como conecto un servidor web con uno de bases de datos |
|
|
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. |
|
|
|

Jue Sep 21, 2006 2:41 pm
|
 |
AkonD
Perlero Nuevo

|
Registrado: 06 Oct 2005
Mensajes: 50
Ubicación: España
|
|
|
|
|
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.. |
|
Jue Sep 21, 2006 6:49 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
| En el dbi debes indicar el host al que te vas a conectar. |
|
Vie Sep 22, 2006 12:45 pm
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
|
|
|
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. |
|
Vie Sep 22, 2006 2:01 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
Vie Sep 22, 2006 4:04 pm
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
|
|
|
| gracias, en el link que pones encontre una explicacion de como solucionar el problema, en seguida la pruebo y comento el resultado, nuevamente gracias. |
|

Vie Sep 29, 2006 4:21 am
|
 |
macgregor
Perlero Frecuente

|
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
|
|
|
|
|
| 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
Un saludo |
|

Lun Oct 09, 2006 11:05 am
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
| Hace la conexion pero no muestra la informacion en la WEB |
|
|
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. |
|

Lun Oct 09, 2006 2:49 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|
Lun Oct 09, 2006 2:54 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
| 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:
Ya que env conose el path de ejecución de Perl. |
|

Lun Oct 09, 2006 4:18 pm
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
|
|
|
| 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. |
|

Lun Oct 09, 2006 5:34 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|

Lun Oct 09, 2006 5:35 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4225
Ubicación: Valladolid, España
|
|
|
|
|
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 |
|

Lun Oct 09, 2006 5:37 pm
|
 |
creating021
Vive para Perl en Español

|
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
|
|
|
|
|
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. |
|

Mar Oct 10, 2006 2:24 pm
|
 |
Juan JOse
Perlero Nuevo

|
Registrado: 21 Sep 2006
Mensajes: 10
Ubicación: Desarrollo
|
|
|
|
|
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. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|