Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo buscar un valor o una coincidencia más cercana en una tabla de Visual FoxPro de VB .NET mediante el proveedor OLE DB de VFP.
Versión original del producto: Visual FoxPro
Número de KB original: 956277
PUBLICACIÓN RÁPIDA
LOS ARTÍCULOS DE PUBLICACIÓN RÁPIDA PROPORCIONAN INFORMACIÓN DIRECTAMENTE DESDE LA ORGANIZACIÓN DE SOPORTE TÉCNICO DE MICROSOFT. LA INFORMACIÓN CONTENIDA EN EL PRESENTE DOCUMENTO SE CREA EN RESPUESTA A TEMAS EMERGENTES O ÚNICOS, O SE PRETENDE COMPLEMENTAR OTRA INFORMACIÓN DE LA BASE DE CONOCIMIENTO.
Acción
Tiene una tabla de Visual FoxPro (VFP) a la que accede desde Visual Basic .NET a través del proveedor OLE DB VFP. Desea buscar un valor determinado en una columna o la coincidencia más cercana.
Solución
El comando VFP SET NEAR controla lo que sucede con el puntero de registro en una tabla VFP después de una operación SEEK (o FIND) incorrecta (SEEK usa un índice en una columna VFP para buscar un valor). Cuando NEAR está activado, el puntero de registro en la tabla VFP se coloca en el registro coincidente más cercano después de una búsqueda sin éxito.
El siguiente código de VB .NET muestra cómo ubicar un registro o la coincidencia más cercana a este mediante el proveedor OLE DB de VFP. Para usar este código...
Cree una tabla y un índice de VFP de ejemplo mediante el código VFP siguiente:
CLOSE DATA ALL DELETE FILE C:\CUSTS.DBF RECYCLE DELETE FILE C:\CUSTS.CDX RECYCLE CREATE TABLE C:\CUSTS (NAMES VarChar(30)) INDEX ON UPPER(NAMES) TAG NAMES INSERT INTO CUSTS VALUES('FRED') INSERT INTO CUSTS VALUES('JOHN') INSERT INTO CUSTS VALUES('MARY') CLOSE DATA ALL
Cree una nueva aplicación de Windows .NET de Visual Studio VB. Coloque un cuadro de texto, una casilla y un botón en el formulario.
Haga doble clic en la superficie del formulario para abrir el editor de código (form1.vb) y, a continuación, pegue el código siguiente en él y reemplace el contenido actual.
El código realiza lo siguiente:
- Ajusta ON/OFF según el estado del CheckBox en el formulario VB (marcado = ON).
- Abrir la tabla VFP (C:\CUSTS) y buscar el nombre del cliente.
- En el proveedor OLE DB de VFP, se crea un cursor que será devuelto a la sesión de .NET.
- Rellena el cursor devuelto con los valores de
FOUND()
,RECNO('CUSTS')
yRECCOUNT('CUSTS')
. - Usa la función VFP
SETRESULTSET()
para devolver el cursor VFP a .NET. - VB .NET usa un
OleDbDataReader
objeto para leer el cursor devuelto y mostrar los resultados de SEEK en unMSGBOX
.
Nota:
Cuando el VFP SEEK encuentra una coincidencia exacta,
FOUND()
(la primera columna del conjunto de resultados) es True. Se pueden omitir otras columnas.Cuando VFP SEEK no encuentra una coincidencia exacta y NEAR está activado,
FOUND()
(la primera columna del conjunto de resultados) es False yRECNO()
(2.ª columna en el conjunto de resultados) será un número válido o seráRECCOUNT()
(3.ª columna en el conjunto de resultados) +1 (lo que indica EOF en la tabla VFP).Cuando VFP SEEK no encuentra una coincidencia exacta y NEAR está desactivado,
FOUND()
será .F., RECNO() será RECCOUNT() + 1.La tercera columna del conjunto de resultados es constante:
RECCOUNT('CUSTS')
. Úselo para determinar si está en el registro más cercano cuando NEAR está activado (columna 2 no es columna 3 + 1).
Imports System.Data.OleDb
Imports System.Text
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Focus()
TextBox1.Text = "JOHN"
TextBox1.CharacterCasing = CharacterCasing.Upper
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
FindOperator(TextBox1.Text, CheckBox1.Checked)
TextBox1.Focus()
End Sub
Function FindOperator(ByVal Name2Find As String, ByVal Near As Boolean) As VariantType
Dim oConn As New OleDbConnection( _"Provider=VFPOLEDB;Data Source=C:\")
Dim oCmd As New OleDbCommand("", oConn)
Dim oStrBldr As New StringBuilder
Dim oReader As OleDbDataReader
Dim lcNear As String = IIf(Near, "ON", "OFF")
With oStrBldr
.Append("EXECS(").Append("[SET NEAR " & lcNear & "] + CHR(13) + ").Append("[USE CUSTS ORDER NAMES SHARED AGAIN IN 0] + CHR(13) + ").Append("[SEEK '" & Name2Find & "' IN CUSTS] + CHR(13) + ").Append("[SELECT 0] + CHR(13) + ").Append("[CREATE CURSOR SeekResults(lFound L, nRecno I, nReccount I)] + CHR(13) + ").Append("[INSERT INTO SeekResults VALUES ( FOUND('CUSTS'), RECNO('CUSTS'), RECCOUNT('CUSTS'))]+ CHR(13) + ").Append("[USE IN SELECT('CUSTS')] + CHR(13) + ").Append("[RETURN SETRESULTSET( 'SeekResults' )]").Append(")")
oCmd.CommandText = .ToString
End With
oConn.Open()
oReader = oCmd.ExecuteReader()
While oReader.Read
MsgBox("Found: " & oReader.GetBoolean(0).ToString & vbCrLf & _
"RECNO(): " & oReader.GetInt32(1).ToString & vbCrLf & _
"RECCOUNT(): " & oReader.GetInt32(2).ToString)
End While
oConn.Close()
oConn.Dispose()
oCmd.Dispose()
oReader.Close()
End Function
End Class
Más información
Para obtener más información sobre las funciones y comandos de VFP usados en este artículo (SEEK, SET NEAR, RECNO(), RECCOUNT(), SELECT(), SETRESULTSET(), consulte Microsoft Visual FoxPro 9.0 SP2.
El proveedor OLE DB VFP está disponible como descarga gratuita y es la manera preferida de acceder a los datos de VFP desde aplicaciones que no son VFP. Está disponible aquí: Proveedor OLE DB de Microsoft para Visual FoxPro 9.0.
RENUNCIA
MICROSOFT Y/O SUS PROVEEDORES NO REALIZAN NINGUNA REPRESENTACIÓN O GARANTÍA SOBRE LA IDONEIDAD, CONFIABILIDAD O PRECISIÓN DE LA INFORMACIÓN CONTENIDA EN LOS DOCUMENTOS Y GRÁFICOS RELACIONADOS PUBLICADOS EN ESTE SITIO WEB (LOS "MATERIALES") PARA CUALQUIER PROPÓSITO. LOS MATERIALES PUEDEN INCLUIR IMPRECISIONES TÉCNICAS O ERRORES TIPOGRÁFICOS Y PUEDEN REVISARSE EN CUALQUIER MOMENTO SIN PREVIO AVISO.
EN LA MEDIDA MÁXIMA PERMITIDA POR LA LEY APLICABLE, MICROSOFT Y/O SUS PROVEEDORES RENUNCIAN Y EXCLUYEN TODAS LAS REPRESENTACIONES, GARANTÍAS Y CONDICIONES, YA SEAN EXPRESAS, IMPLÍCITAS O LEGALES, INCLUIDAS, ENTRE OTRAS, LAS REPRESENTACIONES, GARANTÍAS O CONDICIONES DE TÍTULO, NO INFRACCIÓN, CONDICIÓN SATISFACTORIA O CALIDAD, COMERCIABILIDAD Y IDONEIDAD PARA UN PROPÓSITO DETERMINADO, CON RESPECTO A LOS MATERIALES.