En relacion al conf.ini(Reventador)

naveguito
16 de Enero del 2004
Yo tengo 6 controles en la matriz del data y otros tantos en la matriz del dbg en diseño,que hago los elimino para quedarme con uno solo.Gracias

reventador nikomedes
16 de Enero del 2004
Claro, hemos quedado en que debias tener sólo un control Data y un control DbGrid en tiempo de diseño con sus propiedades Index a 0.
Esto es porque cuando leemos el ini, creamos en tiempo de ejecución los controles que nos hacen falta según la cantidad de tablas que haya en el ini.

Un saludo

naveguito
16 de Enero del 2004
Vale hasta aqui claro,pero recuerdas que en el formulario principal tenia un boton Marca que al hacer click me mostraba otro formulario en el cual le daba la ruta de la base de datos y el nombre de la tabla,pues la tabla aqui creada no me aparece en el conf.ini,creo que este codigo lo voy a tener que poner en un modulo global debido a tener dos formularios distintos,tu que crees?.Gracias

reventador nikomedes
16 de Enero del 2004
¿Seguro que cuando dejas de ejecutar el programa no te escribe en el conf.ini todas las tablas de los controles Data existentes? Recuerda que llamamos al sub EscribirIni cuando cerramos el programa.

Dime si me equivoco, tienes un formulario principal en el que se te crean al principio los controles Data que habia en el ini. En ese mismo formulario tienes el boton Añadir Marca, que cuando lo pulsas se te abre un formulario secundario. En este secundario cuando le das a Aceptar hace que se te cree un nuevo control Data en el formulario principal. ¿Hasta aquí cierto todo?
Si es así debe hacerte correctamente lo de guardarte también la nueva en el conf.ini.

naveguito
16 de Enero del 2004
No en el formulario secundario lo unico que tengo es que me crea la tabla nueva en la base de datos de los controles no tengo nada,donde tendria que ponerlo,te paso todo el codigo del formulario secundario:

Option Explicit
Dim StrSql As String
Dim Conexion As New ADODB.Connection

Private Sub Cmdaceptar_Click()
If Txt(0).Text = "" Or Txt(1).Text = "" Then
MsgBox "No ha cubierto todos los campos", vbInformation + vbOKOnly, "Atención :"
Txt(0).SetFocus
Exit Sub
End If
Progreso.Visible = True
Lblmsg.Caption = "Creando nueva tabla"
'Creamos la conexion con la base de datos
Ruta = Txt(0).Text
Nueva_Tabla = Txt(1).Text
Conexion.Provider = "Microsoft.Jet.OLEDB.4.0"
'Abrimos la conexion
Conexion.Open Ruta
'Creo los campos de la nueva tabla
StrSql = "CREATE TABLE " & Txt(1).Text & "(Refprov STRING, Ref STRING, Tipencod STRING, PasC STRING, Giro STRING, Tipcod STRING, Tencod STRING, Tipeje STRING, Teje STRING, Brida STRING, Tipcon STRING, Inter STRING, CS STRING, Fuente STRING, Cons STRING, CAxial STRING, CRadial STRING, Nrev STRING, Nimp STRING, RV STRING, RC STRING, FT STRING, TA STRING, TF STRING, IP STRING, Hum STRING, Foto IMAGE, Precio INTEGER)"
Conexion.Execute StrSql
'Cerramos la conexion
Conexion.Close
Progreso.Value = 30
Progreso.Value = 50
Lblmsg.Caption = ""
Lblmsg.Caption = "Nueva tabla creada"
Progreso.Value = 75
Progreso.Value = 100
MsgBox "La tabla ha sido creado en " & Txt(0).Text, vbInformation + vbOKOnly, "Tabla creada con éxito :"
Validar_Nueva = True
Unload Me
Frmencoder.Cbselec.AddItem Nueva_Tabla
Frmencoder.Cmdbase.SetFocus
End Sub

Private Sub Cmdbuscar_Click()
'Busco la BD
With CD
.DialogTitle = "Elija la ruta donde va crear la nueva tabla"
.Filter = "Access (*.mdb)|*.mdb|Todos los archivos (*.*)|*.*"
.FilterIndex = 1
.ShowOpen
Txt(0).Text = .FileName
End With
End Sub

Private Sub Cmdcancelar_Click()
Unload Me
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 13
KeyAscii = 0
SendKeys "{tab}"
End Select
End Sub

Oye muchas gracias por tu atencion y por tus respuestas tan rapidas

