Visual Basic - comparar coincidencia de dos campos

Life is soft - evento anual de software empresarial
 
Vista:

comparar coincidencia de dos campos

Publicado por Luis (1 intervención) el 22/05/2012 16:07:11
Hola
Tengo una tabla en access en la que tengo dos campos, propietarios catastro y propietarios reales
Lo que pretendo hacer es que me localice las parcelas que tienen coincidendia de alguno de los apellidos.
y luego en una nueva columna los que coinciden pongo un '1' y los que no coinciden '2'
ejemplo:
propietario catastro Propietario real Coincidencia
pepito perez diaz eva diaz castro 1
samuel copa rey marta copa rey 1
manuel lopez arias alberto gonzalez filloy 2
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
Imágen de perfil de ORZO
Val: 2
Ha disminuido su posición en 155 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

comparar coincidencia de dos campos

Publicado por ORZO (9 intervenciones) el 25/05/2012 07:51:05
Hola, Luis.

Te añado una solución que procesa todos los nombres contenidos en el campo propietarios_reales (prop_real en mi ejemplo) suponiendo que están separados por un espacio, buscándolos en el campo propietarios_catastro (prop_catastro) y guardando el número de coincidencias encontradas en el campo resultado, en mi ejemplo.

Me gustaría subir un fichero comprimido con el proyecto y la base de datos que he utilizado, pero no veo esa opción en este formulario de respuesta. Si lo precisas, me lo pides y te lo remito.

Para que el ejemplo funcione, tienes que tener un form con un botón de nombre btniniciar, un label de nombre lblcontador (que indicará el registro procesado) y una base de datos de nombre base.mdb y una tabla de nombre propietarios con tres campos (prop_real text 80, prop_catastro text 80 y un campo resultado integer).

El código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Option Explicit
 
Private Sub btnIniciar_Click()
 
  ' -- Abrimos la conexión a la base de datos.
  Dim cn As New ADODB.Connection
  cn.ConnectionString = "provider=Microsoft.Jet.OLEDB.4.0;data source=" & App.Path & "\base.mdb;"
  cn.Open
 
  ' -- El valor para el campo resultado es 0 sino hay ninguna coincidencia.
  ' -- Si es diferente de 0, reflejará las coincidencias que se hayan producido
  ' -- (o sea, 1 para una coincidencia, 2 para dos coincidencias, etcétera).
 
  ' -- Asumimos que no va a coincidir ningún nombre real con los del catastro.
  cn.Execute "UPDATE propietarios SET resultado=0;"
 
  ' -- Abrimos un recordset para cargar los registros de la tabla.
  Dim rs As New ADODB.Recordset
  Set rs.ActiveConnection = cn
  rs.CursorLocation = adUseClient
  rs.LockType = adLockBatchOptimistic
  rs.CursorType = adOpenDynamic
  rs.Open "SELECT * FROM propietarios", cn
 
  ' -- Desde el primer registro, hasta el último, comprobamos los datos de los propietarios
  ' -- reales con los que constan en el catastro.
 
  Dim registro As Long: registro = 0
 
  ' -- Posicionamos el recordset al principio.
  rs.MoveFirst
  Do
 
    registro = registro + 1: lblcontador.Caption = registro
 
    ' -- Construimos un array unidimensional con los nombres (teniendo en cuenta que estarán separados por un espacio.
    Dim nombres() As String: nombres = Split(rs("prop_real"), " ")
    Dim x As Long
 
    ' -- Comparamos ...
    For x = LBound(nombres) To UBound(nombres)
      If (InStr(1, rs("prop_catastro"), Trim$(nombres(x))) <> 0) Then
        rs("resultado") = rs("resultado") + 1
      End If
    Next x
 
    ' -- Vamos por el siguiente.
    rs.MoveNext
 
  Loop While (Not rs.EOF)
 
  ' -- Actualizamos los datos en la base de datos.
  rs.UpdateBatch adAffectAll
 
  ' -- Cerramos el recordset.
  rs.Close: Set rs = Nothing
  ' -- Cerramos la conexión.
  cn.Close: Set cn = Nothing
 
End Sub



Espero que te sea de ayuda.
Saludos.
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