Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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...
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
Erstellen Sie eine neue Visual Studio VB .NET Windows-Anwendung. Platzieren Sie eine TextBox, eine CheckBox und eine Schaltfläche auf dem Formular.
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')
undRECCOUNT('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 einemMSGBOX
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 " undRECNO()
(2. Spalte im Resultset) ist entweder eine gültige Zahl oderRECCOUNT()
(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.