Foros del Web » Programando para Internet » PHP »

Mi consulta omite el primer registro de la bd

Estas en el tema de Mi consulta omite el primer registro de la bd en el foro de PHP en Foros del Web. A quien corresponda: Solicitando de su ayuda de forma URGENTE, resulta que tengo una tabla con datos de clientes. Con el código que les adjunto ...
  #1 (permalink)  
Antiguo 12/06/2012, 10:44
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Exclamación Mi consulta omite el primer registro de la bd

A quien corresponda:
Solicitando de su ayuda de forma URGENTE, resulta que tengo una tabla con datos de clientes. Con el código que les adjunto se supone que estoy realizando una conexion a la base, guardo en un arreglo los datos seleccionados y muestro en forma de lista el nombre de los clientes que estan en la tabla. El problema esta que siempre me omite el primer registro y no lo muestra en pantalla, es decir si en total hay 10 registros me muestra del 10 al 2...

if($con_bd = odbc_connect ( 'ReporteNomina', '', '')){
//SELECCIONA TODOS LOS NOMBRES DE LOS CLIENTES OMITIENDO REPETIDOS
$isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
$result = odbc_exec ($con_bd , $isql);
};
//GUARDA LOS NOMBRES DE CLIENTES EN EL ARREGLO
$valor = odbc_fetch_array($result);
//CREA UNA LISTA ORDENADA E INSERTA LOS NOMBRES DE CLIENTES
echo "<ol>";
while ($valor = odbc_fetch_array($result)) {
$CLIENTE=$valor['NOMBRE_COMERCIAL'];
?>
<li><A HREF="n_extraeinfo.php?user=<?php echo $user?>&tipouser=<?php echo $tipouser?>&cte=<?php echo $CLIENTE?>" TARGET="info_nom"><FONT COLOR="BLUE" SIZE=2><b><?php echo $CLIENTE?></b></FONT></A>
<?php
};
echo "</ol>";


odbc_close($con_bd);
?>
  #2 (permalink)  
Antiguo 12/06/2012, 10:50
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Respuesta: Mi consulta omite el primer registro de la bd

Prueba colocando

