Freigeben über


Suchen eines Werts oder der nächstgelegenen Übereinstimmung in einer Visual FoxPro-Tabelle aus VB .NET mithilfe des VFP OLE DB-Anbieters

In diesem Artikel wird beschrieben, wie Sie einen Wert oder eine übereinstimmung in einer Visual FoxPro-Tabelle aus VB .NET mithilfe des VFP OLE DB-Anbieters suchen.

Originalproduktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 956277

SCHNELLE VERÖFFENTLICHUNG

SCHNELLE VERÖFFENTLICHUNGSARTIKEL STELLEN INFORMATIONEN DIREKT AUS DER MICROSOFT-SUPPORTORGANISATION BEREIT. DIE HIERIN ENTHALTENEN INFORMATIONEN WERDEN ALS REAKTION AUF NEUE ODER EINDEUTIGE THEMEN ERSTELLT ODER SOLLEN ANDERE WISSENSBASISINFORMATIONEN ERGÄNZEN.

Handlung

Sie haben eine Visual FoxPro (VFP)-Tabelle, auf die Sie über den VFP OLE DB-Anbieter von Visual Basic .NET zugreifen. Sie möchten einen bestimmten Wert in einer Spalte oder die nächste Übereinstimmung suchen.

Lösung

Der VFP SET NEAR-Befehl steuert, was mit dem Datensatzzeiger in einer VFP-Tabelle geschieht, nachdem ein erfolgloser SEEK- oder FIND-Vorgang (das SEEK verwendet einen Index einer VFP-Spalte, um einen Wert zu finden). Wenn NEAR aktiviert ist, wird der Datensatzzeiger nach einem erfolglosen SEEK auf den nächstgelegenen übereinstimmenden Datensatz in der VFP-Tabelle positioniert.

Der folgende VB .NET-Code veranschaulicht, wie Sie einen Datensatz oder die nächstgelegene Übereinstimmung über den VFP OLE DB-Anbieter suchen. So verwenden Sie diesen Code...

  1. Erstellen Sie eine Beispiel-VFP-Tabelle und einen Index mithilfe des folgenden VFP-Codes:

    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
    
  2. Erstellen Sie eine neue Visual Studio VB .NET Windows-Anwendung. Platzieren Sie eine TextBox, eine CheckBox und eine Schaltfläche auf dem Formular.

  3. Doppelklicken Sie auf die Formularoberfläche, um den Code-Editor (form1.vb) zu öffnen, und fügen Sie dann den folgenden Code in ihn ein, und ersetzen Sie den aktuellen Inhalt.

Der Code führt Folgendes aus:

  • Legt den Status auf EIN/AUS fest, abhängig vom Zustand des CheckBox-Steuerelements im VB-Formular (aktiviert = EIN).
  • Öffnet die frei zugängliche VFP-Tabelle (C:\CUSTS) und sucht den Kundennamen.
  • Erstellt im VFP OLE DB-Anbieter einen Cursor, der an die .NET-Sitzung zurückgegeben werden soll.
  • Füllt den Rückgabecursor mit den Werten von FOUND(), RECNO('CUSTS') und RECCOUNT('CUSTS').
  • Verwendet die VFP-Funktion SETRESULTSET() , um den VFP-Cursor an .NET zurückzugeben.
  • VB .NET verwendet ein OleDbDataReader-Objekt, um den zurückgegebenen Cursor zu lesen und die Ergebnisse des SEEK in einem MSGBOX anzuzeigen.

Notiz

  • Wenn die VFP SEEK eine genaue Übereinstimmung findet, ist FOUND() (erste Spalte in der Ergebnismenge) "True". Andere Spalten können ignoriert werden.

  • Wenn die VFP SEEK keine genaue Übereinstimmung findet und NEAR EIN ist, FOUND() ist (erste Spalte im Resultset) "False " und RECNO() (2. Spalte im Resultset) ist entweder eine gültige Zahl oder RECCOUNT() (3. Spalte im Resultset) +1 (angibt EOF in der VFP-Tabelle).

  • Wenn VFP SEEK keine genaue Übereinstimmung findet und NEAR DEAKTIVIERT ist, wird FOUND() .F., und RECNO() wird RECCOUNT() + 1 sein.

  • Dritte Spalte in der Ergebnismenge ist konstant: RECCOUNT('CUSTS'). Verwenden Sie dies, um zu ermitteln, ob Sie sich auf dem nächstgelegenen Datensatz befinden, wenn NEAR aktiviert ist (d. h. Spalte 2 ist nicht Spalte 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

Weitere Informationen

Weitere Informationen zu den in diesem Artikel verwendeten VFP-Funktionen und -Befehlen (SEEK, SET NEAR, RECNO(), RECCOUNT(), SELECT(), SETRESULTSET() usw.), finden Sie unter Microsoft Visual FoxPro 9.0 SP2.

Der VFP OLE DB-Anbieter steht als kostenloser Download zur Verfügung und ist die bevorzugte Möglichkeit, auf VFP-Daten von Nicht-VFP-Anwendungen zuzugreifen. Sie ist hier verfügbar: Microsoft OLE DB-Anbieter für Visual FoxPro 9.0.

VERZICHTSERKLÄRUNG

MICROSOFT UND/ODER DEREN LIEFERANTEN MACHEN KEINE ZUSICHERUNGEN ODER GARANTIEN ÜBER DIE EIGNUNG, ZUVERLÄSSIGKEIT ODER GENAUIGKEIT DER INFORMATIONEN IN DEN DOKUMENTEN UND VERWANDTEN GRAFIKEN, DIE AUF DIESER WEBSITE (DIE "MATERIALIEN") ZU IRGENDEINEM ZWECK VERÖFFENTLICHT WURDEN. DIE MATERIALIEN KÖNNEN TECHNISCHE UNGENAUIGKEITEN ODER TYPOGRAFISCHE FEHLER ENTHALTEN UND JEDERZEIT OHNE VORHERIGE ANKÜNDIGUNG ÜBERARBEITET WERDEN.

IM MAXIMALEN UMFANG, DER DURCH GELTENDES RECHT ERLAUBT IST, LEHNT MICROSOFT UND/ODER SEINE LIEFERANTEN ALLE VERTRETUNGEN, GARANTIEN UND BEDINGUNGEN AB, OB AUSDRÜCKLICH, KONKLUDEND ODER GESETZLICH, EINSCHLIEßLICH, ABER NICHT BESCHRÄNKT AUF VERTRETUNGEN, GARANTIEN ODER BEDINGUNGEN DES TITELS, NICHTVERLETZUNG, ZUFRIEDENSTELLENDE BEDINGUNG ODER QUALITÄT, HANDELSÜBLICHKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK, IN BEZUG AUF DIE MATERIALIEN.