[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Re: Offtopic: Actualizar BD en perl.



Hola!

On Tue, 15 Jun 1999, Pepe Paniagua wrote:

> Perdon por el off-topic, pero no encuentro como solucionar mi problema,
>  que por cierto esta muy sencillo )
> 
> Tengo una base de datos, en la cual realizan consultas desde el web,
> eliminan registros o dan de alta registros, ( lo hago con php 3.0.9 ) hasta
> aqui todo me funciona, sin embargo es necesario que esta base de datos sea
> actualizada en ocaciones mediante un archivo que tengo en Ascii. el cual lo
> recibo desde una pagina web.  el problema es como le hago para decidir que
> usar si un INSERT o un UPDATE.,  es decir.
> 
> Mi base de datos contiene una tabla con estos registros.
> 1*Fulano de Tal       *Allende 320, colonia azteca
> 2*Perengano de Su*Madero 4020, franccionamiento norte
> 
> Mi archivo ascci que actualizara la base de datos tiene estos dos registros
> 1:Fulano de Tal    :Allende 1100, colonia azteca mixcoat
> 3:Mengano de Tal:Zaragoza 400, col centro
> 
> Por lo tanto el regitro 1 de actualiza y el 3 se inserta para que la tabla
> de la db quede asi.
> 
> 1*Fulano de Tal       *Allende 1100, colonia azteca mixcoat
> 2*Perengano de Su*Madero 4020, franccionamiento norte
> 3*Mengano de Tal   *Zaragoza 400, col centro
> 
> Ya he intentado con varias forma pero no me jala, alguna sugerencia ?
> Al parecer no me va a quedar de otra que meter el archivo a dos bases de
> datos ( ya que noy a borrar el original ) temporales. y de ahi hacer
> manipular los registros de uno por uno.
> 
> 
> Saludos Pepe Paniagua
> 
> ----------------------------------------
> Posdata:
>    De una vez le incluyo algo supersencillo de lo que hago una vez que
> recibo el archivo lista.txt
> 
> #!/usr/bin/perl
> use DBI;
> use CGI;
> 
> # Variables generales para conectarme a la base de datos
> $servidor = "miservidor.com";
> $puerto  = "5432";
> $usuario  = "usupostgres";
> $password = "mipassword";
> $basedato = "clientes";
> 
> # PRIMERO ME CONECTO A LA BASE DE DATOS
> $dbh = DBI->connect("DBI:Pg:dbname=$basedato","$usuario","$password")
> || die "No se puede conectar a la base de datos, error : $DBI::errstr";
> if ( !defined $dbh ) {
> die "Ejele algo se te sebo pepe !\n";
> }
> 
> # AHORA VOY A REALIZAR UNA INSERCION de varios al mismo tiempo
> # PRIMERO PREPARO EL COMANDO
> $sth = $dbh->prepare( "
> COPY usuarios FROM '/usr/local/apache/cgi-bin/dbi/lista.txt' USING
> DELIMITERS ':'  ");
> if ( !defined $sth ) {
> die "Ya valio madrest: $DBI::errstr\n";
> }
> # SEGUNDO ahora debo de ejecutar el comando
> $sth->execute;
> 
> # por ultimo me desconecto de la base de datos
> $dbh->disconnect;
> 
> 
> 

Bueno, yo no he usado PHP para accesar bases de datos, pero por que no,
para cada registro del archivo ascii que recibes, haces un SELECT a la
base de datos buscando dicho registro, si la consulta te regresa una tabla
con registros (hay una funcion en los bind para C de postgresql para
hacer eso, supongo que con PHP tambien), el registro ya existe y entonces
debes hacer UPDATE, si te regresa una tabla sin registros entonces debes
hacer un INSERT.

Espero ayude en algo!


--
Arturo Tena
arturo en directmail org



[Hilos de Discusión] [Fecha] [Tema] [Autor]