Código PHP:
Ver original
  1. while (odbc_fetch_array($result)) {

Y me dices...


P.D.: Por amor a Jebus! Usen la función Highlight... Asi es mas facil ayudarlos!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #3 (permalink)  
Antiguo 12/06/2012, 11:05
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Heiroon muchisimas gracias por tu ayuda. Ya he probado el cambio y ahora me muestra el primer registro pero repetido tantas veces funcione el while por ejemplo si yo tengo:
aguila, avestruz, buitre, buho, halcon, halcon, murcielago, paloma, pavoreal (lo que me muestra es):

1. aguila
2. aguila
3. aguila
4. aguila
5. aguila
6. aguila
7. aguila

Y por lo que pude apreciar esta omitiendo un registro, porque se tuvo que haber impreso 8 veces y no 7...
  #4 (permalink)  
Antiguo 12/06/2012, 11:13
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Respuesta: Mi consulta omite el primer registro de la bd

A ver, muestrame el código. Pero usa la función Highlight del editor para poder leer mejor!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #5 (permalink)  
Antiguo 12/06/2012, 11:21
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

a ver si asi esta mejor, porque la verdad nunca habia utilizado Highlight
Código PHP:
Ver original
  1. if($con_bd = odbc_connect ( 'ReporteNomina', '', '')){
  2. //SELECCIONA TODOS LOS NOMBRES DE LOS CLIENTES OMITIENDO REPETIDOS
  3. $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  4. $result = odbc_exec ($con_bd , $isql);
  5. };
  6. //GUARDA LOS NOMBRES DE CLIENTES EN EL ARREGLO
  7. $valor = odbc_fetch_array($result);
  8. //CREA UNA LISTA ORDENADA E INSERTA LOS NOMBRES DE CLIENTES
  9. echo "<ol>";
  10. while (odbc_fetch_array($result)) {
  11. $CLIENTE=$valor['NOMBRE_COMERCIAL'];
  12. ?>
  13. <li><A HREF="n_extraeinfo.php?user=<?php echo $user?>&tipouser=<?php echo $tipouser?>&cte=<?php echo $CLIENTE?>" TARGET="info_nom"><FONT COLOR="BLUE" SIZE=2><b><?php echo $CLIENTE?></b></FONT></A>
  14. <?php
  15. };
  16. echo "</ol>";
  17. odbc_close($con_bd);
  18. ?>
  #6 (permalink)  
Antiguo 12/06/2012, 11:36
Avatar de montealegreluis  
Fecha de Ingreso: mayo-2012
Ubicación: Puebla, Puebla
Mensajes: 64
Antigüedad: 11 años, 10 meses
Puntos: 16
Respuesta: Mi consulta omite el primer registro de la bd

Creo que debería ser así

Código PHP:
Ver original
  1. //GUARDA LOS NOMBRES DE CLIENTES EN EL ARREGLO
  2. //$valor = odbc_fetch_array($result); //Este en realidad no lo necesitas
  3. //CREA UNA LISTA ORDENADA E INSERTA LOS NOMBRES DE CLIENTES
  4. echo "<ol>";
  5. while ($valor = odbc_fetch_array($result)) {
  6. $CLIENTE=$valor['NOMBRE_COMERCIAL'];
  7. ?>
__________________
RTFM: Read The Fine Manual...

http://www.comunidadphppuebla.com
https://github.com/ComPHPPuebla
  #7 (permalink)  
Antiguo 12/06/2012, 11:58
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Mi consulta omite el primer registro de la bd

la verdad yo te recomiendo que uses un for mas bien...

algo parecido a esto

Código PHP:
Ver original
  1. <?php
  2.  
  3.  $values = array('aguila', 'avestruz', 'buitre', 'buho', 'halcon', 'halcon', 'murcielago', 'paloma', 'pavoreal');
  4.  
  5.  $t = count($values);
  6.  
  7.  for ($i = 0; $i < $t; $i++ )
  8.  {
  9.     print $values[$i]."<br/>";
  10.  }
  11. ?>
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #8 (permalink)  
Antiguo 12/06/2012, 11:59
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Heiroon montealegreluis Muchas gracias a ambos, solo me queda la duda ¿porque se omitia el primer registro? y ¿cual sería la lectura lógica que se le daría al $valor = odbc_fetch_array($result) dentro del while...
  #9 (permalink)  
Antiguo 12/06/2012, 12:00
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por jestavio Ver Mensaje
Heiroon montealegreluis Muchas gracias a ambos, solo me queda la duda ¿porque se omitia el primer registro? y ¿cual sería la lectura lógica que se le daría al $valor = odbc_fetch_array($result) dentro del while...
Se omite porque antes del while() ya haces un odbc_fetch_array(), lo cual consume el primer registro.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 12/06/2012, 12:05
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por pateketrueke Ver Mensaje
Se omite porque antes del while() ya haces un odbc_fetch_array(), lo cual consume el primer registro.
Gracias por la aportación...
  #11 (permalink)  
Antiguo 12/06/2012, 12:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por Heiroon Ver Mensaje
la verdad yo te recomiendo que uses un for mas bien...

algo parecido a esto

Código PHP:
Ver original
  1. <?php
  2.  
  3.  $values = array('aguila', 'avestruz', 'buitre', 'buho', 'halcon', 'halcon', 'murcielago', 'paloma', 'pavoreal');
  4.  
  5.  $t = count($values);
  6.  
  7.  for ($i = 0; $i < $t; $i++ )
  8.  {
  9.     print $values[$i]."<br/>";
  10.  }
  11. ?>
Muchas gracias Heiroon, es excelente la opción del for, pero en este caso yo no se cuantos registros pueda tener mi base, es una base dinámica, hoy puede tener 10 mañana 50. En el caso del for entiendo lo puedo ocupar a la perfección si se conoce el numero de registros. Sin embargo me es múy útil para proximos códios, gracias...
  #12 (permalink)  
Antiguo 12/06/2012, 12:12
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Mi consulta omite el primer registro de la bd

precisamente para eso es esta linea amigazo!

Código PHP:
Ver original
  1. $t = count($values);

Con ella cuentas la cantidad de registros y guardas el total en $t...

P.D.: Obviamente tu no usaras $values, sino:

Código PHP:
Ver original
  1. $valor = odbc_fetch_array($result)
  2. $t = count($valor);
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #13 (permalink)  
Antiguo 12/06/2012, 12:21
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Pero dentro de mi códgio como lo aplicaría:

Código PHP:
Ver original
  1. $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  2. $result = odbc_exec ($con_bd , $isql);
  3. };
  4. $valor=odbc_fetch_array($result);
  5. $t=count($valor);

ó

Código PHP:
Ver original
  1. $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  2. $result = odbc_exec ($con_bd , $isql);
  3. };
  4. $t=count(odbc_fetch_array($result));