reventador nikomedes
16 de Enero del 2004
Si, eso esta claro, y despues de llamar al formulario ese, te crea el nuevo control Data (en el formulario principal) te acuerdas lo de Validar_Nueva y todo eso?

Yo creo que debe hacertelo bien.

naveguito
16 de Enero del 2004
ahora estoy hecho un lio,lo de validar_nueva era referente a la tabla creo haber te pego ahora el codigo del formulario principal haber que es lo que falla:

Option Explicit
Dim i As Integer
Dim Num As Integer
Dim Idx As Integer
Dim Sw As Boolean
Dim Rutaprog As String
Dim RutaIni As String
Dim strPrev As String
Dim Fs As Variant
Dim F As Variant
Dim BPrincipio As Boolean

Private Sub desactivar_datos()
marco_opciones.Enabled = True
marco_botones.Enabled = False
marco_datos.Enabled = False
End Sub

Private Sub activar_datos()
marco_opciones.Enabled = False
marco_datos.Enabled = False
marco_botones.Enabled = True
End Sub

Private Sub Cbselec_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Check1_LostFocus()
Txtinterface.Enabled = Check1
If Txtinterface.Enabled = True Then
Txtinterface.SetFocus
Else
Txtcircuito.SetFocus
End If
End Sub

Private Sub Cmdaceptar_Click()
Idx = Cbselec.ListIndex
If Idx = -1 Then
MsgBox "Elija una base de datos", vbInformation + vbOKOnly, "Atención :"
Exit Sub
End If
activar_datos
Sw = False
'Hacemos invisibles todos los controles Data
For i = 0 To Data.UBound
Data(i).Visible = False
Next
'Ahora hacemos visible el seleccionado
Data(Idx).Visible = True
Data(Idx).Enabled = True
Data(Idx).Refresh
DBG(Idx).Visible = True
V_Encoder
End Sub

Private Sub CmdAceptar2_Click()
Dim j As Integer
Sw = False
For i = 0 To 5
If Data(i).Visible = True Then
T_encoder
C_encoder
If Txt(0) = "" Or Txt(1) = "" Then
MsgBox "Le falta alguno de los datos importantes.Compruébelo", vbInformation + vbOKOnly, "Atención :"
Txt(0).SetFocus
Exit Sub
End If
With Data(i)
.Recordset.Update
.Recordset.MoveFirst
.Enabled = True
End With
V_Encoder
End If
Next
marco_botones.Enabled = True
marco_opciones.Enabled = False
marco_datos.Enabled = False
Cmdañadir.SetFocus
End Sub

Private Sub Cmdañadir_Click()
Sw = True
marco_opciones.Enabled = False
marco_botones.Enabled = False
marco_datos.Enabled = True
'Vacio los datos de las cajas de texto
For i = 0 To 17
Txt(i) = ""
Next
Txtfoto.Text = ""
Imgfoto = LoadPicture()
Txtgiro.Text = ""
Txtcodigo.Text = ""
Txteje.Text = ""
Txtbrida.Text = ""
Txtconexion.Text = ""
Txtinterface.Text = ""
Txtcircuito.Text = ""
Txtfuente.Text = ""
'Deshabilito el data para evitar cambiar de registro mientras estoy grabando uno nuevo
For i = 0 To 5
If Data(i).Enabled = True Then
With Data(i)
.Recordset.AddNew
.Enabled = False
End With
End If
Next
Txt(0).SetFocus
End Sub

Private Sub Cmdbase_Click()
Frmmarca.Show (vbModal)
End Sub

Private Sub Cmdborrar_Click()
Dim Resp As Long
For i = 0 To 5
If Data(i).Enabled = True Then
With Data(i)
If .Recordset.RecordCount = 0 Then
MsgBox "No hay elementos que borrar de.. " & UCase(Trim(Data(i).Caption)), vbInformation + vbOKOnly, "Atención :"
Exit Sub
Else
Resp = MsgBox("Vas a borrar un registro de.. " & UCase(Trim(Data(i).Caption)), vbDefaultButton2 + vbInformation + vbOKCancel, "Atención :")
If Resp = vbOK Then
'Provisional
If .Recordset.RecordCount = 1 Then
.Recordset.Delete
.Recordset.MoveFirst
Else
.Recordset.Delete
.Refresh
.Recordset.MoveFirst
End If
End If
End If
End With
End If
Next
End Sub

Private Sub Cmdbuscar_Click()
Cmdbuscar.Enabled = False
Frmfotos.Show (vbModal)
End Sub

Private Sub Cmdcancelar_Click()
desactivar_datos
For i = 0 To 17
Txt(i) = ""
Next
Txtfoto.Text = ""
Imgfoto = LoadPicture()
Txtgiro.Text = ""
Txtcodigo.Text = ""
Txteje.Text = ""
Txtbrida.Text = ""
Txtconexion.Text = ""
Txtinterface.Text = ""
Txtcircuito.Text = ""
Txtfuente.Text = ""
'Deshabilito y oculto el control data que este activo
For i = 0 To 5
Data(i).Enabled = False
Data(i).Visible = False
DBG(i).Visible = False
Next
End Sub

Private Sub CmdCancelar2_Click()
activar_datos
For i = 0 To 17
Txt(i) = ""
Next
Txtfoto.Text = ""
Imgfoto = LoadPicture()
Txtgiro.Text = ""
Txtcodigo.Text = ""
Txteje.Text = ""
Txtbrida.Text = ""
Txtconexion.Text = ""
Txtinterface.Text = ""
Txtcircuito.Text = ""
Txtfuente.Text = ""
For i = 0 To 5
If Data(i).Visible = True Then
With Data(i)
.Enabled = True
.Recordset.CancelUpdate
End With
End If
Next
V_Encoder
Cmdañadir.SetFocus
End Sub

Private Sub Cmdmodificar_Click()
marco_opciones.Enabled = False
marco_botones.Enabled = False
marco_datos.Enabled = True
For i = 0 To 5
If Data(i).Enabled = True Then
If Data(i).Recordset.RecordCount = 0 Then
MsgBox "No hay registros que modificar", vbCritical + vbOKOnly, "Error :"
marco_opciones.Enabled = False
marco_datos.Enabled = False
marco_botones.Enabled = True
Cmdañadir.SetFocus
Exit Sub
End If
With Data(i)
.Recordset.Edit
.Enabled = False
End With
End If
Next
Txt(0).SetFocus
End Sub

Private Sub Cmdsalir_Click()
Unload Me
End Sub

Private Sub Data_Reposition(Index As Integer)
If Sw = False Then V_Encoder
End Sub

Private Sub Form_Load()
LeerIni
desactivar_datos
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 13
KeyAscii = 0
SendKeys "{tab}"
Case 27
Unload Me
End Select
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
EscribirIni
End Sub

Private Sub Form_Unload(Cancel As Integer)
'Evita cerrar el programa mientras estoy grabando un registro a la tabla
If marco_datos.Enabled = True Then
Cancel = True
End If
End Sub

Private Sub Imgfoto_DblClick()
Frmamplia.Show (vbModal)
End Sub

Private Sub Option1_LostFocus()
If Option1.Value = True Then
Txt(2).Enabled = True
Txtcodigo.Enabled = False
Txtcodigo.Text = ""
Txtgiro.Enabled = False
Txtgiro.Text = ""
Txt(2).SetFocus
End If
End Sub

Private Sub Option2_LostFocus()
If Option2.Value = True Then
Txt(2).Enabled = False
Txt(2).Text = ""
Txtcodigo.Enabled = True
Txtgiro.Enabled = True
Txtgiro.SetFocus
End If
End Sub

Private Sub Txt_GotFocus(Index As Integer)
Txt(Index).BackColor = &H8000000D
Txt(Index).ForeColor = &H80000005
End Sub

Private Sub Txt_LostFocus(Index As Integer)
Txt(Index).BackColor = &H80000005
Txt(Index).ForeColor = &H80000008
End Sub

Private Sub Txtbrida_KeyPress(KeyAscii As Integer)
'Teclado bloqueado para evitar escribir
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtcircuito_KeyPress(KeyAscii As Integer)
'Teclado bloqueado para evitar escribir
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtcodigo_KeyPress(KeyAscii As Integer)
'Teclado bloqueado para evitar escribir
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtconexion_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txteje_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtfoto_Change()
If Txtfoto.Text = "" Then
Imgfoto.Picture = LoadPicture()
Else
Imgfoto.Picture = LoadPicture(Txtfoto.Text)
End If
End Sub

