Ver Mensaje Individual
  #5 (permalink)  
Antiguo 06/09/2005, 07:47
belen_lmvc
 
Fecha de Ingreso: septiembre-2005
Mensajes: 5
Antigüedad: 18 años, 8 meses
Puntos: 0
Hola de nuevo y gracias por tu ayuda.

Te explico una cosa antes de seguir, resulta que esta aplicación yo no la he desarrollado sino que me la he encontrado así y tengo que arreglar todos los errores que aparezcan, adaptarla al IIS (estaba en APACHE) y en un futuro seguir desarrollando cosas nuevas.

Dejando este punto a un lado, cualquier cambio puede afectar a otras zonas de la aplicación y como tú bien me has comentado, no veía lógico meter el new en el while asi que también pensé en lo del método.

Para que no interfiriera en el resto de la aplicación, dejé tal y como te he mostrado el constructor:

// Constructor que contiene los datos //
function Dato($id=false)
{
if ($id)
{
$consulta =" SELECTNombre,";
$consulta .=" Direccion,Poblacion,";
$consulta .= "CodProvi,CodPostal,Telefono,";
$consulta .=" FROM TablaDatos";
$consulta .=" WHERE Id='".$id."'";
$consulta .=" AND FechaHas = '99999999999999'";

$resultado = mssql_query ($consulta);
if ($resultado == 0)
{
echo "ERROR";
exit();
}
$fila = mssql_fetch_array($resultado);

$this->Id = $fila['Id'];
$this->Nombre = $fila[Nombre] ;
$this->Direccion = $fila['Direccion'] ;
$this->Poblacion = $fila['Poblacion'] ;
$this->CodigoPostal = $fila['CodPostal'] ;
$this->Telefono = $fila['Telefono'] ;
}
}
}

y me cree el siguiente método:

function getDatos($id)
{
$consulta =" SELECTNombre,";
$consulta .=" Direccion,Poblacion,";
$consulta .= "CodProvi,CodPostal,Telefono,";
$consulta .=" FROM TablaDatos";
$consulta .=" WHERE Id='".$id."'";
$consulta .=" AND FechaHas = '99999999999999'";

$resultado = mssql_query ($consulta);
if ($resultado == 0)
{
echo "ERROR";
exit();
}
$fila = mssql_fetch_array($resultado);

$this->Id = $fila['Id'];
$this->Nombre = $fila[Nombre] ;
$this->Direccion = $fila['Direccion'] ;
$this->Poblacion = $fila['Poblacion'] ;
$this->CodigoPostal = $fila['CodPostal'] ;
$this->Telefono = $fila['Telefono'] ;

return $this;
}

Con este nuevo método, la otra función quedaba así:

function RecogerDatos()
{
$datos = array();
$consulta = " SELECT que me devuelve más de un registro";
$resultado = mssql_query ($consulta);

if ($resultado == 0)
{
echo "Error en la consulta"
exit();
}

if ($resultado!=1)
{
$dato_i = new Dato(); <-- al no pasarle argumento, no id=false por lo que no se mete en la consulta
while ($fila=mssql_fetch_array($resultado))
{
array_push($datos,$dato_i->getDatos($fila['Id']));
}
}
return $datos;
}

Creo que esto se ajusta a lo que me comentas en tu contestación. Pues bien, cuando ejecuté este código el recorset seguía perdiéndose en la segunda pasada del while. De hecho con un único registro no hay problema porque este y el otro código no da errores.

Todas estas cosas extrañas son lo aun más porque en otro servidor la misma aplicación, es decir el primer código del principio funciona correctamente y no se pierde el recorset en ningún momento.

A ver si con tu ayuda puedo arreglar esto en este servidor concreto porque la verdad es que estoy ya un poco desesperada.

Un Saludo y gracias de nuevo