Firebird21

Por favor ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Búsqueda Avanzada  

Noticias:

Tus inquietudes seran respondidas en breve..

Páginas: [1] 2 3 ... 10
 1 
 en: Agosto 15, 2017, 10:44:11 pm 
Iniciado por Jauma - Último mensaje por Jauma
Tengo un sp que se usa desde un móvil, llamando un procedimiento en php y me he visto obligado a poner el borrado de unos registros que cumplen una condición entre autonomous transaction,
si no lo hago así, no se porque pero se hace automaticamente un rollback de la transacción y no queda borrado.
Si llamo a este sp directamente des el manager, si que funciona correctamente.
Hasta ahora nunca había tenido este problema y aunque lo soluciono poniendo in autonomous transaction, me gustaría saber el motivo.
Desde php conecto con la bd por pdo y de esta manera:
         $co = new PDO("firebird:dbname=bdname;role=rolex", $pusuario, $pclave);
         $co->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Aqui está el sp completo y el autonomous transaction es el unico que hay:

begin
    --Inicio
    carsepreg = '|';
    carsepcamp = '~';
    docsfaltan = '';

    --Compruebo que la ot exista
    clapri = null;
    select codtrapri from ordentrae where codot = :pcodot into clapri;
    if(:clapri is null) then exception errorg 'ERROR: No se encuentra la ot en el servidor.';

    --Miro los documentos propios de la pda que hay en el servidor y que no están en la lista mandada por la pda
    For select clapridoc from docs_ots where codot = :pcodot and creadopda = 'S' into clapri do
    begin
      --si el documento no está en la lista, se borra, es que se habrá borrado de la pda (no debe de interesar)
      if (position(:clapri in :pdatos) = 0) then
      begin
        in autonomous transaction do
        begin
          delete from docs_ots where clapridoc = :clapri;
          delete from docs where clapri = :clapri;
        end
      end
    end

    --Recorro los registros de datos
    for select part from Explode(:pdatos, :carsepreg) into registro do
    begin
        //-he eliminado el codigo de aquí ya que en pruebas, también lo he hecho y sigue teniendo el mismo efecto.
    end
    suspend;
end


** gracias

 2 
 en: Julio 24, 2017, 09:57:16 am 
Iniciado por marcelinoo - Último mensaje por marcelinoo
Buen dia!
  Nuevamente haciendo consulta de sus conocimientos ya que me trabé a lo que intento hacer, el detalle es el siguiente.
He visto en ejemplos que para usar un cursor se declara de esta forma:
 
Código: [Seleccionar]
AS
    DECLARE VARIABLE MiCursor CURSOR FOR (
      SELECT TAR_IDENTI, TAR_NOMBRE FROM TARJETAS);
BEGIN
 
   OPEN MiCursor;     /* Se abre el cursor */
 
   lcContinuar = 'S';
 
   WHILE (lcContinuar = 'S') DO BEGIN
      FETCH MiCursor INTO :tnIdenti, :tcNombre;     /* extrae una fila */
      IF (ROW_COUNT = 1) THEN BEGIN     /* si ROW_COUNT = 1 se leyó una fila */
         tcNombre = tcNombre || ' tarjeta procesada....';
         SUSPEND;
      END ELSE
         lcContinuar = 'N';     /* Si ROW_COUNT = 0 ya no hay más filas */
   END
 
   CLOSE MiCursor; /* Se cierra el cursor */
 
END


esto es la consulta para la misma base de datos, pero cuando la consulta es a una base de datos externa como declaro el cursor ya que la consulta va en una variable y poder recorrer los datos de la consulta con un cursor ejemplo:

Código: [Seleccionar]
as
declare variable Consulta varchar(3500);
begin
lccomando  = ' select
                          socios.socio,
                          socios.nombres,
                          socios.apepaterno,
                          socios.apematerno
                          from socios ';
           
 
for execute statement (cONSULTA)
on external data source 'D:\DATOS\PRUEBA.FDB'
as
user 'SYSDBA'
password 'masterkey'
into
    into :socio,
         :nombres,
         :apepaterno,
         :apematerno
DO
begin
 *codigo a realizar
end

Espero se entienda lo que intento hacer, de antemano muchas gracias

 3 
 en: Julio 20, 2017, 10:48:14 am 
Iniciado por marcelinoo - Último mensaje por marcelinoo
Muchas gracias por la respuesta. Ya aprendí algo mas. Saludos

 4 
 en: Julio 19, 2017, 06:25:25 pm 
Iniciado por marcelinoo - Último mensaje por Walter
En Firebird, los dos puntos delante de una palabra indican que se trata de una variable, no de una columna.

Código: [Seleccionar]
UPDATE
   MiTabla
SET
   MiColumna = :MiColumna;

De esa forma el Firebird puede saber si te estás refiriendo a una columna o a una variable.

Y el nombre de una columna no admite parámetros. Se trata de una unidad lógica.

Saludos.

Walter.

 5 
 en: Julio 19, 2017, 01:35:27 pm 
Iniciado por marcelinoo - Último mensaje por marcelinoo
Buen dia!

El detalle es el siguiente:
  Si agrego un campo de esta forma a una tabla ya existente no hay problema lo hace bien

 
Código: [Seleccionar]
Alter table Reportes add NUMBENEFICIARIO varchar(10)

el problema que no se como ingresar el nombre del campo con parametro(con los dos puntos al inicio de NUMBENEFICIARIO ), intente con esto pero no funciona y no he encontrado información

 
Código: [Seleccionar]
 Alter table Reportes add :NUMBENEFICIARIO varchar(10)

Intento usar así la linea para implementarlo con delphi.

Espero si alguien se a topado con la misma duda pueda compartirla solución.

Muchas gracias por leerme y buen día







 6 
 en: Julio 06, 2017, 08:06:50 pm 
Iniciado por Vigired - Último mensaje por Vigired
Si, voy a hacer ese descarte en cuanto pueda, es bastante seguro que mi problema es similar al tuyo: la pc.

Sin embargo dije en "cuanto pueda" porque ya va mas de una semana que le instale al cliente, el ya pago por ello y me fui (no trabajo en su empresa) quedando como pendiente averiguar ese inconveniente. El cliente prende todas las PCs todos los dias y la "lenta" la deje que se conecte y luego el resto del dia va bien. He conversado por fono con el cliente de otros temas varias veces y ni me menciona sobre la lentitud porque al parecer no le molesta nada. Lo ideal seria ir pero también el tiempo no me va a dar y encima para ir de gratis. Cuando toque el tema con el le dire que copie archivos por red y que me cuente si le va lento... o en todo caso cuando me adquiera otro servicio vere ese tema.

Muchas gracias por tu tiempo y tus respuestas.

 7 
 en: Julio 04, 2017, 02:53:11 am 
Iniciado por Vigired - Último mensaje por petokun
Bueno,
Yo uso siempre alias para conectarme a la base de datos, pero no se si tendrá algo que ver con tu problema.

Antes que ponerte a cambiar la conexión, ¿Has probado a hacer un "ping" desde la maquina que va lenta hacia el servidor o hacia otras máquinas?
Para comprobar que tu conexión está correcta y lo que falla pueda ser otra cosa.

Cuando yo tuve el problema de la conexión lenta (siempre hablamos de abrir la conexión ya que el resto de consultas iban de maravilla),
lo primero que hice fue intentar conectar directamente al servidor con el "isql" para descartar alguna posible incidencia con mi aplicación o el servidor.
Como en la prueba usando isql fue lenta también la apertura de conexión, después hice pruebas de red con un ping al servidor y también me fue muy lenta, ahí fue donde descubrí que el problema no era mi aplicación ni mi conexión...ese equipo tenía algo, mi solución temporal fue poner la conexión con IP y con alias como ya te dije y decirle al cliente que tenía algo mal en ese equipo (el cliente lo vio con sus propios ojos como incluso copiando ficheros en red el equipo era lentísimo en comparación al resto) que no me correspondía a mi arreglarlo.

Yo mas no te puedo ayudar en ese aspecto.
A ver si alguien te puede decir algo.

Un saludo.

 8 
 en: Julio 01, 2017, 07:54:44 pm 
Iniciado por Vigired - Último mensaje por Vigired
Hola gracias por responder-

si mira, no uso alias pero lo conecto casi igual a lo que tu me indicas, es decir, en todas las computadoras de todos los clientes que tengo siempre uso esta forma de conexion:

192.168.1.10:C:/MISISTEMA/MIBD.FDB

y claro el dato del usuario y el password.

¿Crees que deba usar alias? siendo que es esa sola computadora la lenta para conectarse las otras 3 de la misma red se conectan en dos segundos.

 9 
 en: Junio 27, 2017, 10:57:06 am 
Iniciado por Vigired - Último mensaje por petokun
Yo tuve un problema parecido, no se si será la misma solución.

En mi caso era problema con la resolución de nombres de dominio y uno de los PCs, cuando conectaba usando "SERVIDOR:ALIAS_BASEDATOS" al abrir la conexión tardaba casi un minuto, ya después iba bien.
La solución que encontré (después de cambiar cables, tarjetas de red,switch...) fue conectar por IP al servidor "192.168.1.22:ALIAS_BASEDATOS", y funcionó perfectamente.

No se si me expliqué bien ,pero espero que te sirva como ayuda.




 10 
 en: Junio 27, 2017, 08:36:43 am 
Iniciado por cabj2803 - Último mensaje por cabj2803
Es posible que algunos de los pasos me esté faltando. Averiguo bien todo y te vuelvo a molestar.
Muchas gracias Walter!

Páginas: [1] 2 3 ... 10

Enlaces

Blog de Firebird21 WebMaster