Foros del Web » Programando para Internet » PHP »

Transaccion sql desde php no me funciona con artos datos

Estas en el tema de Transaccion sql desde php no me funciona con artos datos en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/10/2011, 15:01
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años, 7 meses
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

Etiquetas: sql, tabla, transacciones
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 04:35.