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"