Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

ayuda con VB y Base de Datos

Participa en el tema ayuda con VB y Base de Datos en el foro Programación.
Tengo que hacer un trabajo y me deje estar, por lo que no tengo ni ...

Buscar en este tema:
 
  •  
    #1 ayuda con VB y Base de Datos
    Tengo que hacer un trabajo y me deje estar, por lo que no tengo ni idea. El ejercicio es este:

    Dada una base de datos (llamada FINAL.mdb) que contiene dos tablas (una llamada TABLA1 y otra TABLA2) de registros de dos campos, CC1 y CC2 en la TABLA1, y de un campo string CC3 y otro entero CC4 en la TABLA2); se desea realizar el producto de los campos CC1 * CC2 de la TABLA1 y guardar el resultado en el campo CC3 de la TABLA2, sólo si el campo CC4 tiene el valor ‘Válido’. Realizar el proceso secuencialmente. La TABLA1 y la TABLA2 tienen la misma cantidad de elementos. Utilizar los objetos que crea necesarios para el trabajo.

    Me pueden dar una mano?
    Gracias
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/976514-ayuda-con-vb-y-base-datos.html
    | Más
  • #2 Re: ayuda con VB y Base de Datos

    Perdon, pero esto carece de Logica.

    otro entero CC4 en la TABLA2) (....)
    sólo si el campo CC4 tiene el valor ‘Válido’
    CC4 dice que es ENTERO, osea solo acumula Numeros de el -32,768 hasta 32,767.
    Eso cualquiera que vea programacion lo sabe, porque esto se ve antes de aprender que es un IF

    AHora si me dice que es ENTERO, por lo que nomas le puedo poner numeros

    ¿Como o en que dimension o En que sueño un variable ENTERA (SOLO NUMEROS) va a contener "Válido" que es una cadena de caracteres?

    WTF???

    Ya desde ahi arrancamos con un pequeño problema, porque la tabla CC4 JAMAS!!!!!!!!!!! va a contener "Válido" SQL Server, Oracle o Access JAMAS te van a permitir poner una Cadena de caracteres en donde los registros nomas pueden ser ENTEROS (NUMERICOS).

    Segundo no hay metodos para controlar errores descriptos.

    Imaginate que yo tengo en la tabla1.

    CC1 y CC2 Asi:

    1-2
    1-3
    1-4
    1-5

    La multimplicacion de estos me dara 2,3,4,5.
    Ahora si tengo la Tabla2.
    Con supongamos que CC4 es String para poder tener "Válido" porque si no jamas va a funcar esto.
    Tengo
    CC3 y CC4

    0-Válido
    0-Válido
    0-Inválido
    0-Válido


    Al momento de hacerlo secuencial, como te pide el Ejercicio, los resultados de forma ordenada se me guardarian asi

    CC3 y CC4
    2-Válido
    3-Válido
    0-Inváido
    4-Válido

    Ahora si te daras cuenta el "5" lo perdi, por una cuestion de que me dice el mismo ejercicio que

    La TABLA1 y la TABLA2 tienen la misma cantidad de elementos
    Asi que tenemos un drama de OverFlow.

    Por otra parte, si queres se puede hacer TAL CUAL lo pide el ejercicio, pero Usas 2 veces una consulta.

    Yo te paso el proyecto funcionando.

    Pero Modifique los siguiente.

    En vez de que CC3 =Caracteres y CC4=Entero
    Lo hice al reves.
    CC3=Entero y CC4=Caracteres.

    Por el motivo que explique mas arriba ( que no se pueden meter caracteres en un capo de solo numeros )

    Ahora, este es el codigo.

    Código:
    Option Explicit
       Public Conexion As ADODB.Connection
        Public SQL As ADODB.Recordset
    '------------------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim VECTOR() As Integer
    Dim i As Integer
        Set Conexion = New ADODB.Connection
        Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\FINAL.mdb;Persist Security Info=False"
        Set SQL = New ADODB.Recordset
    SQL.Open "SELECT DISTINCT (Tabla1.CC1 * Tabla1.CC2) As Mutiplicacion From Tabla1, Tabla2", Conexion, adOpenDynamic, adLockPessimistic
    Do While Not SQL.EOF
        i = i + 1
        SQL.MoveNext
    Loop
    SQL.MoveFirst
    If Not SQL.EOF Then
        ReDim VECTOR(1 To i) As Integer
        i = 1
        Do While Not SQL.EOF
            VECTOR(i) = SQL!Mutiplicacion
            i = i + 1
            SQL.MoveNext
        Loop
    End If
    SQL.Close
    i = 1
    SQL.Open "SELECT Tabla2.CC3,Tabla2.CC4 From Tabla2 ;", Conexion, adOpenDynamic, adLockPessimistic
    Do While Not SQL.EOF
        If SQL!CC4 = "Válido" Then
            SQL!CC3 = VECTOR(i)
            SQL.Update
        End If
        i = i + 1
        SQL.MoveNext
    Loop
    End Sub 
    Por si no te sale, aca te dejo el proyecto con la base de datos funcionando.

    4Shared - DOWNLOAD

    O si no tambien te lo dejo adjunto al foro.

    PD: Preguntale a tu profesor como hacer para meter caracteres en un campo de enteros.

    Si te responde, por favor decile que se registre en este foro y nos pase el numero de Colegiado o si es ingeniero que nos de el Numero de matricula, asi lo escracho por todas partes.

    Me olvidaba

    Par para poder usar Access necesitas usar las siguientes referencias.

    "Microsoft ActiveX Data Objetcs 2.8 Library" que lo sacas de aca

    PROYECTO --> referencias ....


    En el Menu de referencias buscas "Microsoft ActiveX Data Objetcs 2.8 Library"


    asi



    Luego de eso podes Invocar a access

    Si no, fijate que en el codigo que te pase, puse:

    Código:
    Option Explicit
       Public Conexion As ADODB.Connection
        Public SQL As ADODB.Recordset
    
    el tipo de dato "ADODB". No viene con Visual Basic, pero ahora que tiene referencia de Access
    Puede usar "ADO".
    Y nosotros usamos "DB"
    Por eso "ADODB"

    Si no, al no agregar la referencia de Access, no tira un error, porque Visual Basic no es Adivino y no sabe que tipo de dato es ADO, hasta que vos se lo digas.
    Archivos adjuntos
    Tipo de archivo: rar SOFT.rar (7.9 KB, 2 vistas)
    Editado por -HeavenMight- - 07.11.2009 10:06 hs.
    Me gusta este mensaje
  • #3 Re: ayuda con VB y Base de Datos

    Muchas gracias por la respuesta.
    Ahora estoy con la duda de si tratar de hacerlo o responder que no se puede porque en ningun registro el campo ese puede tener el valor "valido". Yo lo habia notado (programo php y mysql) pero como de esto no tengo idea y durante el año no le di bola pensé que por ahi habia manera de hacerlo, ahora que me lo confirmas (magistralmente, gracias de nuevo) no se si no se trata de una pregunta tramposa.
    Me gusta este mensaje
  • #4 Re: ayuda con VB y Base de Datos

    Trabajá el "Válido" o "Inválido" (Que son datos boolean) como enteros 1 - 0 (en ANSI C no tenés tipos boolean) y todo se maneja de esa forma, si es que no entendí mal.

    Saludos
    Me gusta este mensaje
  • #5 Re: ayuda con VB y Base de Datos

    Si es como dice Nikk, si es "Valido" o "Invalido" por True o False

    Boolean - True & False, entonces seria otra cosa.

    Lo que me molesta es esa asquerosidad de tratar de llevar al español muchos terminos que en el español son ambiguos y en el Ingles no.

    Si hubiera puesto

    sólo si el campo Booleano CC4 tiene el valor ‘True’.
    Hubiera sido mas facil, igualmente un 0 a tu profesor en analisis, porque todos los datos que un analista releva de los programas deben ser bien detallado, todo debe ser explicito, NADA PERO NADA; debe ser tomado por sabido y todo detalle, asi como "opiniones" de cliente, deben ser anotadas tal cual, para luego ser analizadas.

    Pero bueno, la parte de "detallado" y "Explicito" se ve que todavia no las rindio o falto a la clase.
    En fin.

    Whatever.

    El codigo seria el siguiente, de ser la interpretacion correcta "sólo si el campo Booleano CC4 tiene el valor ‘True’. "

    Código:
    Option Explicit
       Public Conexion As ADODB.Connection
        Public SQL As ADODB.Recordset
    '------------------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim VECTOR() As Integer
    Dim i As Integer
        Set Conexion = New ADODB.Connection
        Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\FINAL.mdb;Persist Security Info=False"
        Set SQL = New ADODB.Recordset
    SQL.Open "SELECT DISTINCT (Tabla1.CC1 * Tabla1.CC2) As Mutiplicacion From Tabla1, Tabla2", Conexion, adOpenDynamic, adLockPessimistic
    Do While Not SQL.EOF
        i = i + 1
        SQL.MoveNext
    Loop
    SQL.MoveFirst
    If Not SQL.EOF Then
        ReDim VECTOR(1 To i) As Integer
        i = 1
        Do While Not SQL.EOF
            VECTOR(i) = SQL!Mutiplicacion
            i = i + 1
            SQL.MoveNext
        Loop
    End If
    SQL.Close
    i = 1
    SQL.Open "SELECT Tabla2.CC3,Tabla2.CC4 From Tabla2 ;", Conexion, adOpenDynamic, adLockPessimistic
    Do While Not SQL.EOF
        If SQL!CC4 =  True Then
            SQL!CC3 = VECTOR(i)
            SQL.Update
        End If
        i = i + 1
        SQL.MoveNext
    Loop
    End Sub 
    En la parte final le cambie el "SQL!CC4 = "Válido" por "SQL!CC4 = True"

    Nada mas :P

    Aca te dejo el proyect adjunto

    Y tambien por 4Shared.
    Archivos adjuntos
    Tipo de archivo: rar SOFT.rar (7.9 KB, 0 vistas)
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 4 RESPUESTAS
  • 60 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB