Autor Tema: Como mejorarian ustedes esta Funcion  (Leído 13029 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Como mejorarian ustedes esta Funcion
« Respuesta #15 en: Octubre 21, 2014, 07:18:21 pm »
SQL_Ejecutar (no es muy intuitivo el nombre) lo que hace es ejecutar una consulta select (primer parametro), en un recordset (segundo parametro, con una conexíon (3º parametro)
y devuelve un entero/enumeracion que indica si salio bien (hay resultado), si no devolvio nada (no se selecciono ninguna fila) o si hubo un error en la ejecución

SQL_ExecuteScalarS y SQL_ExecuteScalarL sirve para lo mismo, solo que uno devuelve string y otro devuelve Long. Como parámetros toman una consulta que deba devolver UNA Y SOLO UNA CELDA (si devuelven más solo se toma la primera) y una conexión

En el 2º post al final de los ejemplos estan ejemplos a estas llamadas.

Por las dudas lo reposteo acá

Código: (vb) [Seleccionar]
' Para Rellenar algún LV, etc
Dim rs As Recordset
Select Case SQL_Ejecutar("SELECT * FROM tabla WHERE ID < 100", rs, cnnDatos)
        Case eEstatus.QueryError
                Call MsgBox("Hay un error en la consulta")
        Case eEstatus.EmptyResults
                ' Recorset vacio. Avisar que no hay nada
        Case eEstatus.OK
                ' Rellenar ListView o lo que sea usando rs (recordset)
End Select
 
 
' Devuelve un String
Msgbox(SQL_ExecuteScalarS("SELECT nombre FROM clientes WHERE id = 1", cnnDatos))
 
' Devuelve un Long
Msgbox(SQL_ExecuteScalarL("SELECT id FROM clientes WHERE nombre = 'raul'", cnnDatos))

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Como mejorarian ustedes esta Funcion
« Respuesta #16 en: Octubre 22, 2014, 02:28:15 pm »
ya que estamos con ADO y base de datos, lo que tambien hay que tener en cuenta son los Errores de ADO, pero no solo el error interceptable, sino que si hubo error, revisar la colecccion de errores de ado, ya que puede venir mas de un error y el On Error solo capturamos el primero.
Algo asi:

Código: (VB) [Seleccionar]
Dim oErr As adodb.Error

    If oCNN.Errors.Count > 0 Then
       
        For Each oErr In oCNN.Errors
       
            With oErr
                ErrNum = .Number
                ErrDesc = .Description
                ErrNative = .NativeError
                ErrSource = .Source
                SqlState = .SqlState
            End With

        Next
   
        'limpiar coleccion de errores
        oCNN.Errors.Clear
   
    End If

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Como mejorarian ustedes esta Funcion
« Respuesta #17 en: Octubre 22, 2014, 03:07:35 pm »
Que bueno es esto amigo Waldo, yo la idea con este post es juntar funciones utiles para nuestro sistemas y asi poder reutilizar el mismo codigo en casi cualquier formulario.

Y si hay alguien que tiene funciones que agilice mas todo lo que sea sobre ADO bienvenido sea.

Gracias por el aporte.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

gasafonso

  • Megabyte
  • ***
  • Mensajes: 175
  • Reputación: +4/-10
    • Ver Perfil
Re:Como mejorarian ustedes esta Funcion
« Respuesta #18 en: Octubre 22, 2014, 03:10:29 pm »
Siiiii E NT E R    es justo lo que estoy buscando para mi tema de informes, vos no tenes nada armado ?ya que tenes una forma facil y ordenada de programar


Saludos
« última modificación: Octubre 22, 2014, 03:18:02 pm por gasafonso »

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Como mejorarian ustedes esta Funcion
« Respuesta #19 en: Octubre 23, 2014, 02:07:31 pm »
Bueno, termine poniendo las funciones de Raul en un modulo, en honor a Raul el modulo se llama "modAdoRaul"  ;)

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Como mejorarian ustedes esta Funcion
« Respuesta #20 en: Octubre 30, 2014, 02:12:23 pm »
Estaba probando las funciones de Raul y encontré un error.
En la funcion UpdateTabla
Código: (VB) [Seleccionar]

'cargo un valor tipo string
campos(0) = CampoValue("Producto", "PEPE")

'esta funcion carga el valor, y GetRowValue formatea el dato, en este caso un string, entonces los encierra entre ' '
Public Function CampoValue(Nombre As String, Valor, Optional tipo As CampoTipo = tipoString) As campo
With CampoValue
.Nombre = Nombre
.tipo = tipo
.Valor = GetRowValue(Valor, tipo)
End With
End Function

Public Function GetRowValue(Valor, tipo As CampoTipo) As String
Select Case tipo
Case CampoTipo.tipoDate
Dim d As Date, limit As String, sep As String
d = Valor
Select Case dbEngine
Case dbAccess
limit = "#": sep = "/"
Case dbMySQL
limit = "'": sep = "-"
End Select
GetRowValue = limit & Year(d) & sep & Month(d) & sep & Day(d) & limit
Case CampoTipo.tipoNumero
GetRowValue = CLng(Valor)
Case CampoTipo.tipoString
GetRowValue = "'" & Valor & "'"
Case CampoTipo.tipoBoolean
If CBool(Valor) Then
GetRowValue = "1"
Else
GetRowValue = "0"
End If
Case CampoTipo.tipodouble
GetRowValue = Replace$(CDbl(Valor), ",", ".")
End Select
End Function


'ahora campos(0).valor = 'PEPE'

'y cuando llamamos a UPDATETABLA, vuelve a formatear el valor

Public Function UpdateTabla(ByVal Tabla As String, campos() As campo, sWhere As String, cnn As ADODB.Connection) As Boolean
Dim sql As cStringBuilder
Dim i As Integer, j As Integer
Set sql = New cStringBuilder
Call sql.Append("UPDATE " & Tabla & " SET ")
j = UBound(campos)
For i = 0 To j
Call sql.Append(campos(i).Nombre & "=")
                'aca cuando se concatena, se vuelve a formatear el campo
                'agregar un ''PEPE'' (es decir doble comilla simple, a ambos lados)
Call sql.Append(GetRowValue(campos(i).Valor, campos(i).tipo))
               
                'creo que lo correcto seria:
Call sql.Append(campos(i).valor)

If Not i = j Then
Call sql.Append(",")
End If
Next
Call sql.Append(" WHERE " & sWhere & ";")
Call cnn.Execute(sql.Value, i)
Debug.Print sql.Value, "Rows Affected: " & i
UpdateTabla = i
Set sql = Nothing
End Function






raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Como mejorarian ustedes esta Funcion
« Respuesta #21 en: Octubre 30, 2014, 02:54:17 pm »
:O Cierto! Gracias por la aclaración, ahora los corrijo en los posts anteriores

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Re:Como mejorarian ustedes esta Funcion
« Respuesta #22 en: Octubre 30, 2014, 02:55:58 pm »
Probalo bien, pero creo que la explicacion es esa, se formatea dos veces el valor del campo

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Como mejorarian ustedes esta Funcion
« Respuesta #23 en: Octubre 30, 2014, 05:43:19 pm »
En realidad no lo uso más (uso procedimientos almacenados siempre y casi que ni uso vb6)

Pero actualize la llamada en updateTabla e InsertarTabla

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Como mejorarian ustedes esta Funcion
« Respuesta #24 en: Octubre 30, 2014, 07:39:12 pm »
.... y casi que ni uso vb6)


Muchachos... estamos perdiendo a uno

Me encuentras en YAcosta.com