Visual Basic - SE ME BORRAN LOS DATOS DE LA MATRIZ

Life is soft - evento anual de software empresarial
 
Vista:

SE ME BORRAN LOS DATOS DE LA MATRIZ

Publicado por LU (26 intervenciones) el 28/04/2006 14:22:41
Hola!!

estoy haciendo una base de datos en Access 97 y tengo un problema con el Visual Basic. A lo mejor es que como llevo tantas horas delante del ordenata ya no veo el fallo pero bueno, a ver si me podeis decir qué hago mal, o como lo puedo solucionar.

Hago un cosigo para que recorra unos campos de texto de un formulario, en donde meto datos por teclado. Esos datos serán los criterios de una colsulta SQL. Guardo varios valores en una matriz para comparar valores. El problema está en que me meto en un bucle for, y cuando pas al indice siguiente, se ha borrado el contenido de la matriz!!!! que hago mal¿?¿?¿? os cuelgo el codigo¿?¿?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:SE ME BORRAN LOS DATOS DE LA MATRIZ

Publicado por LLE (3 intervenciones) el 28/04/2006 23:52:50
por que no pones una parte del procedimiento ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SE ME BORRAN LOS DATOS DE LA MATRIZ

Publicado por LU (26 intervenciones) el 02/05/2006 09:02:36
Vale, lo pongo todo y así salimos de dudas.


Option Compare Database

Dim CampMatrix(3) As String 'matriz que contendrá los nombres de los campos
Dim CopiaMatrix(3) As Integer 'matriz que contendrá el índice de los campos de texto
Dim TxtMatrix(3) As String 'matriz que almacenará los nombres de los campos de texto
Dim I As Integer
Dim StrSentencia As String 'variable que contendrá la sentencia SQL
Dim DestFinal As Integer 'variable que contendrá al destinatario seleccionado para poder modificar sus datos

Option Explicit

Private Sub Carga_Matriz()

'rellenamos los valores de las matrices
CampMatrix(0) = "[CP]"
CampMatrix(1) = "[POBLACION]"
CampMatrix(2) = "[TIPO_PERFIL]"
CampMatrix(3) = "[PUESTO" 'A este elemento de búsqueda habrá que añadirle el numero de puesto y el fin de corchete

CopiaMatrix(0) = "0"
CopiaMatrix(1) = "0"
CopiaMatrix(2) = "0"
CopiaMatrix(3) = "0"

TxtMatrix(0) = "CP"
TxtMatrix(0) = "POBLACION"
TxtMatrix(0) = "TIPO_PERFIL"
TxtMatrix(0) = "PUESTO"


End Sub

Private Sub BUSCAR_Click()

Dim Z As Integer
Dim COnt As Integer
Dim ValorCampo As String


ValorCampo = ""
StrSentencia = "SELECT [PERFILES DE CADA DESTINATARIO].[Tratamiento], [PERFILES DE CADA DESTINATARIO].[Nombre], [PERFILES DE CADA DESTINATARIO].[Apellido_1], [PERFILES DE CADA DESTINATARIO].[Apellido_2], [PERFILES DE CADA DESTINATARIO].[Dirección], [PERFILES DE CADA DESTINATARIO].[CP], [PERFILES DE CADA DESTINATARIO].[Poblacion], [PERFILES DE CADA DESTINATARIO].[Isla], [PERFILES DE CADA DESTINATARIO].[puesto_1], [PERFILES DE CADA DESTINATARIO].[puesto_2], [PERFILES DE CADA DESTINATARIO].[puesto_3], [PERFILES DE CADA DESTINATARIO].[TIPO_PERFIL] FROM [PERFILES DE CADA DESTINATARIO]"

COnt = 0
'Call Carga_Matriz

