RE: PROBLEMA BEGIN COMMIT

From: Juan Carlos Alemán Cuadros <jaleman(at)layconsa(dot)com(dot)pe>
To: "'Gabriel Ferro'" <gabrielrferro(at)yahoo(dot)com(dot)ar>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: PROBLEMA BEGIN COMMIT
Date: 2007-03-01 17:42:20
Message-ID: 007901c75c28$f69278b0$5d00000a@jaleman
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

No soy un experto en postgres ya que recien me he iniciado, pero en visual
basic pienso que deberias de hacer esto si utilizas coneccion ado.
cnn.BeginTrans
'cnn.Execute "BEGIN;" Omites esta linea
cnn.Execute "SET CLIENT_ENCODING TO 'LATIN1';"
pop = "SELECT * from ""Recibidas"" order by
""Dpta"",""Sumario"",""TipoInfo"""
Set tuplas = cnn.Execute(pop)
If tuplas.EOF() = False Then
tuplas.MoveFirst
Do While Not tuplas.EOF()
cnn.Execute("INSERT INTO ""RecibidasDes"" VALUES ('" & tuplas!Dpta &
"','" & tuplas!sumario & "','" & tuplas!TipoInfo & "','" &
recuperararos(tuplas!info) & "');")

Y AQUI SE CIERRA EL PROGRAMA, SIN ANTES LLEGAR A LA INSTRUCCION
' cnn.Execute "COMMIT;" Omites esta linea
cnn.CommitTrans

Y si manejas errores deberias de tener un

cnn.RollbackTrans

Espero te ayude

saludos

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Alvaro Herrera
Enviado el: Jueves, 01 de Marzo de 2007 12:09 p.m.
Para: Gabriel Ferro
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] PROBLEMA BEGIN COMMIT

Gabriel Ferro escribió:
> Tengo una duda (una de tantas) si tengo una serie de instrucciones
> dentro de un begin commit, las que voy ejecutando desde un programa en
> VB6, si el programa se cierra inesperadamente no dberia deshacerse las
> operaciones?. esto no me funcionó por ejemplo tengo
>
> cnn.Execute "BEGIN;"
> cnn.Execute "SET CLIENT_ENCODING TO 'LATIN1';"
> pop = "SELECT * from ""Recibidas"" order by
> ""Dpta"",""Sumario"",""TipoInfo"""
> Set tuplas = cnn.Execute(pop)
> If tuplas.EOF() = False Then
> tuplas.MoveFirst
> Do While Not tuplas.EOF()
> cnn.Execute("INSERT INTO ""RecibidasDes"" VALUES ('" & tuplas!Dpta &
"','" & tuplas!sumario & "','" & tuplas!TipoInfo & "','" &
recuperararos(tuplas!info) & "');")
>
> Y AQUI SE CIERRA EL PROGRAMA, SIN ANTES LLEGAR A LA INSTRUCCION
> cnn.Execute "COMMIT;"
>
> AL CONSULTAR LA TABLA EL REGISTRO EFECTIVAMENTE SE INSERTO, ¿COMO
> IMPEDIR ESTO? ¿COMO HACER UN ROOLBACK CUANDO ESTO OCURRE?

Postgres hace eso que tu dices: si la transaccion queda sin cerrar, como en
el caso de arriba, se asume que debe ser abortada. Lo que se me ocurre para
explicar lo que estas viendo es:

1. VB esta "amablemente" haciendo un COMMIT al cerrar el programa 2. En
alguna parte alguien esta haciendo un COMMIT sin que te des cuenta 3. Tu
codigo tiene un bug que hace COMMIT y no te has dado cuenta 4. el BEGIN no
se esta ejecutando

Creo que lo que deberias hacer es activar log_statements en postgresql.conf
para verificar cuales sentencias realmente estan siendo ejecutadas.

--
Alvaro Herrera
http://www.advogato.org/person/alvherre
"No hay ausente sin culpa ni presente sin disculpa" (Prov. francés)

---------------------------(fin del mensaje)---------------------------
TIP 7: no olvides aumentar la configuración del "free space map"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message PAUL ELGUERA MEZA 2007-03-01 17:56:48 Re: Consulta a multiples BDs
Previous Message Espartano 2007-03-01 17:22:34 Re: Consulta a multiples BDs