Probleme DBF, VB und Foxpro

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Probleme DBF, VB und Foxpro

    Hallo,

    ich habe folgenden Code (Danke an das Internet). Allerdings möchte ich das ich mein Programm auf mehreren Computern im Netzwerk ausführen kann. Dann kommt jedoch der Fehler. Mein Provider sei nicht installiert- Stimmt ja auch. Ich möchte Ihn aber nicht installieren (handelt sich so um 60 PC´s).

    Gibts ne alternative? Die dll im Exe Verzeichnis hat nicht geklappt.

    Danke vorab. LG


    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Private ConnectionString As String = "Provider=VFPOLEDB;Data Source=\\NAS-QNAP\Daten;Collating Sequence=MACHINE"
    4. Private filteredRows As DataRow()
    5. Private currentFilteredIndex As Integer = 0
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. FilterData()
    8. ShowFilteredData(currentFilteredIndex)
    9. End Sub
    10. Private Sub FilterData()
    11. Try
    12. Using connection As New OleDbConnection(ConnectionString)
    13. connection.Open()
    14. ' SQL-Abfrage erstellen
    15. Dim query As String = "SELECT MEMO, IST_MEMO FROM bericht WHERE IST_DAT = CTOD('1899-12-30') AND betreff LIKE '%Meldungen%'"
    16. ' Datenadapter erstellen
    17. Using adapter As New OleDbDataAdapter(query, connection)
    18. ' DataTable erstellen und Daten aus der DBF-Datei laden
    19. Dim dataTable As New DataTable()
    20. adapter.Fill(dataTable)
    21. ' Filtern der Daten im DataTable
    22. filteredRows = dataTable.Select()
    23. End Using
    24. End Using
    25. Catch ex As Exception
    26. MessageBox.Show("Fehler beim Laden der Daten: " & ex.Message)
    27. End Try
    28. End Sub
    29. Private Sub ShowFilteredData(index As Integer)
    30. ' Überprüfen, ob der angegebene Index gültig ist
    31. If index >= 0 AndAlso index < filteredRows.Length Then
    32. ' Den Text der MEMO-Spalte in TextBox1 einfügen
    33. TextBox1.Text = filteredRows(index)("MEMO").ToString()
    34. ' Den Text der IST_MEMO-Spalte in TextBox2 einfügen
    35. TextBox2.Text = filteredRows(index)("IST_MEMO").ToString()
    36. Else
    37. TextBox1.Text = "Keine weiteren Datensätze vorhanden, Zeige ersten Datensatz"
    38. TextBox2.Text = ""
    39. currentFilteredIndex = 0
    40. End If
    41. End Sub
    42. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    43. ' Zum nächsten Datensatz wechseln
    44. currentFilteredIndex += 1
    45. ShowFilteredData(currentFilteredIndex)
    46. End Sub
    47. End Class


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Foxpro kenne ich selber nicht, such aber mal bei NuGet in Visual Studio nach VfpOleDB und probier es damit.
    Im Netzwerk wäre ein Sql-Server (MSSQL/MySQL) eigentlich die bessere Wahl.

    Wenn ich deinen SqlQuery so sehe, empfehle ich dir dringend, dich in das Thema SQL Injections einzuarbeiten, bevor du da weitermachst wo du gerade bist.
    Arbeite mit SqlCommand.Parameter, um die Werte sicher zu übergeben.
    jo, aber ist ich finde absehbar, dass der User demnächst mehr Einfluss auf die Filter-Bedingungen erhält.
    Also auf SqlInjection und DbParametern wird man zumindest sehr bald zurückkommen müssen.

    Aber zur Frage: Tja, das wird nicht funktionieren, wenn auf den 60 Rechnern nicht geeignete Provider installiert und dem Programm bekannt sind.
    OleDb-Provider sind glaub auf jedem Windows drauf, ob auch SqlClient-Provider weiss ich garnet (müsste man mal googeln).
    also du könntest mal hierhin gehen: connectionstrings.com/dbf-foxpro/
    und gugge ob du da einen Connectionstring findest, der funzt.

    (und wenn funzt, dann DbParameter einbauen. Das hilft nicht nur gegen SqlInjection, sondern auch die Übergabe eines Datums wird von der Db besser verstanden, wenn das Datum per DbParameter kommt)