Private Sub Txtfuente_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtgiro_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub Txtinterface_KeyPress(KeyAscii As Integer)
'Bloqueo teclado
If InStr(KeyAscii, Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Private Sub T_encoder()
If Option1.Value = True Then
Data(i).Recordset.Fields("Tipencod") = Option1.Caption
Else
If Option2.Value = True Then
Data(i).Recordset.Fields("Tipencod") = Option2.Caption
End If
End If
End Sub

Private Sub C_encoder()
Data(i).Recordset.Fields("Refprov").Value = Txt(0)
Data(i).Recordset.Fields("Ref").Value = Txt(1)
Data(i).Recordset.Fields("Pasc").Value = Txt(2)
Data(i).Recordset.Fields("Giro").Value = Txtgiro
Data(i).Recordset.Fields("Tipcod").Value = Txtcodigo
Data(i).Recordset.Fields("Tencod").Value = Txt(3)
Data(i).Recordset.Fields("Tipeje").Value = Txteje
Data(i).Recordset.Fields("Teje").Value = Txt(4)
Data(i).Recordset.Fields("Brida").Value = Txtbrida
Data(i).Recordset.Fields("Tipcon").Value = Txtconexion
Data(i).Recordset.Fields("Inter").Value = Txtinterface
Data(i).Recordset.Fields("CS").Value = Txtcircuito
Data(i).Recordset.Fields("Fuente").Value = Txtfuente
Data(i).Recordset.Fields("Cons").Value = Txt(5)
Data(i).Recordset.Fields("CAxial").Value = Txt(6)
Data(i).Recordset.Fields("CRadial").Value = Txt(7)
Data(i).Recordset.Fields("NRev").Value = Txt(8)
Data(i).Recordset.Fields("Nimp").Value = Txt(9)
Data(i).Recordset.Fields("RV").Value = Txt(10)
Data(i).Recordset.Fields("RC").Value = Txt(11)
Data(i).Recordset.Fields("FT").Value = Txt(12)
Data(i).Recordset.Fields("TA").Value = Txt(13)
Data(i).Recordset.Fields("TF").Value = Txt(14)
Data(i).Recordset.Fields("IP").Value = Txt(15)
Data(i).Recordset.Fields("Hum").Value = Txt(16)
Data(i).Recordset.Fields("Precio").Value = Val(Txt(17))
Data(i).Recordset.Fields("Foto").Value = Txtfoto
End Sub

Private Sub V_Encoder()
Dim j As Integer
For i = 0 To 5
If Data(i).Enabled = True Then
If Data(i).Recordset.RecordCount = 0 Then
For j = 0 To 17
Txt(j) = ""
Next
Txtfoto.Text = ""
Imgfoto = LoadPicture()
Txtgiro.Text = ""
Txtcodigo.Text = ""
Txteje.Text = ""
Txtbrida.Text = ""
Txtconexion.Text = ""
Txtinterface.Text = ""
Txtcircuito.Text = ""
Txtfuente.Text = ""
Else
Txt(0).Text = Data(i).Recordset.Fields("Refprov").Value
Txt(1).Text = Data(i).Recordset.Fields("Ref").Value
Txt(2).Text = Data(i).Recordset.Fields("Pasc").Value
Txtgiro.Text = Data(i).Recordset.Fields("Giro").Value
Txtcodigo.Text = Data(i).Recordset.Fields("Tipcod").Value
Txt(3).Text = Data(i).Recordset.Fields("Tencod").Value
Txteje.Text = Data(i).Recordset.Fields("Tipeje").Value
Txt(4).Text = Data(i).Recordset.Fields("Teje").Value
Txtbrida.Text = Data(i).Recordset.Fields("Brida").Value
Txtconexion.Text = Data(i).Recordset.Fields("Tipcon").Value
Txtinterface.Text = Data(i).Recordset.Fields("Inter").Value
Txtcircuito.Text = Data(i).Recordset.Fields("CS").Value
Txtfuente.Text = Data(i).Recordset.Fields("Fuente").Value
Txt(5).Text = Data(i).Recordset.Fields("Cons").Value
Txt(6).Text = Data(i).Recordset.Fields("CAxial").Value
Txt(7).Text = Data(i).Recordset.Fields("CRadial").Value
Txt(8).Text = Data(i).Recordset.Fields("NRev").Value
Txt(9).Text = Data(i).Recordset.Fields("Nimp").Value
Txt(10).Text = Data(i).Recordset.Fields("RV").Value
Txt(11).Text = Data(i).Recordset.Fields("RC").Value
Txt(12).Text = Data(i).Recordset.Fields("FT").Value
Txt(13).Text = Data(i).Recordset.Fields("TA").Value
Txt(14).Text = Data(i).Recordset.Fields("TF").Value
Txt(15).Text = Data(i).Recordset.Fields("IP").Value
Txt(16).Text = Data(i).Recordset.Fields("Hum").Value
Txt(17).Text = Data(i).Recordset.Fields("Precio").Value
If IsNull(Data(i).Recordset.Fields("Foto")) Then
Txtfoto.Text = ""
Else
Txtfoto.Text = Data(i).Recordset.Fields("Foto").Value
End If
If UCase(Data(i).Recordset.Fields("Tipencod")) = "INCREMENTAL" Then
Option1.Value = True
Else
Option2.Value = True
End If
End If
End If
Next
End Sub

Private Sub LeerIni()

Rutaprog = App.Path
RutaIni = Rutaprog & "conf.ini"

Set Fs = CreateObject("Scripting.FileSystemObject")
Set F = Fs.OpenTextFile(RutaIni, 1, 0)
BPrincipio = True
Do While (F.AtEndofStream = False)
strPrev = F.ReadLine
If Mid(strPrev, 1, 6) = "BD=" Then
Ruta = Mid(strPrev, 4, Len(strPrev) - 3)
Else
If Mid(strPrev, 1, 6) = "TABLA=" Then 'Es el nombre de una tabla
If BPrincipio = True Then
BPrincipio = False
Data(0).DatabaseName = Ruta
Data(0).RecordSource = Mid(strPrev, 7, Len(strPrev) - 6)
Else
Num = Data.UBound
Num = Num + 1
Load Data(Num)
Data(Num).DatabaseName = Ruta
Data(Num).RecordSource = Mid(strPrev, 7, Len(strPrev) - 6)
Data(Num).Height = 375
Data(Num).Left = 3600
Data(Num).Top = 3120
Data(Num).Width = 4455
Data(Num).Enabled = False
Data(Num).Visible = False
End If
End If
End If
Loop
End Sub

Private Sub EscribirIni()

Rutaprog = App.Path
RutaIni = Rutaprog & "conf.ini"

Set Fs = CreateObject("Scripting.FileSystemObject")
Set F = Fs.CreateTextFile(RutaIni, True)

F.WriteLine ("BD=" & Ruta)
For i = 0 To Data.UBound
F.WriteLine ("TABLA=" & Data(i).RecordSource)
Next
F.Close
End Sub

Este post va ser la ostia de largo,en fin esto es lo que tengo no se si esta bien o no.Venga muchas gracias

naveguito
16 de Enero del 2004
Esto lo empeore despues de quedarme com data(0) y Dbg(0) me da error al aceptar una marca,despues de añadir una nueva tabla a parte de no añadir el control me dice que es un objeto no perteneciente a una matriz vamos no hace nada.Gracias

reventador
16 de Enero del 2004
hola naveguito, he estado repasando el hilo que teniamos antes y he visto comparándolo con el código que me acabas de poner que en éste te falta la parte de código que añade el control Data después de añadir una nueva marca. El código que teníamos era este en el formulario principal:

Private Sub Cmdbase_Click()
Frmmarca.Show (vbModal)
If Validar_Nueva = False Then
Exit Sub
Else
Num = Data.UBound
Num = Num + 1
Load Data(Num)
'Creo conexiones del control data
Data(Num).DatabaseName = Ruta
Data(Num).RecordSource = Nueva_Tabla
'Posicion
Data(Num).Height = 375
Data(Num).Left = 3600
Data(Num).Top = 3120
Data(Num).Width = 4455
Data(Num).Enabled = False
Data(Num).Visible = False
Data(Num).Caption = " " + Frmmarca.Txt(1)
Validar_Nueva = False
End If
End Sub

En este código sólo tendrás que añadir el Load DBG(Num), y al Cbselec.AddItem.

Un saludo, y paciencia que al final todo se arregla.

naveguito
16 de Enero del 2004
Lo hice como me has dicho y me da un error al enlazar el dbg,me lo justo aqui:

DBG(Num).DataSource = Data(Num)

Y dice textualmente:"Esta clase no admite automatizacion o no admite la interfaz esperada"

Espero que tenga solucion.Muchas gracias

naveguito
16 de Enero del 2004
Por cierto conf.ini esta vacio no se rellena,

naveguito
16 de Enero del 2004
Hola de nuevo Reventador, tengo otra pregunta en el combobox en su propiedad list en tiempo de diseño ha de tener los valores,el programa sigue sin funcionarme,podrias hecharme una mano te lo agradeceria muchisimo.Gracias

naveguito
16 de Enero del 2004
Si no sabes como resolverlo(aunque espero que si),te agradeceria que me lo hicieras saber,muchas gracias por tu tiempo.

P.d:Yo lo estoy intentando pero no me sale nada de lo que intento,es mas creo que lo estoy empeoranda.Saludos

naveguito
16 de Enero del 2004
Sigues por ahi necesito ayuda urgentemente,sigue sin funcionarme para nada