Korrigieren Sie diese SQL-Abfrage: Fehler „Microsoft Jet-Datenbankmodul die Eingabetabelle oder Abfrage‚IF‘nicht finden können“
-
01-10-2019 - |
Frage
soll ich hallo sagen Experten: D. Helfen Sie mir mit diesem hübschen Code:)
Die Datenbank:
"ID (Primärschlüssel)" | „Titel“
0 | "Title1"
1 | "Title2"
2 | "Title3"
3 | "TITEL4"
Sub AddRecord(ByVal Table As String, ByVal Columns As String, ByVal Record() As String)
Dim SubDir As String = ""
Dim Adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM " & Table, connectionString)
Dim command As OleDbCommand
Dim tbCorrectSyntax = ""
Using connection As New OleDbConnection(connectionString)
Try
connection.Open()
Dim Commandtxt As String = ""
For i = 0 To Record.GetUpperBound(0)
If Record(i).IndexOf(",") > 0 Then
Dim tmpRec() As String = Nothing
Dim cols() As String = Nothing
tmpRec = Record(i).Split(",")
cols = Columns.Split(",")
For j = 0 To tmpRec.GetUpperBound(0)
tbCorrectSyntax &= cols(j) & " = '" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " , ")
Next
End If
Dim txtCorrect As String = IIf(tbCorrectSyntax = "", Columns & " = " & Record(i), tbCorrectSyntax)
Commandtxt = "IF OBJECT_ID ( 'InsertOrUpdateItem', 'P' ) IS NOT NULL " & _
"DROP PROCEDURE InsertOrUpdateItem " & _
"GO " & _
"CREATE PROCEDURE InsertOrUpdateItem " & _
"AS " & _
"IF (EXISTS (SELECT * FROM " & Table & _
" WHERE " & txtCorrect & "))" & _
" begin " & _
"UPDATE (" & Table & ") " & _
txtCorrect & _
" WHERE " & txtCorrect & " " & _
" End " & _
" else " & _
" begin " & _
" INSERT INTO " & Table & " (" & Columns & ") " & _
" VALUES (" & Record(i) & ")" & _
" End " & _
"End "
'Commandtxt = "INSERT INTO " & Table & " (" & Columns & ") VALUES (" & Record(i) & ")"
command = New OleDbCommand(Commandtxt, connection)
command.CommandType = CommandType.StoredProcedure
command.ExecuteNonQuery()
Next
Catch ex As Exception
msgbox(ex.Message)
Finally
connection.Close()
End Try
End Using
End Sub
Function connectionString() As String
Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBdir & ";User Id=admin;Password=;"
End Function
Das erste Verfahren ist ein Wrapper Daten auf Datenbankfelder (wenn die Daten doent exist) hinzufügen Aber aktualisieren Sie die Zeile mit neuen Daten bereits vorhanden sein.
Input:
Table = Tablename
Columns = Name des colomns, die durch Komma (Ex1: "ID", Ex2: "ID, Titel, ...") getrennt werden aktualisiert wird
Record () = String-Array, das die neuen Werte repräsentieren (Mehrfachwerte werden mit Komma getrennt)
OK, bevor Werte zur Datenbank hinzufügen, sollten wir prüfen, ob eine Zeile existiert mit diesen Werten :)
Dazu Erstellen eine gespeicherten Prozedur ist ein bester Weg, um mit der Datenbank behandeln fastly.
So ... Das Problem ist jetzt, während der Laufzeit, werfen Fräulein OleDB diesen Fehler:
Microsoft Jet-Datenbankmodul kann nicht die Eingabetabelle oder Abfrage ‚IF‘ gefunden ....
Vielen Dank im Voraus: D
Lösung 2
fand ich eine Lösung für mein Problem (mit einem wenig Netto-Forschung :)) hahaha i glücklich und bin wie auch immer, die erste Frage war: ‚Wie eine Aufzeichnung in der Datenbank zu aktualisieren, wenn es vorhanden ist‘ Also ich habe versucht eine gespeicherte Prozedur in der Datenbank zu erstellen und speichern ... aber ... :)
Dann fand ich eine interessante Methode: die ExecuteScalar von OleDbCommand Klasse
zurückgeben einfach einen Wert entsprechend SQL-Eingabe: Im folgende Beispiel, die ich verwenden, es zurück um den Index (Primärschlüssel), wenn der recod existiert. So kann beginnen:
Function GetRecordIndex(ByVal Table As String, ByVal Columns As String, ByVal Record As String) As String
Dim Commandtxt As String = ""
Dim Command As OleDbCommand
Dim tbCorrectSyntax As String = ""
Dim tbCorrectSyntaxAND As String = ""
Using connection As New OleDbConnection(connectionString)
Try
connection.Open()
If Record.IndexOf(",") > 0 Then
Dim tmpRec() As String = Nothing
Dim cols() As String = Nothing
tmpRec = Record.Split(",")
cols = Columns.Split(",")
For j = 0 To tmpRec.GetUpperBound(0)
tbCorrectSyntax &= cols(j) & "='" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " , ")
tbCorrectSyntaxAND &= cols(j) & "='" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " AND ")
Next
End If
Dim txtCorrect As String = IIf(tbCorrectSyntax = "", Columns & "=" & Record, tbCorrectSyntax)
Dim txtCorrectAND As String = IIf(tbCorrectSyntaxAND = "", Columns & "=" & Record, tbCorrectSyntaxAND)
Commandtxt = "SELECT * FROM " & Table & " WHERE " & txtCorrectAND
Command = New OleDbCommand(Commandtxt, connection)
Dim RecordIndex As String = Command.ExecuteScalar
Return RecordIndex
Catch ex As Exception
Return Nothing
Finally
connection.Close()
End Try
End Using
End Function
Wie zuvor Spalten Parameter können eine einzelne Datenbank Spalte sein oder mehr Spalten getrennt mit Komma. Gleiche mit Datensatz, der die Daten in jeder Spalte
repräsentieren Danke für Ihre Hilfe
Fadelovesky
Andere Tipps
command.CommandType = CommandType.StoredProcedure
Sie behaupten, Sie eine gespeicherte Prozedur ausgeführt werden (Command wäre der Name eines bestehenden SProc sein). Was Sie tatsächlich einen SQL-Befehl geben direkt ausgeführt werden. Der Command sollte Text sein;