ó

Código PHP:
Ver original
  1. $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  2. $result = odbc_exec ($con_bd , $isql);
  3. };
  4. $t=count($valor = odbc_fetch_array($result));
  #14 (permalink)  
Antiguo 12/06/2012, 12:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 103
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: Mi consulta omite el primer registro de la bd

Yo creo que iría mejor así:
Código PHP:
echo "<ol>";
do {
   
$CLIENTE=$valor['NOMBRE_COMERCIAL'];
while (
$valor odbc_fetch_array($result)); 
__________________
salud
ainvar de los carnutos
  #15 (permalink)  
Antiguo 12/06/2012, 12:43
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Mi consulta omite el primer registro de la bd

@jestavio en vez de usar odbc_fetch_array() usa odbc_fetch_row(), entonces colocas

Código PHP:
Ver original
  1. $registers = odbc_fetch_row($result);
  2.  $t=count($registers);
  3.  
  4.  for ($i = 0; $i < $t; $i++ )
  5.  {
  6.     print $registers[$i]."<br/>";
  7.  }

y eso reemplazaria a tu while... Prueba y me dices!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #16 (permalink)  
Antiguo 12/06/2012, 12:55
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

ya acondicione mi código al For... pero no me muestra nada, y si imprimo en pantalla el resultado de $t=count($registers) me da "1"

Código PHP:
Ver original
  1. if($con_bd = odbc_connect ( 'ReporteNomina', '', '')){
  2.  //SELECCIONA TODOS LOS NOMBRES DE LOS CLIENTES OMITIENDO REPETIDOS
  3.   $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  4.   $result = odbc_exec ($con_bd , $isql);
  5.   };
  6.   $registers = odbc_fetch_row($result);
  7.   $t=count($registers);
  8.   for ($i = 0; $i < $t; $i++ ) {
  9.   print $registers[$i]."<br/>";
  10.   };
  11.   odbc_close($con_bd);
  #17 (permalink)  
Antiguo 12/06/2012, 13:01
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Exclamación Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por jestavio Ver Mensaje
ya acondicione mi código al For... pero no me muestra nada, y si imprimo en pantalla el resultado de $t=count($registers) me da "1"

Código PHP:
Ver original
  1. if($con_bd = odbc_connect ( 'ReporteNomina', '', '')){
  2.  //SELECCIONA TODOS LOS NOMBRES DE LOS CLIENTES OMITIENDO REPETIDOS
  3.   $isql = "SELECT DISTINCT NOMBRE_COMERCIAL from ReporNomi ORDER by NOMBRE_COMERCIAL ASC";
  4.   $result = odbc_exec ($con_bd , $isql);
  5.   };
  6.   $registers = odbc_fetch_row($result);
  7.   $t=count($registers);
  8.   for ($i = 0; $i < $t; $i++ ) {
  9.   print $registers[$i]."<br/>";
  10.   };
  11.   odbc_close($con_bd);
Y usando odbc_fetch_array tambien te da 1?
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #18 (permalink)  
Antiguo 12/06/2012, 13:07
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por Heiroon Ver Mensaje
Y usando odbc_fetch_array tambien te da 1?
Exactly!!!!! Es lo mismo. Lo que estuve leyendo antes de llegar al foro fue que ese es un valor Boolean par verdadero y -1 para Falso, en este caso nos esta diciendo que si contiene valores... o tu que opinas?
  #19 (permalink)  
Antiguo 12/06/2012, 13:10
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
De acuerdo Respuesta: Mi consulta omite el primer registro de la bd

Opino que uses esto... Cambia la linea del total por

Código PHP:
Ver original
  1. $t = odbc_num_rows($result);

__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #20 (permalink)  
Antiguo 12/06/2012, 13:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 40
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Mi consulta omite el primer registro de la bd

Cita:
Iniciado por Heiroon Ver Mensaje
Opino que uses esto... Cambia la linea del total por

Código PHP:
Ver original
  1. $t = odbc_num_rows($result);

Ahora me da -1
  #21 (permalink)  
Antiguo 12/06/2012, 13:34
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Mi consulta omite el primer registro de la bd

Eso quiere decir que hay un error en la consulta.. revisala bien!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
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 16:21.