الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف يمكن إدراج نص يحتوى على علامة (') من جملة Update Table Set

بدأه هانى عوض في 13 يناير 2012 · 6 رد · 787 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

تحية طيبة

واجهتنى مشكلة حينما حاولت إدراج نص يحتوى على علامة single quote (') من جملة Update Table !!

مثل : "Basic's"

حيث شرط أساسى إدراج النص كاملاً بدون حذف ...

أرجو الإفادة للأهمية

#2

اخي الفاضل : هاني

السلام عليكم ورحمة الله وبركاته

و جمعة مباركة إن شاء الله

الحل يكون بهذه الطريقة

post-15367-006814600 1326454081_thumb.gi

لاحظ الجدول به اسمين ونريد تحديث السجلات بكلمة Basic's

من النموذج الذي عليه زر أمر التحديث

post-15367-051443600 1326454196_thumb.gi

والذي سيكون الكود به كالتالي

Private Sub cmdUpdate_Click()
Dim StrSQL As String
DoCmd.SetWarnings False
StrSQL = "UPDATE tblA SET tblA.strName = ""Basic's"""
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
DoCmd.OpenTable "tblA"
End Sub

الآن هنا الحل :

لاحظ كيف تم استخدام علامات التنصيص للكلمة Basic's

وعند الضغط على زر الأمر ستكون النتيجة بهذا الشكل

post-15367-071617800 1326454324_thumb.gi

تم تحديث الجدول بالكلمة المطلوبه كاملة

za-qryUpdate.rar

بالتوفيق

المرفقات
za1.gifza2.gifza3.gif
1
#3

شكراً أختى الغالية على سرعة التجاوب ولهذا الحل المقدم ..

ولكن الجملة عند تنفيذها داخل الاستعلام

UPDATE tblA SET tblA.strName = ""Basic's""

تعطى هذا الخطاء

post-96562-073281500%201326467882.png

حيث أننى أحتاجها جملة سيكوال لاستخدامها داخل لغة اخرى...

وقد بحثت كثيراً داخل عدة منتديات اجنبية ولكن دون جدوى..

مع تحياتى

post-96562-073281500 1326467882_thumb.pn

المرفقات
err.png
#4

اخي الفاضل هاني

الكود يختلف عن الإستعلام عند استخدام علامات التنصيص

اذا اردنا ان نضع التعبير في الإستعلام سيكون بهذه الطريقة

UPDATE tblA SET tblA.strName = "Basic's";

post-15367-094401700 1326470208_thumb.gi

قم بتشغيل الإستعلام Q1

za-qryUpdate-UP.rar

بالتوفيق

المرفقات
QZ.gif
#5

بالضبط هذه المشكلة التى تواجهنى..

أننى لا أستطيع كتابة علامة التنصيص التالية (") داخل جملة التحديث لأن اللغة التى أعمل عليها لا تتعرف على علامة التنصيص داخل الجملة لذا نستبدلها بعلامة تنصيص أحادية كالتالية (')

بمعنى آخر عند كتابة الجملة السابقة نكتبها هكذا

UPDATE tblA SET tblA.strName = 'Basic's';

وهذا ما يحدث عنه الخطأ..

لذا ... هل يمكن استبدال علامة التنصيص المزدوجة بـ char مثلاً.. أو أى علامتين نضع بينهم متغير نصى دون التقيد بما يحويه هذا ما أفكر فيه حالياً

ملحوظة :

لم اكتب هذا السؤال فى قسم C# بل هنا لمعرفتى الشخصية بإمكانيات قسم الأكسس

عفواً على الاطالة

وشكراً لسعة صدركم

#6

حسنا اخي هاني

اكتبها بأحد هذه الطرق في #C

UPDATE tblA SET tblA.strName ="\Basic's"";

UPDATE tblA SET tblA.strName =@"\Basic's"";

UPDATE tblA SET tblA.strName ="\"" + "Basic's" + "\"";

UPDATE tblA SET tblA.strName ="\"Basic's\"";

C#

const string quote = "\"";
textBox1.Text = "She said, " + quote +  "You deserve a treat!"+ quote ;

C#

private void InsertQuote(){
   textBox1.Text = "She said, \"You deserve a treat!\" ";
}

C#

private void InsertAscii(){
   textBox1.Text = "She said, " + '\u0022' + "You deserve a treat!" + '\u0022';
}

http://msdn.microsoft.com/en-us/library/267k4fw5.aspx

بالتوفيق

تم تعديل هذه المشاركة بواسطة zahrah في 14 يناير 2012 في 00:25

1
#7

مع فائق التحية والتقدير لمجهودكم المبذول فى رقى قسم الأكسس...

قمت بالعمل على بناء جملة التحديث بكافة الطرق السابقة ولكن للاسف النص الذى يتم إضافته بواسطة متغير .. معقد بعض الشىء.. فهو يحتوى على العديد من الكلمات المحجوزة والرموز...

ولكن قد وفقت فى الوصول للمطلوب بطريقة أخرى عن طريق الـ Parameters كالتالى:

        internal OleDbCommand cmdH = new OleDbCommand();

        private int ExecuteNonQueryParam(string Sql, string colName, string colValue)
        {
            cmdH.Connection = conHStr;
            int afectRow = 0;
            try
            {
                openConnection();
                cmdH.CommandText = Sql;
                cmdH.Parameters.Add(colName, OleDbType.LongVarChar);
                cmdH.Parameters[colName].Value = colValue;
                afectRow = cmdH.ExecuteNonQuery();
                closeConnection();
                MessageBox.Show("تمت العملية بنجاح");

            }
            catch (OleDbException ex)
            {
                MessageBox.Show(ex.Message);
                afectRow = -1;
            }
            finally
            {
                cmdH.Dispose();
                closeConnection();

            }
            return afectRow;
        }

        public int MyExecuteParam(string Sql, string colName, string colValue)
        {
            return ExecuteNonQueryParam(Sql, colName, colValue);
        }
// ويتم الاستدعاء كالتالى مع تعديل المتغير

                            string strAdd = ev.Document.Text.ToString();

                            clsDb.MyExecuteParam("UPDATE tblScode SET sCode = ? WHERE idSCode = " + trvCat.SelectedNode.Tag.ToString() + ";", "sCode", strAdd);

لذا وجب التنويه لعل أحد الأعضاء تواجهه نفس المشكلة..

وشكراً لتواصلكم المتميز.

تم تعديل هذه المشاركة بواسطة هانى عوض في 16 يناير 2012 في 00:26

مواضيع مشابهة