Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/10/2011, 15:01
oscarbt
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Transaccion sql desde php no me funciona con artos datos

Buenas a todos, resulta que tengo un problema para insertar unos datos y es que cuando el volumen de la transaccion es muy grande, los datos desde php no se guardan, le hago un echo a la transaccion y copiando y pegando todo en el motor de base de datos (SQL SERVER 2005), la transaccion si se ejecuta correctamente y los datos se guardan..
Mi pregunta es, existe un limite para la insercion de datos en bloque?.....
Aca muestro como hago la transaccion:

Primero la clase conectar (archivo connect):
Código PHP:
Ver original
  1. <?php
  2. class Conectar {   
  3. public $result;
  4. public $numRows,$numFields;
  5. protected $myServer,$myUser,$myPass,$myDB,$s,$conn;
  6. function Conectar($myServer,$myUser,$myPass,$myDB){
  7. //header('Content-Type: text/xml; charset=ISO-8859-1');
  8. $this->myServer = "miservidor";
  9. $this->myUser   = $myUser;
  10. $this->myPass   = $myPass;
  11. $this->myDB     = $myDB;
  12.        
  13. $connectionInfo = array( "Database"=>$myDB,"UID"=>$myUser,"PWD"=>$myPass);
  14. $this->conn = sqlsrv_connect( $this->myServer, $connectionInfo);
  15. if(!$this->conn)
  16. {
  17.   //die( print_r( sqlsrv_errors(), true));
  18.   die( print_r("<h1>La contrase&ntilde;a es incorrecta!!!</h1>", true));
  19. //die( print_r( sqlsrv_errors(), true));
  20.  }
  21.          
  22. }
  23. function transac(){
  24. sqlsrv_begin_transaction($this->conn);
  25. }  
  26. function fin(){
  27. sqlsrv_commit($this->conn);
  28. }
  29. function consulta($query){
  30. $result = sqlsrv_query($this->conn,$query, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
  31. $this-> numRows = sqlsrv_num_rows($result);
  32. $this-> numFields = sqlsrv_num_fields($result);
  33. $this-> result = $result;
  34. }
  35.        
  36. function errores(){
  37. sqlsrv_errors();
  38. }  
  39.  
  40. //con esta funcion ejecuto la transaccion
  41. function accion($query){
  42. if( sqlsrv_query( $this->conn, $query))
  43.  {
  44.   $r = true;
  45.   }
  46.    else{
  47.   echo "Error in statement execution.\n";
  48.     die( print_r( sqlsrv_errors(), true));
  49. $r = false;
  50.  }
  51.    return $r;
  52. }
  53.  
  54. } //fin clase
  55. ?>

Ahora la transaccion:

Código PHP:
Ver original
  1. <?php
  2.  
  3. require('connect.php');
  4.  
  5. $obj = new Conectar($myServer,$myUser,$myPass,$myDB);
  6. $sql2="BEGIN TRANSACTION
  7. BEGIN TRY
  8. declare @consec char(10)
  9. declare @temp int
  10. ";
  11. $sql2=$sql2."set @consec = (select max(HCECONSEC) from hcepicrisis)
  12. set @temp = convert(int,@consec)
  13. set @consec = convert(char(10),@temp)
  14. set @consec = replicate('0' ,10-LEN(@consec))+@consec";
  15. $x = new SimpleXMLElement($archivo, null, true);
  16. $i=1;
  17.  foreach($x->evolucion as $evolucion)
  18.           {
  19.              $fechaepi=$evolucion['fecha'];
  20.              $codparam=$evolucion['codparam'];
  21.            //    $elemento=$evolucion->elemento;
  22.                 $descripcion=$evolucion->descripcion;
  23.              
  24.                // $descripcion=$elemento."".$punto."".$descripcion;
  25.            $sql2=$sql2." INSERT INTO HCEPICRIDET VALUES (@consec, '".$fechaepi."', '".$descripcion."', '".$i."', '".$codparam."')";
  26.                  
  27.            $i++;      
  28.                  }
  29.  
  30. $sql2=$sql2. "SELECT '1' AS RES
  31. COMMIT TRANSACTION BEGIN TRANSACTION END TRY BEGIN CATCH ROLLBACK TRANSACTION
  32. INSERT INTO HCERRORTRAN VALUES ('".$ingreso."', 'EPICRISIS', '".$cedula."', ERROR_MESSAGE(), '".$medico."', '".$fechor."')  
  33. END CATCH
  34. ";    
  35. //con la siguiente linea ejecuto la transaccion
  36. $result2=$obj->accion($sql2);
  37. ?>

Por ejempl cuando son mas de 600 filas las que se insertan en una tabla, la transaccion no me guarda nada, pero menos de 600 filas si guarda

Porque se presenta este problema y de q manera podria solucionarlo?

Agradezco la colaboración o algun enlace donde pueda encontrar información