Me.CP.SetFocus
If Me.CP.Text <> "" Then 'si el primero no está vacío
CopiaMatrix(0) = 1
COnt = 1 'significa que hay un dato que buscar
Me.POBLACION.SetFocus
If Me.POBLACION.Text <> "" Then
CopiaMatrix(1) = 1
Me.TIPO_PERFIL.SetFocus
If Me.TIPO_PERFIL.Text <> "" Then
CopiaMatrix(2) = 1
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
Else
CopiaMatrix(3) = 0
End If
Else
CopiaMatrix(2) = 0
End If
Else
CopiaMatrix(1) = 0
Me.TIPO_PERFIL.SetFocus
If Me.TIPO_PERFIL.Text <> "" Then
CopiaMatrix(2) = 1
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
Else
CopiaMatrix(3) = 0
End If
Else
CopiaMatrix(2) = 0
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
Else
CopiaMatrix(3) = 0
End If
End If
End If


Else
CopiaMatrix(0) = 0
COnt = 0
Me.POBLACION.SetFocus
If Me.POBLACION.Text <> "" Then
CopiaMatrix(1) = 1
COnt = 1
Me.TIPO_PERFIL.SetFocus
If Me.TIPO_PERFIL.Text <> "" Then
CopiaMatrix(2) = 1
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
Else
CopiaMatrix(3) = 0
End If
Else
CopiaMatrix(2) = 0
End If
Else
CopiaMatrix(1) = 0
COnt = 0
Me.TIPO_PERFIL.SetFocus
If Me.TIPO_PERFIL.Text <> "" Then
CopiaMatrix(2) = 1
COnt = 1
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
Else
CopiaMatrix(3) = 0
End If
Else
CopiaMatrix(2) = 0
COnt = 0
Me.PUESTO.SetFocus
If Me.PUESTO.Text <> "" Then
CopiaMatrix(3) = 1
COnt = 1
Else
CopiaMatrix(3) = 0
End If
End If
End If
End If

'recorremos el array y en función del índice que nos encontremos, añadiremos criterios a la cadena de búsqueda

If COnt = 1 Then 'si hay algún dato en algún campo de texto
For Z = 0 To 3
If Z = 0 Then 'si es el primer registro tendrá que asignarle la cláusula WHERE

If CopiaMatrix(Z) = 1 Then
Me.CP.SetFocus
ValorCampo = Me.CP.Text
StrSentencia = StrSentencia & " WHERE " & "[PERFILES DE CADA DESTINATARIO]." & CampMatrix(Z) & "=" & ValorCampo
If CopiaMatrix(Z + 1) = 1 Then
StrSentencia = StrSentencia & " AND "
End If
Else
StrSentencia = StrSentencia & " WHERE "
End If
Else 'No es el primer registro
If CopiaMatrix(Z) = 1 Then

If TxtMatrix(Z) = "POBLACION" Then
Me.POBLACION.SetFocus
ValorCampo = Me.POBLACION.Text
End If
If TxtMatrix(Z) = "TIPO_PERFIL" Then
Me.TIPO_PERFIL.SetFocus
ValorCampo = Me.TIPO_PERFIL.Text
End If
If TxtMatrix(Z) = "PUESTO" Then
Me.PUESTO.SetFocus
ValorCampo = Me.PUESTO.Text
'aki hacer una funcion para añadirle los tres campos de puestos
Call Carga_Puestos(ValorCampo)
End If


If TxtMatrix(Z) <> "PUESTO" Then 'porque ya hemos cargado los puestos previamente
StrSentencia = StrSentencia & "[PERFILES DE CADA DESTINATARIO]." & CampMatrix(Z) & "='" & ValorCampo & "'"
End If
End If
If Z < 3 Then 'solo entrará mientras no sea el último registro
If CopiaMatrix(Z + 1) = 1 Then
StrSentencia = StrSentencia & " AND "
End If
End If
End If
Next Z
Else
Call TODOS_Click 'que los muestre todos de nuevo
Exit Sub
End If

StrSentencia = StrSentencia & ";"
MsgBox StrSentencia
Me.DATOSDESTINATARIOS.SetFocus
Me.DATOSDESTINATARIOS.RowSource = StrSentencia
Me.DATOSDESTINATARIOS.Requery
End Sub

