vb6 y sql server

Iniciado por elmaro, 20 Junio 2007, 16:21 PM

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

elmaro

que tal, despues de tanto tiempo, dije que volvia y volvi

mi duda es la siguiente
estoy haciendo una aplicacion en vb6 usando sql server y queiro listar las db, utilizo este codigo:



rst.Open "SELECT name FROM master.dbo.sysdatabases", cnn, adOpenDynamic, adLockOptimistic
With cbo_db
        .Clear
        For Each tField In rst.Fields
            .AddItem tField.Name
        Next
        .ListIndex = 0
    End With
rst.Close




cbo_db es un combo, y lo unico que me lista es la palabra "name", como hago para que me liste los datos de la columna name?
me srian de gran ayuda ya que estoy en el trabajo ahora xd

saludos y gracias

CeLaYa

#1
me parece que tendías que abrir la tabla "sysdatabase", y listar los registros que contiene.


Option Explicit

Private Sub Form_Load()
    Dim BD As Connection
    Dim Tb As Recordset

    Dim conexion As String
   
    Set BD = New Connection
   
    conexion = "Provider=SQLOLEDB.1;" & _
               "Persist Security Info=False;" & _
               "User ID= SA;" & _
               "pwd=;" & _
               "Initial Catalog= Master;" & _
               "Data Source=Servidor"

    On Local Error Resume Next
    BD.Open conexion
    If Err Then
        MsgBox Err.Number & vbCrLf & Err.Description
        Exit Sub
    End If
    On Local Error GoTo 0
   
    Set Tb = New Recordset
    Tb.Open "SELECT Name FROM Sysdatabases", BD
    Combo1.Clear
    While Not Tb.EOF
        Combo1.AddItem Tb!Name
        Tb.movenext
    Wend
    Tb.Close
    BD.Close

    set Tb = nothing
    set BD = nothing
End Sub
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

elmaro

graciaspor el codigo, lo probe y me sigue dando el mismo resultado,...

lo que quiero hacer es esto

---------------------
| Numero
| uno
| dos
| tre
| cuatro
| cinco
| seis
--------------------

Dim tField As ADODB.Field
 
rst.Open "select pub_codcontrato from vsp_contrcue", cnn, adOpenDynamic, adLockOptimistic

        combo1.Clear
        For Each tField In rst.Fields
        combo1.AddItem tField.Name
        Next
        combo1.ListIndex = 0

rst.Close



lo que me muestra con eso no son los "uno", "dos", "tres", etc
me muestra el nombre del campo "pub_codcontrato"

si alguien me dice como mostrar los datos y no el nombre del campo se lo agradeceria

bye

elmaro

listo!!
ya lo descubri

gracias de todos modos

