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: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] 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. <[EMAIL PROTECTED]>:
> 2008/11/7 Gabriel Ferro <[EMAIL PROTECTED]>:
>>
>> 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



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

Responder a