ya voy a la desesperada a ver si cuela y alguien lo sabe

[email protected]
08 de Mayo del 2004
Buenas Tardes!!! estoy probando poner mi pregunta en casi todos los foros haber si alguien me puede ayudar.

Problema: Tengo que realizar un programa en Visual Basic que migre de Access a Sql Server. Mi problema es que para hacer la migración necesito saber si los tipos de campos de Sql Server (destino) son compatibles con los de Access (origen).

Hasta ahora he conseguido sacar las propiedades principales como el tipo de campo y su tamaño y lo he hecho através de "Adox.Catalog" en donde saco las propiedades de "Type" y "DefinedSyze"

El problema que tengo es que cuando tu defines un campo en Access y le pones que sea númerico, en la pestaña inferior le puedes decir si es entero, doble, simple, decimal ,.... Bueno pues esta especificación es la que no consigo sacar, me encuentro estancada en este punto y no consigo sacar la solución si por un casual alguien sabe como hacerlo le agradeceria mucho que me lo hiciera saber llevo dos semanas parada y me va a dar algo
De antemano gracias!!
Un saludo rocio82


RAFA
08 de Mayo del 2004
Hola Rocio.
Estuve buscando una solucion y mas o menos es asi (funciona con DAO, debe haber otra para ADO) y esta hecho en el vb de access, pero debe ser similar en vb:
Sub TypeX2()

Dim dbsNeptuno As Database
Dim fldBucle As Field

Set dbsNeptuno = CurrentDb

Debug.Print "Objetos Field en TableDef Empleados:"
Debug.Print " Tipo - Nombre"

' Enumera la colección Fields de la tabla Empleados.
Dim I As Integer
For I = 0 To dbsNeptuno.TableDefs("TABLA_TOTAL").Fields.Count - 1
'For Each fldBucle In _
dbsNeptuno.TableDefs("TABLA_TOTAL").Fields
Debug.Print " " & TipoCampo(dbsNeptuno.TableDefs("TABLA_TOTAL").Fields(I).Type) & _
" - " & dbsNeptuno.TableDefs("TABLA_TOTAL").Fields(I).Name
Next I
'Next fldBucle

dbsNeptuno.Close

End Sub

Function TipoCampo(intTipo As Integer) As String

Select Case intTipo
Case dbBoolean
TipoCampo = "dbBoolean"
Case dbByte
TipoCampo = "dbByte"
Case dbInteger
TipoCampo = "dbInteger"
Case dbLong
TipoCampo = "dbLong"
Case dbCurrency
TipoCampo = "dbCurrency"
Case dbSingle
TipoCampo = "dbSingle"
Case dbDouble
TipoCampo = "dbDouble"
Case dbDate
TipoCampo = "dbDate"
Case dbText
TipoCampo = "dbText"
Case dbLongBinary
TipoCampo = "dbLongBinary"
Case dbMemo
TipoCampo = "dbMemo"
Case dbGUID
TipoCampo = "dbGUID"
End Select

End Function

SUERTE
RAFA

[email protected]
08 de Mayo del 2004
Hola chicos muchas gracias por haberme contestado
LLevo mucho tiempo sin conectarme (por problemas con Internet) y acabo de leer vuestras respuestas.
De antemano muchas gracias tienen buena pinta y ahora lo voy a probar
Sobre la pregunta haber, si lo que me habeis preguntado es como hacer un combo que se desplegue cuando vas introducir datos directamente en la BD de Acces... no tengo ni idea
Si desde Visual quereis un combo que saque determinados datos lo mejor es utilizar un adodc relacionarlo con la tabla y la Bd y con el combo