bye bye
nos vemo en ela p`roxima

Hans el Topo

para el que no lo sepa es así... xD

tField!Name

o

tfield.fields("Name")  'se puede agregar .value
 

elmaro

#5
bueno sigo...
con respecto a la forma que yo use.. es la siguiente:

While frm1.rst.EOF
            frm1.rst.MoveFirst
            txt_dimccodigo = frm1.rst(0)
            txt_dimcdescripcion = frm1.rst(1)
            txt_dimcpadre = frm1.rst(2)
            txt_dimccuenta = frm1.rst(3)
            txt_dimccontrato = frm1.rst(4)
            txt_dimcconcepto = frm1.rst(5)
            txt_dimcproceso = frm1.rst(6)
       
            frm1.rst.MoveNext
        Wend


y con eso veo los datos pero solo de la primera fila

osea...

-------------------------
| Numero | Letra
| uno         |  a       |
| dos         |  b       |
| tre          |  c       |
| cuatro     |  d       |
| cinco       |  e       |
| seis         |   f      |
----------------------

con ese codigo recibiria solo el dato numero "uno" y el dato letra "a"

la pregunta es... como veo las otras filas?
si alguien sabe... que me pase la vos

saludos
bye


#Edit: gracias Hans el Topo, como siempre respondiendo

Hans el Topo

rst.movenext

el movefirst nose para que lo pones puesto que te envia al primer registro todo el rato...

los bucles de lectura de un recordset suelen ser así

while not rst.eof
    'código que quieras para ese registro

    'avanzamos registro
    rst.movenext
wend




Citar#Edit: gracias Hans el Topo, como siempre respondiendo

respondo cuando tengo tiempo y me apetece xD la mayoría de estos temas estan resueltos ya y por eso no se suelen responder pero weno digamos que hoy hice una excepción xD
 

elmaro

barbaro, vamos mejorando
yo necesito avanzar en los registros, lo que ahora uso es esto:
voy mejorando en este tema :P

para adelantar :

If Not frm1.rst.EOF Then
txt_dimccodigo = frm1.rst(0)
txt_dimcdescripcion = frm1.rst(1)
txt_dimcpadre = frm1.rst(2)
txt_dimccuenta = frm1.rst(3)
txt_dimccontrato = frm1.rst(4)
txt_dimcconcepto = frm1.rst(5)
txt_dimcproceso = frm1.rst(6)
frm1.rst.MoveNext
End If


y para retroceder:


If Not frm1.rst.EOF Then
frm1.rst.MovePrevious
txt_dimccodigo = frm1.rst(0)
txt_dimcdescripcion = frm1.rst(1)
txt_dimcpadre = frm1.rst(2)
txt_dimccuenta = frm1.rst(3)
txt_dimccontrato = frm1.rst(4)
txt_dimcconcepto = frm1.rst(5)
txt_dimcproceso = frm1.rst(6)
End If


el tema que para retroceder no funciona, osea... retrocede el registro pero no lo carga en los textbox

hace rato largo programo en vb y estoy verdisimo con vb y sql, por eso pregunto cosas que yo se que no son dificiles

gracias again Hans el Topo :)

bye...

Hans el Topo

con el if solo recorres un registro... el while recorre todos...

y el avance o retroceso va al final, ya que si retroces y no hay nada que leer intentas leer vacio... por algo tiene esa estructura el bucle

'hacia adelante
'vamos al primero
rst.movefirst
'mientras existan registros
while not rst.eof
    'código que quieras para ese registro

    'avanzamos registro
    rst.movenext
wend


'hacia atrás
'vamos al último
rst.movelast
'mientras existan registros
while not rst.BOF
    'código que quieras para ese registro

    'avanzamos registro
    rst.MovePrevious
wend



CitarBOF indica que la posición del registro actual está antes del primer registro de un objeto Recordset.


EOF indica que la posición del registro actual está después del último registro de un objeto Recordset.


copipasteo la ayuda...

CitarMétodos MoveFirst, MoveLast, MoveNext y MovePrevious
     

Pasa al primer, último, siguiente o anterior registro de un objeto Recordset especificado y lo convierte en el registro actual.

Sintaxis

recordset.{MoveFirst | MoveLast | MoveNext | MovePrevious}

Comentarios

Utilice el método MoveFirst para mover la posición del registro actual al primer registro del Recorset.

Utilice el método MoveLast para mover la posición del registro actual al último registro del Recorset. El objeto Recordset tiene que aceptar marcadores o movimiento hacia atrás; si no, la llamada al método generará un error.

Utilice el método MoveNext para mover la posición del registro actual un registro hacia delante (hacia el final del Recordset). Si el último registro es el registro actual y llama al método MoveNext, ADO establece el registro actual a la posición posterior al último registro del Recordset (EOF es True). El intento de avanzar cuando la propiedad EOF ya sea True genera un error.

Utilice el método MovePrevious para mover la posición del registro actual un registro hacia atrás (hacia el principio del recordset). El objeto Recordset tiene que aceptar marcadores o movimiento hacia atrás; si no, la llamada al método generará un error. Si el primer registro es el registro actual y llama al método MovePrevious, ADO establece el registro actual a la posición anterior al primer registro del recordset (BOF es True). El intento de retroceder cuando la propiedad BOF ya sea True genera un error. Si el objeto Recordset no acepta marcadores o movimiento hacia atrás, el método MovePrevious generará un error.

Si el recordset es de tipo Forward-only y quiere recorrerlo hacia adelante y hacia atrás, puede utilizar la propiedad CacheSize para crear una caché de registros que acepte el movimiento hacia atrás mediante el método Move. Como los registros de la caché están guardados en la memoria, tiene que evitar guardar en la caché más registros de los estrictamente necesarios. Puede invocar el método MoveFirst en un objeto Recordset de tipo Forward-only; si lo hace, el proveedor vuelve a ejecutar el comando que generó el objeto Recordset.
 

elmaro

chabon!!!

muchas gracias por la data, por la ayuda

claro, con IF solo leo un registro, y eso era lo que queria, no queria leer todos, ya que tengo que mostrar uno solo, y que el usuario valla viendo uno a uno como el quiera

te agradezco muchisimo por tu tiempo y por la info que pusiste al final, me sirvio de mucho

hasta la proxima
bye....