Foros del Web » Programación para mayores de 30 ;) » Programación General »

Problema en $sth->execute

Estas en el tema de Problema en $sth->execute en el foro de Programación General en Foros del Web. Tengo el siguiente trozo de código, es una función que se encarga de mirar cual es el mayor código de barras que hay en la ...
  #1 (permalink)  
Antiguo 11/12/2008, 04:01
Avatar de tammyrey  
Fecha de Ingreso: octubre-2008
Ubicación: Galicia :)
Mensajes: 95
Antigüedad: 15 años, 6 meses
Puntos: 1
Problema en $sth->execute

Tengo el siguiente trozo de código, es una función que se encarga de mirar cual es el mayor código de barras que hay en la base de datos del tipo hbyymmincr (Home Branch+Year+Month+Incremental).
El mayor problema lo tengo en la frase en rojo, puesto que no me devuelve ningún valor. Por lo tanto no detecta que hay un código del tipo hbyymmincr en la BD. Por lo tanto toma el valor inicial, por ejemplo, "OLE108120001" luego le suma 1 y cada vez que quiero catalogar un nuevo libro me pone que el código que toca es el "OLE108120002" pero ese ya está introducido por lo tanto código duplicado...
LLevo varios días dándole vueltas y ya no se qué pasa.
Ojalá me podais ayudar... gracias a todos... si teneis alguna duda preguntad!!
--------------------------------------------------------------------------------------------------------
La función es la siguiente:

sub db_max ($;$) {
my $self = shift;
my $query = "SELECT MAX(SUBSTRING(barcode,-$width)), barcode FROM items WHERE barcode REGEXP ? GROUP BY barcode";
$debug and print STDERR "(hbyymmincr) db_max query: $query\n";
my $sth = C4::Context->dbh->prepare($query);
my ($iso);
if (@_) {
my $input = shift;
$iso = C4::Dates->new($input,'iso')->output('iso'); # try to set the date w/ 2nd arg
unless ($iso) {
warn "Failed to create 'iso' Dates object with input '$input'. Reverting to today's date.";
$iso = C4::Dates->new->output('iso'); # failover back to today
}
} else {
$iso = C4::Dates->new->output('iso');
}
my $year = substr($iso,2,2); # i.e. "08" for 2008
my $andtwo = $width+2; #$width vale 4
$sth->execute("^[a-zA-Z]{1,4}" . $year . "[0-9]{$andtwo}"); # the extra two digits are the month. we don't care what they are, just that they are there.
warn "CONTENIDO: ".$sth->rows;
unless ($sth->rows) {
warn "No existing hbyymmincr barcodes found. Reverting to initial value.";
return $self->initial;
}
my ($row) = $sth->fetchrow_hashref;
my $max = $row->{barcode};
warn "barcode max (hbyymmincr format): $max" if $debug;
return ($max || 0);
}
  #2 (permalink)  
Antiguo 11/12/2008, 06:07
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Problema en $sth->execute

Cita:
Home Branch+Year+Month+Incremental
porque juntar 4 valores en uno, es muuucho más fácil tenerlo en campos separados y buscar sus valores...

Cita:
$sth->execute("^[a-zA-Z]{1,4}" . $year . "[0-9]{$andtwo}");
Es una expresión regular soportada por MySQL ? porque le estás pasndo un parámetro medio raro...probaste en algún phpmyadmin o mysql query broser si funcionaba bien ese parámetro ?

primero probalo en SQL puro, luego intentá pasarlo a perl...

__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 12/12/2008, 05:43
Avatar de tammyrey  
Fecha de Ingreso: octubre-2008
Ubicación: Galicia :)
Mensajes: 95
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Problema en $sth->execute

el caso es que este código ya viene hecho por los creadores de la aplicación... pero no acaba de funcionar correctamente....
Tenemos varios dominios, y varias bibliotecas en cada dominio.... y necesitamos que para cada nueva catalogación se introduzca un código de barras...
Por ejemplo:

Tenemos estas bibliotecas:
Dominio 1 ->Biblio1, Biblio2,Biblio3
Dominio 2 ->Otra1, Otra2,Otra3

Y al hacer las catalogaciones debería ir introduciendo en la BD los siguientes códigos:
Biblio108120001,Otra208120001,Biblio108120002,Otra 308120001,Otra208120002,Otra208120003

No se si mas o menos entendeis lo que ocurre... El código esta formado por Código Biblioteca(Biblio1)+ Año(08)+Mes(12)+Incremental(0001)
Debe buscar cual es el último código que está en la BD de la biblioteca en la que hago la catalogación, es decir, si yo quiero catalogar un nuevo libro en Biblio1... debe ver que el último código introducido es Biblio108120002 y ahora toca el Biblio108120003...

Me explico??? Gracias por vuestra ayuda!!

Última edición por tammyrey; 12/12/2008 a las 05:53 Razón: se envió el solo al pulsar tab y enter... y no había terminado de redactarlo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:08.