Sino es eso lo que me preguntais de nuevo lo siento pero es que me es dificil llegar a entender la pregunta
No es que sea cortita, puede que si pero muchas veces cuando nosotros escribimos y lo leemos decimos "Ostia se entiende perfectamente" pero pq sabemos lo que queremos decir. Pero estando de este lado (del mio) que no se bien de lo que hablais pues ...
Vamos que a lo mejor soy cortita.. lo siento :(
Muchisimas gracias!!!


Jose oscar
08 de Mayo del 2004
Hola Rocio...

Te vuelvo a preguntar como hacer un combo en un campo de access por ejemplo en VENTAS y que este conbo despliegue los datos de clientes Nombre del cliente. Cuando creas la base de datos manualmente eso lo puedes hacer....

Bueno no importa. Tengo un ejercicio que lee las tabls y la propiedades de una base de datos , asi como las consultas el texto de las consultas, las relaciones con quien esta relaciona etfc.

Nesecitas un formulario , un Text y Command, el text multiline y los dos scroll.
Si me podes responder lo otro te lo agradecere hoy o mañana pongo unpst preguntando. Sobre las bases de datos y la diferencia entre access y SQL, ni sabia que existia.

Un saludo Rocio
jose Oscar


Private Sub Command1_Click()
Dim Db As Database: Dim Tb As TableDef: Dim Rel As Relation: Dim Cons As QueryDef
Dim Fil As Field: Dim Idx As Index
Dim TuBase As String: Dim Msj As String


TuBase = "C:mis documentosprogramacionarchivos accessgimnasio heredia 20042.mdb"
Set Db = DAO.OpenDatabase(TuBase)

Msj = Msj & "DATOS DE SUS TABLAS Y CAMPOS " & vbCrLf & vbCrLf

For Each Tb In Db.TableDefs
If Not InStr(1, Tb.Name, "MSys") = 1 Then
Msj = Msj & "Nombre de la tabla " & Tb.Name & vbCrLf & "Contiene " & Tb.Fields.Count & _
" Campos " & vbCrLf & "Contiene " & Tb.Indexes.Count & " Indices " & vbCrLf & vbCrLf
For Each Fil In Tb.Fields
Msj = Msj & "Nombre del campo " & "[ " & Fil.Name & " ]" & vbCrLf & _
"Requerido " & "[ " & Fil.Required & " ]" & vbCrLf & "Permite longitu cero " & "[ " & Fil.AllowZeroLength & " ]" & _
vbCrLf & "Valor default " & Fil.DefaultValue & vbCrLf & _
"Regla de validacion " & Fil.ValidationRule & vbCrLf & _
"Tipo de datos " & TipoDato(Fil.Type) & vbCrLf & vbCrLf

Msj = Msj & vbCrLf
Next
End If
Next
Msj = Msj & "DATOS DE LOS INDICES" & vbCrLf & vbCrLf

For Each Tb In Db.TableDefs
If Not InStr(1, Tb.Name, "MSys") = 1 Then
For Each Idx In Tb.Indexes
If Idx.Foreign = False Then
Msj = Msj & "Nombre del Indice " & "[ " & Idx.Name & " ]" & vbCrLf & _
"Tabla " & "[ " & Tb.Name & " ]" & vbCrLf & _
"Campo nombre " & Idx.Fields & vbCrLf & _
"Es clave principal " & "[ " & Idx.Primary & " ]" & vbCrLf & _
"Es requerido " & "[ " & Idx.Required & " ]" & vbCrLf & _
"Se ignora nulos " & "[ " & Idx.IgnoreNulls & " ]" & vbCrLf & _
"Es clave unica " & "[ " & Idx.Unique & " ]" & vbCrLf & vbCrLf
End If
Next
Msj = Msj & "________________________________" & vbCrLf

End If
Next

Msj = Msj & "DATOS DE SUS RELACIONES" & vbCrLf & vbCrLf

For Each Rel In Db.Relations
Msj = Msj & "Nonbre de la relacion " & "[ " & Rel.Name & " ]" & vbCrLf & _
"Tabla cliente " & "[ " & Rel.ForeignTable & " ]" & vbCrLf & _
"Campo cliente " & "[ " & Rel.Fields(0).ForeignName & " ]" & vbCrLf & _
"Tabla servidora " & "[ " & Rel.Table & " ]" & vbCrLf & _
"Campo servidor " & "[ " & Rel.Fields(0).Name & " ]" & vbCrLf & vbCrLf

Next

Msj = Msj & "DATOS DE SUS CONSULTAS " & vbCrLf & vbCrLf

For Each Cons In Db.QueryDefs
Msj = Msj & "Nombre de la consulta " & "[ " & Cons.Name & " ]" & vbCrLf & _
"Texto SQL " & vbCrLf & "[ " & Cons.Sql & " ]" & vbCrLf
Next

Db.Close
Text1.Text = Msj

End Sub

Public Function TipoDato(Tipo As Integer) As String

Select Case Tipo

Case 1 'Boolean
TipoDato = "[Es Verdadero/Falso]"
Case 3 'Integer
TipoDato = "[Es Entero hasta 32767 o -32767]"
Case 4 'long
TipoDato = "[Es Entero largo]"
Case 5 ' Currency
TipoDato = "[Es Moneda]"
Case 6 'Single
TipoDato = "[Es Single]"
Case 7 'Double
TipoDato = "[Es Numerico con Decimales]"
Case 8 'Date
TipoDato = "[Es Fecha]"
Case 9 'Binario
TipoDato = "[Es Binario]"
Case 10 'Texto
TipoDato = "[Es Texto]"
Case 11 'LongBinary
TipoDato = "[Es Binario Largo]"
Case 12 'Memo
TipoDato = "[Es Memo]"
Case 19 'Numeric
TipoDato = "[Es Numeric]"
Case 22 'Time
TipoDato = "[Es Hora]"
Case Else
TipoDato = "[Desconocido]"
End Select

End Function


Jose Oscar
08 de Mayo del 2004
No hay respuesta para nosotros RAFA, asi que aprovecho y te felicot por tu codigo RAFA, lo has hecho muy bien. Sabes bein como trabajar y detectar los datos de una base de datos.

Un saludo RAFA
Jose Oscar

rafa
08 de Mayo del 2004
Gracias Jose Oscar por tus felicitaciones, pero debemos compartirlas.
Un saludo
Rafa