Re: NO funciona ADDNEW en postgresql - ADO - VB6

From: Guillermo Muñoz <guillermo(dot)munoz(at)grupotekne(dot)com(dot)ar>
To: pgsql-es-ayuda(at)postgresql(dot)org, "suso" <jlcubas(at)terra(dot)es>
Subject: Re: NO funciona ADDNEW en postgresql - ADO - VB6
Date: 2007-11-02 14:50:41
Message-ID: 008601c81d5f$bdc9d980$2601010a@gg07030802
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Quoting suso <jlcubas(at)terra(dot)es>:

> Hola de nuevo, como verán estoy haciendo pruebas, antes de trabajar en
> serio con postgresql, el problema es como dije arriba que no puedo añadir
> o borrar datos de una tabla, el códgi que uso es el siguiente :
>
> AQUI HAGO LA CONEXIÓN Y ABRO LA TABLA
>
> Set datos = New Adodb.Connection
> cadena = "Provider=PostgreSQL.1;Password=xxxxx;User ID=postgres;Data
> Source=localhost;Location=prueba"
> datos.ConnectionString = cadena
> datos.Mode = adModeReadWrite
> datos.Open
> datos.CommandTimeout = 20
> Set tabla = New Adodb.RecordSet
> tabla.CursorType = adOpenDynamic
> tabla.CursorLocation = adUseClient
> tabla.Open "select * from nombres", datos, adOpenDynamic,
> adLockOptimistic
>
> AQUI HAGO L AOPERACIÓN DE AÑADIR Y/O BORRAR
>
> On Error GoTo ErrorHandler
> datos.BeginTrans
>
> If tabla.ActiveConnection = False Then
> Print "conexión cerrada " ' esto lo hago para saber si la
> conexión está o no abierta
> End If
> valor = tabla.Fields("nombre") ' aquí leo este valor solo para volver
> a comprobar si la conexión esta abierta o no
>
>
> tabla.AddNew
>
> 'tabla.Fields("nombre") = "manuel"
>
> AL LLEGAR A ESTE DATO DE ASIGNACIÓN DE DATOS ME DA ERROR :
>
> La operación en varios pasos generó errores, compruebe los valores de
> estado
>
> tabla.Fields("tlfno") = 12457
> tabla.UpdateBatch
> datos.CommitTrans
> tabla.Close
> Exit Sub
> ErrorHandler:
> DisplayError (Err.Description)
>
>
> Como verán he puesto un par de "cosillas" para ver el estado de la
> conexión y demás para saber si esta abierta.
> Alguna sugerencia?.
>
> Gracias por adelantado

suso, yo trabaje varios años programando en VB6 y postgres. la metodologia
que estas usando es para herramientas de micrososft (access o sqlserver) ahi
funciona bien. la metodologia que tenia era correr directamente los inserts
o update sobre la conexion usando transacciones por ejemplo:
Set datos = New Adodb.Connection
cadena = "Provider=PostgreSQL.1;Password=xxxxx;User
ID=postgres;Data Source=localhost;Location=prueba"
datos.ConnectionString = cadena
datos.Mode = adModeReadWrite
datos.Open
datos.CommandTimeout = 20
Set tabla = New Adodb.RecordSet
tabla.CursorType = adOpenDynamic
tabla.CursorLocation = adUseClient
'determinar si el registro en cuestion existe o no
tabla.Open "select id from nombres where id=" & parametroid, datos,
adOpenDynamic, adLockOptimistic
On Error GoTo ErrorHandler
datos.BeginTrans
if tabla.eof then 'el registro no existe
sql="insert into nombres values(......)"
else 'el registro existe
sql="update nombres set .... where id=" & parametroid
end if
datos.execite sql 'ejecuta la sentecia
datos.CommitTrans
tabla.Close
datos.close
set tabla=nothing
set datos=nothing 'importanticimo
Exit Sub
ErrorHandler:
DisplayError (Err.Description)
if datos.state=1 then
datos.rollbacktrans
datos.close
set datos=nothing 'importanticimo
end if
end sub

a grandes razgos esa era la metodologia usada, algunos tip:
Cursores del lado del seridor: falla
hacer nothing tando de los recorset como de las connections
usar adOpenDynamic en recordset solo si te vas a mover de atras para
adelante, sino usa el static
etc

tambien tiene que ver mucho el ODBC que estes usando, yo hace 2 años que no
desarrollo en postgres y en ese tiempo era la unica forma.

Es buena opcion usar adodb en vez de los controles, como ya habias
preguntado

Saludos, espero te sirva
Guillermo Muñoz

>
> suso
> Islas Canarias
>
>
> --
> TIP 5: ¿Has leído nuestro extenso FAQ?
> http://www.postgresql.org/docs/faqs.FAQ.html
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rafael Yordanis Rodríguez Montero 2007-11-02 15:29:41 RE: pregunta sobre trigger
Previous Message Felipe Amezquita 2007-11-02 14:34:55 could not open relation