Private Sub Form_Load()

'inicializamos la matriz y mostramos todos los datos
Call Carga_Matriz
Call TODOS_Click
DestFinal = 0

End Sub
Private Sub salir_Click() 'boton para salir del formulario
On Error GoTo Err_salir_Click

DoCmd.Close

Exit_salir_Click:
Exit Sub

Err_salir_Click:
MsgBox Err.Description
Resume Exit_salir_Click

End Sub

Private Function Carga_Puestos(StrPuesto As String)

'como hay tres campos en la tabla que son puestos desempeñados por la persona, debemos buscar en los 3.

StrSentencia = StrSentencia & "[PERFILES DE CADA DESTINATARIO].[Puesto_1]= '" & StrPuesto & "' OR [PERFILES DE CADA DESTINATARIO].[Puesto_2]='" & StrPuesto & "' OR [PERFILES DE CADA DESTINATARIO].[Puesto_3]='" & StrPuesto & "'"

End Function

Private Sub TODOS_Click()

StrSentencia = "SELECT [PERFILES DE CADA DESTINATARIO].[Tratamiento], [PERFILES DE CADA DESTINATARIO].[Nombre], [PERFILES DE CADA DESTINATARIO].[Apellido_1], [PERFILES DE CADA DESTINATARIO].[Apellido_2], [PERFILES DE CADA DESTINATARIO].[Dirección], [PERFILES DE CADA DESTINATARIO].[CP], [PERFILES DE CADA DESTINATARIO].[Poblacion], [PERFILES DE CADA DESTINATARIO].[Isla], [PERFILES DE CADA DESTINATARIO].[puesto_1], [PERFILES DE CADA DESTINATARIO].[puesto_2], [PERFILES DE CADA DESTINATARIO].[puesto_3], [PERFILES DE CADA DESTINATARIO].[TIPO_PERFIL] FROM [PERFILES DE CADA DESTINATARIO];"
'StrSentencia = "SELECT [PERFILES DE CADA DESTINATARIO].[Tratamiento], [PERFILES DE CADA DESTINATARIO].[Nombre], [PERFILES DE CADA DESTINATARIO].[Apellido_1], [PERFILES DE CADA DESTINATARIO].[Apellido_2], [PERFILES DE CADA DESTINATARIO].[Dirección], [PERFILES DE CADA DESTINATARIO].[CP], [PERFILES DE CADA DESTINATARIO].[Poblacion], [PERFILES DE CADA DESTINATARIO].[Isla], [PERFILES DE CADA DESTINATARIO].[puesto_1], [PERFILES DE CADA DESTINATARIO].[puesto_2], [PERFILES DE CADA DESTINATARIO].[puesto_3], [PERFILES DE CADA DESTINATARIO].[TIPO_PERFIL] FROM [PERFILES DE CADA DESTINATARIO] WHERE [PERFILES DE CADA DESTINATARIO].[CP]=38003 AND [PERFILES DE CADA DESTINATARIO].[TIPO_PERFIL] = 'FILMOTECA';"
Me.DATOSDESTINATARIOS.SetFocus
Me.DATOSDESTINATARIOS.RowSource = StrSentencia
Me.DATOSDESTINATARIOS.Requery

End Sub

la movida es que al entrar en el bucle FOR, todos los datos de las matrices declaradas arriba se borran, o vamos como si no las hubiese inicializado. Seguro que es una chorrada pero no consigo verlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SE ME BORRAN LOS DATOS DE LA MATRIZ

Publicado por LU (26 intervenciones) el 02/05/2006 12:18:06
Vale, ya he conseguido que me funcione, si od fijais tengo un fallo garrafal arriba al declarar las matrices, hay una que está mal inicializada jajajajaj le hepuesto siempre el mismo indice... que mal royo... el codigo ha sufrido algunos arreglos, va como la seda. Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar