NO funciona ADDNEW en postgresql - ADO - VB6

Lists: pgsql-es-ayuda
From: suso <jlcubas(at)terra(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: NO funciona ADDNEW en postgresql - ADO - VB6
Date: 2007-11-02 11:32:22
Message-ID: 7.0.1.0.2.20071102112210.02201600@terra.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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
Islas Canarias


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
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
>


From: "Guillermo =?iso-8859-1?b?TXXxb3o=?=" <guillermo(dot)munoz(at)grupotekne(dot)com(dot)ar>
To: suso <jlcubas(at)terra(dot)es>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: NO funciona ADDNEW en postgresql - ADO - VB6
Date: 2007-11-02 15:40:41
Message-ID: 20071102124041.lp3ja3tnxes40gso@webmail.vit4b.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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

> Hola de nuevo Guillermo, gracias por to atención y respuesta.
>
> Muy bien explicado como siempre:)
>
> El único "problemilla" en usar execute es que a la hora de "ver"
> datos incorrectos, es decir, depurar lo que se introduce en cada
> campo, es dificil detectar ei un dato determinado introducido en un
> determinado campo es incorrecto, y cosas así, pero si no hay otra
> solución, seguimos adelante
>
Bien, vas a tener que hacer las validaciones (de los campos del formulario)
antes de abrir las conexciones y hacerte algunas funciones de conversion para
los caracteres raros (',/,etc),las fechas y los numeros (de coma a puntos)

Saludos

>
>> Quoting suso <jlcubas(at)terra(dot)es>:
>>
>> 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
>
>
> Lo he puesto como me comentas, y me da algún ripo de error, que hace
> crasear al VB y me saca fuera
> puse el execute como sigue
>
> datos.BeginTrans
> tabla.AddNew
>
> tabla.Fields("nombre") = "manuel"
> tabla.Update
> datos.CommitTrans
> tabla.Close
> ...
>
> Ni siquiera me lleva al manejador de error...
> Me tiene un poco "mosca"
>
> Y aparte de so, estoy haciendo un simple listado con un datagrid y un
> control ado, si en la cadena de conexión le pongo un DSN, puedo
> escribir en el datagrid, pero si le pongo la cadena de conexión no me
> deja, sólo me deja leer...
>
>> 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
>>
>
>


From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Guillermo Muñoz <guillermo(dot)munoz(at)grupotekne(dot)com(dot)ar>, 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-04 13:31:17
Message-ID: 683564.13441.qm@web63709.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Yo uso las dos maneras, tambien uso los controles, es
mas es lo que mas uso, los controles y el
dataenviroment y no tengo ningun problema, siendo lo
mas comodo y lo que menos codigo escribir te exije.

Ahora no estoy en en mi pais, regreso el lunes y te
mando ejemplos, por que el consejo de escribir tanto
esta bueno, pero no es lo mas recomiendo.

Atte.
Gabriel Colina

Comparte video en la ventana de tus mensajes (y también tus fotos de Flickr). Usa el nuevo Yahoo! Messenger versión Beta.
http://e1.beta.messenger.yahoo.com/


From: suso <jlcubas(at)terra(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: NO funciona ADDNEW en postgresql - ADO - VB6
Date: 2007-11-04 13:37:03
Message-ID: 7.0.1.0.2.20071104133427.01fcd708@terra.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hoal Gabriel, perfecto, yo he visto código por
internet, de gente que le va bien, yo lo hago
igual (al menos por lo que eo) y no me funciona
como debería, no sé, la verdad, se aburre uno con estos problemas...

Muchas gracias

Saludos
Suso

>Yo uso las dos maneras, tambien uso los controles, es
>mas es lo que mas uso, los controles y el
>dataenviroment y no tengo ningun problema, siendo lo
>mas comodo y lo que menos codigo escribir te exije.
>
>Ahora no estoy en en mi pais, regreso el lunes y te
>mando ejemplos, por que el consejo de escribir tanto
>esta bueno, pero no es lo mas recomiendo.
>
>Atte.
>Gabriel Colina
>
>
>
>
> Comparte video en la ventana de tus
> mensajes (y también tus fotos de Flickr). Usa
> el nuevo Yahoo! Messenger versión Beta.
>http://e1.beta.messenger.yahoo.com/