Correggere questa query SQL: errore di “motore di database Microsoft Jet non riesce a trovare la tabella di input o query 'SE'”
-
01-10-2019 - |
Domanda
Devo dire Ciao esperti: D. Aiutami con questa bella code:)
La banca dati:
"ID (chiave primaria)" |
"Titolo"
0 |
"title1"
1 |
"Title2"
2 |
"title3"
3 | "TITLE4"
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
La prima procedura è un wrapper per aggiungere dati ai campi del database (se esistono dati doent) Ma aggiornarlo con la riga già esistono nuovi dati.
Input:
Tabella = TableName
Colonne = nome colomns che verranno aggiornati separati da virgola (Ex1: "ID", Ex2: "ID, titolo, ...")
Record () = matrice di stringhe che rappresentano i nuovi valori (valori multipli sono separati da una virgola)
OK, prima di aggiungere i valori alla base di dati, dovremmo verificare se esiste una riga con questo valori :)
Per fare questo, la creazione di una stored procedure è un modo migliore per trattare con il database velocemente.
Quindi ... Il problema ora è, al tempo di esecuzione, la signorina OleDB gettare questo errore:
motore di database Microsoft Jet non riesce a trovare la tabella di input o query 'SE' ....
Grazie in anticipo: D
Soluzione 2
Ho trovato una soluzione per il mio problema (con un po 'di ricerca rete :)) hahahaha i m felice
in ogni caso, la domanda iniziale era: 'Come aggiornare un record nel database se esiste'
Così ho provato a creare e memorizzare una stored procedure nel database ... ma ... :)
Poi ho trovato un interessante metodo: l'ExecuteScalar OleDbCommand Classe
Semplicemente restituiscono un valore in base all'input SQL: il seguente esempio che ho usato, esso restituisce la (chiave primaria) indice se esiste recod. Quindi, consente di iniziare:
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
Come prima, Colonne parametro può essere una singola colonna di database, o più colonne separati da virgole. stessa cosa con record che rappresentano i dati all'interno di ogni colonna
Grazie per il vostro aiuto
Fadelovesky
Altri suggerimenti
command.CommandType = CommandType.StoredProcedure
si richieda si esegue un proc memorizzato (CommandText sarebbe il nome di uno sproc esistente). Quello che in realtà si sta dando un comando SQL da eseguire direttamente. Il CommandType dovrebbe essere di testo;