قم بتصحيح استعلام SQL هذا: خطأ "لا يمكن لمحرك قاعدة بيانات Microsoft Jet العثور على جدول الإدخال أو الاستعلام إذا" ""
-
01-10-2019 - |
سؤال
يجب أن أقول مرحبا الخبراء: د. ساعدني في هذا الرمز الجميل :)
قاعدة البيانات:
"معرف (المفتاح الأساسي)" | "عنوان"
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
الإجراء الأول هو غلاف لإضافة بيانات إلى حقول قاعدة البيانات (في حالة وجود بيانات البيانات) ولكن قم بتحديثه للصف مع بيانات جديدة موجودة بالفعل.
إدخال:
الجدول = اسم tablename
الأعمدة = اسم colomns التي سيتم تحديثها مفصولة بواسطة الفاصلة (ex1: "id" ، ex2: "id ، title ، ...")
سجل () = صفيف السلسلة الذي يمثل القيم الجديدة (يتم فصل قيم متعددة مع فاصلة)
حسنًا ، قبل إضافة قيم إلى قاعدة البيانات ، يجب علينا التحقق مما إذا كان هناك صف مع هذه القيم :)
للقيام بذلك ، يعد إنشاء إجراء مخزن أفضل طريقة للتعامل مع قاعدة البيانات بسرعة.
لذا ... المشكلة الآن هي ، في وقت التشغيل ، ملكة جمال OLEDB رمي هذا الخطأ:
لا يمكن لمحرك قاعدة بيانات Microsoft Jet العثور على جدول الإدخال أو الاستعلام "إذا" ....
شكرا مقدما
المحلول 2
لقد وجدت حلاً لمشكلتي (مع القليل من الأبحاث الصافية :)) هاهاهاها أنا سعيد
على أي حال ، كان السؤال الأولي هو: "كيفية تحديث سجل في قاعدة البيانات إذا كان موجودًا" ، لذا حاولت إنشاء وتخزين إجراء مخزن في قاعدة البيانات ... لكن ... :)
ثم وجدت طريقة مثيرة للاهتمام: executescalar من فئة OledbCommand
إنها ببساطة إرجاع قيمة وفقًا لإدخال SQL: في المثال التالي الذي استخدمته ، فإنه يعيد الفهرس (المفتاح الأساسي) في حالة وجود Recod. لذلك لنبدأ:
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
كما كان من قبل ، يمكن أن تكون معلمة الأعمدة عمود قاعدة بيانات واحدة ، أو أعمدة متعددة مفصولة مع الفاصلة. نفس الشيء مع السجل الذي يمثل البيانات داخل كل عمود
شكرا لمساعدتك
Fadelovesky
نصائح أخرى
command.CommandType = CommandType.StoredProcedure
أنت تدعي أنك تقوم بتشغيل proc مخزنة (سيكون CommandText اسم Sproc موجود). ما تعطيه بالفعل أمر SQL ليتم تنفيذه مباشرة. يجب أن يكون CommandType نصًا ؛