RE: RV: ayuda please INSERT VISUAL B 6 POSTGRES

From: "\(Syswarp\) Carlos Enrique Perez" <carlos(dot)perez(at)syswarp(dot)com(dot)ar>
To: "'Emanuel CALVO FRANCO'" <postgres(dot)arg(at)gmail(dot)com>, "'pgsql-es-ayuda'" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: RV: ayuda please INSERT VISUAL B 6 POSTGRES
Date: 2008-11-07 15:29:05
Message-ID: 74307AC715F0461F9BD078DF83791759@cocot
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Te paso un pedazo de codigo y te explico un poco el tema para que lo puedas
ver rapido.
Con esta funcion lo que haces es lo siguiente ,usa adodb que es un cañito:
Primero crear un recordset con la estructura de campos que necesitas pasarle
al insert, esto te va a ayudar a que si por ej. Tenes que hacer 700 inserts,
lo podes hacer transaccional llenando primero un solo recordset con los 700
registros y pasandoselos a la funcion.
Una vez que llenaste la funcion, simplemente la invocas.
Aca nosotros para esto usamos stored procedures pero los cambios para
postgres son minimos, te los escribo y si me olvido de alguno disculpame por
favor.
.Provider = "SQLOLEDB" va el de postgres
.CommandType = adCmdStoredProc va adCmdSQL

Seguro que tal como esta la funcion no te va a servir, pero si pedazos de
codigo de ahí, porque por ejemplo hay algo bueno que es no tener la
necesidad de tener que poner apostrofos ni nada de eso... Y mucho mejor, no
te pinchan nombres como O higgins cuando tienen apostrofo
Otra recomendación es la queres hacer bien prolijita, creala en un modulo de
clase y si podes ponela en el servidor mediante COM+, de esta forma se
ejecuta en el servidor y no en el cliente, y el pasaje de informacion es
delgado ya que los recordset tienen ese proposito.
Espero te sirva
Saludos
Carlos.

Public Function Transaccion(SP As String, cadenaConexion As String, Optional
Datosrec As Variant = vbNullString) As Recordset
Dim rsRecordset As ADODB.Recordset
Dim rsOpen As ADODB.Recordset
Dim datos As Variant
Dim Regs As Integer
Dim Trans As Boolean
Dim i As Integer
Dim n As Integer
Dim Campos As Integer


On Error GoTo trapito
'Establece la conexión
Set Conexion = New ADODB.Connection
With Conexion
.ConnectionTimeout = 0
.Provider = "SQLOLEDB"
.ConnectionString = cadenaConexion
.CursorLocation = adUseClient
.Open
End With
Set cdCommand = New Command
With cdCommand
.CommandText = SP
.CommandType = adCmdStoredProc
.CommandTimeout = 0
.ActiveConnection = Conexion
End With
'cdCommand.Parameters.Delete
Set rsOpen = New ADODB.Recordset
If IsObject(Datosrec) Then
Set rsRecordset = Datosrec
Regs = rsRecordset.RecordCount
Campos = rsRecordset.Fields.Count
If Regs = 1 Then
For i = 1 To Campos
cdCommand.Parameters(i).Value = rsRecordset.Fields(i - 1).Value
Next i
rsOpen.Open cdCommand, , adOpenDynamic, adLockBatchOptimistic
Set Transaccion = rsOpen
ElseIf Regs > 1 Then
rsRecordset.MoveFirst
Conexion.BeginTrans
Trans = True
For n = 0 To Regs - 1
For i = 1 To rsRecordset.Fields.Count
cdCommand.Parameters(i).Value = rsRecordset.Fields(i -
1).Value
Next i
If n = Regs - 1 Then
'cdCommand.Execute
rsOpen.Open cdCommand, , adOpenDynamic,
adLockBatchOptimistic
Set Transaccion = rsOpen
Else
cdCommand.Execute
rsRecordset.MoveNext
End If
Next n
Conexion.CommitTrans

End If

ElseIf IsArray(Datosrec) Then
'Tratamiento de matriz
'rsRecordset = trnArray(SP, Datosrec)
ElseIf Datosrec = vbNullString Then
'cdCommand.Execute
rsOpen.Open cdCommand, , adOpenDynamic, adLockBatchOptimistic
Set Transaccion = rsOpen
Else
cdCommand.Parameters(1).Value = Datosrec
'cdCommand.Execute
rsOpen.Open cdCommand, , adOpenDynamic, adLockBatchOptimistic
Set Transaccion = rsOpen
End If
If Transaccion.Fields.Count > 0 Then
Transaccion.ActiveConnection = Nothing
End If
Set rsRecordset = Nothing
Set cdCommand = Nothing
Set Conexion = Nothing
Exit Function

'Tratamiento de errores
trapito:
Dim errNum As Integer
Dim errDesc As String
Debug.Print Err.Description
Select Case Err.Number
Case 15211
Err.Raise 15211, "Error de Seguridad", Err.Description
Case Else
'Conexion.RollbackTrans
Debug.Print Err.Description
End Select
If Trans = True Then
Conexion.RollbackTrans
End If
End Function

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Emanuel CALVO
FRANCO
Enviado el: viernes, 07 de noviembre de 2008 9:43
Para: pgsql-es-ayuda
Asunto: Re: [pgsql-es-ayuda] RV: ayuda please INSERT VISUAL B 6 POSTGRES

2008/11/7 Javier Chávez B. <jchavezb(at)gmail(dot)com>:
> 2008/11/7 Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>:
>>
>> Master, yo tambien trabajo en VB6 y postgre, lo que hago normalmente
>> es ejecutar un paso a paso, y antes de mandar la consulta la almaceno
>> en una variable string temporal o en un campo edit, cuando llego ahi
>> copio su contenido y la ejecuto pero desde una consolo del pgadmin3,
>> asi, si no anda la voy toqueando en la consola hasta que descubro el
>> error. Es la manera mas facil que encontre para depurar y no volverte
>> loco con los apostrofos, comillas y demas simbolos.....
>
> Yes :0) ... acostumbro a hacer lo mismo por eso ayer le dije al autor
> inicial del hilo que mostrara el resultado de la variable
> concatenada....
>

Más que nada creo que debe hacer eso porque sihubiese un problema en la
concatenación de
VB6 es te hilo, por más que halla gente que sepa de VB6, es de Pgsql.
Si no hay problemas con
el insert resultante, entonces el problema es algo mas engorroso y se torna
una pérdida de tiempo para el muchacho que inició el hilo, cuando quizás en
algún foro de
VB6 se lo solucionan en menos
de 4 hs.

Le aconsejaria a quien inició el hilo, que haga un msgbox con la variable y
que nos pase ese resultado, de esa manera podremos ver si queda bien o si
existe un problema en el isert que si, sea postgres quien esté chillando...

Otra cosa que le aconsejo es identar el código para que quepa en una pagina
de código normal.

> Para mi tb es lo mas facil para corregir, pero evito codigo embebido
> en las aplicaciones ... prefiero todo con funciones.... asi centralizo
> todo en la Bd (reglas de negocio - datos - etc).
>
es lo aconsejable...
> Slds.
>
> J.
>
>
saludos
>
>> Saludos.
>>
>> ________________________________
>> Yahoo! Cocina
>> Recetas prácticas y comida saludable
>> Visitá http://ar.mujer.yahoo.com/cocina/
>
>
>
> --
> Cumprimentos
> jchavez
> linux User #397972 on http://counter.li.org/
> --
> TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net
>

--
Emanuel Calvo Franco
Syscope Postgresql DBA
BaPUG / AOSUG Member
--
TIP 5: ¿Has leído nuestro extenso FAQ?
http://www.postgresql.org/docs/faqs.FAQ.html

__________ Information from ESET NOD32 Antivirus, version of virus signature
database 3593 (20081107) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Miguel Angel Elizarraras Oblea 2008-11-07 21:15:36 mensaje FATAL: could not open file "global/pg_database": Too many open files in
Previous Message Jaime Casanova 2008-11-07 14:57:07 Re: PROBLEMA SLONY