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

مشكلة في كود تخزين في قاعدة بيانات sql server

بدأه c_vita في 23 نوفمبر 2013 · 7 رد · 924 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

الكود الاول يعمل 100%  والكود الثاني لا يعمل وتظهر لي رسالة " invalid column name  "

الاكواد وظيفتها البحث في جدول عن القيمة المكتوبة في " Tcombobox " لتخزينها عبر " Stored procedure " في قاعدة بيانت  " sql server  "

ارجوا الافادة عن سبب الخطأ

 

الكود الاول

 if ComboBox1.Text <> '' then
      begin
        with dM.QMultiII do
        begin
          Close;
          SQL.Clear;
          SQL.Add('select No,NameA From Accounts');
          SQL.Add('Where NameA = ' + ComboBox1.Text);
          Prepared;
          Open;
          if (not IsEmpty) and (not FieldByName('No').IsNull) then
            SP.Parameters.ParamByName('@Company')
              .Value := dM.QMultiII.FieldByName('No').Value;
          SQL.Clear;
          Close;
        end;
      end;

الكود الثاني

if ComboBox1.Text <> '' then
      begin
        with dM.QMultiII do
        begin
          Close;
          SQL.Clear;
          SQL.Add('Select No,Dscrpt From Comp_Class');
          SQL.Add('Where Dscrpt = ' + ComboBox1.Text);
          Prepared;
          Open;
          if (not IsEmpty) and (not FieldByName('CCNo').IsNull) then
            SP.Parameters.ParamByName('@Class').Value := dM.QMultiII.FieldByName
              ('CCNo').Value;
          SQL.Clear;
          Close;
        end;
      end;
#2

السلام عليكم...

 

سبب الخطأ هو أنك في هذا الجزء:

          if (not IsEmpty) and (not FieldByName('CCNo').IsNull) then
            SP.Parameters.ParamByName('@Class').Value := dM.QMultiII.FieldByName
              ('CCNo').Value;

تشير إلى حقل (عمود) اسمه CCNo لكنه غير موجود في جملة SELECT التي استعملتها لفتح الاستعلام.

 

نرجو الاستفادة و السلامن.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

السلام عليكم

الاخ ناجي اشكر لك ردك الطيب 

لكن الحقيقة ان المشكلة تبدأ عند الامر " OPEN "  تظهر رسالة " invalid column name  "  

ويعطيني القيمة الموجودة في  (ComboBox1.Text) 

وكأني لا يمكن ان تكون القيمة هي اسم الحقل

 

اما بالنسبة لما بعد الامر "OPEN " فقد كنت اجرب حالات عدة ويبدوا اني نسيت ان اصحح اخر ما وصلت اليه قبل مشاركتي هذه

بانتظار ردك ... تقبل تحياتي

#4

السلام عليكم...

 

هذا يعني أنه يجب توضيح تركيب جملة SELECT. أعتقد أن الحقل Dscrpt هو حقل نصي (اختصار من Description). و لكن على أية حال:

 

1. إذا كان الحقل Dscrpt عددياً و تريد البحث في هذا الحقل عن القيمة الموجودة في ComboBox1، فيجب أن تكون ComboBox1.Text قيمة عددية.

2. إذا كان الحقل Dscrpt نصياً و تريد البحث في هذا الحقل عن القيمة الموجودة في ComboBox1، فيجب إحاطة ComboBox1.Text بعلامات تنصيص أو اقتباس، غالباً باستعمال الدالة QuotedStr:

SQL.Add('Where Dscrpt = ' + QuotedStr(ComboBox1.Text));

3. إذا كان النص الموجود في ComboBox1 يمثل اسم حقل تريد أن تفارنه بالحقل Dscrpt (أظن أن ذلك ما فهمته من ملاحظتك الأخيرة) فيجب أن تتأكد من صحة الاسم الموجود في ComboBox1. و إذا كان اسم الحقل ذاك يحتوي في الأصل على فراغات أو يشبه كلمة أساسية (محجوزة) من كلمات SQL أو ما شابه ذلك فاحصر ذلك الاسم بين قوسين مربعين:

SQL.Add('Where Dscrpt = [' + ComboBox1.Text + ']');

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#5

السلام عليكم

الحقيقة اقول جزاك الله خيرا اخي ناجي

الحل كان في النقطة رقم 2 مما ذكرته انت

تعقيب بسيط وهو : حسب فهمي فإن الخاصية  text  من نوع  string   فلماذا لايمكن اسنادها مباشرة لنص query

تقبل تحياتي

لدي سؤال اخر سأفرده فيي موضوع اخر ارجوا الاطلاع عليه بارك الله فيك.

#6
اقتباس

 

تعقيب بسيط وهو : حسب فهمي فإن الخاصية  text  من نوع  string   فلماذا لايمكن اسنادها مباشرة لنص query

يصح هذا ويصح ذاك

vVIfFr.gif

مدونتي



إذا رأيتموني غبت فأطلت الغياب فربما أكون قد انتقلت عن الدنيا إلى الآخرة

فما أحوجني إلى دعوة صالحة من أخ لي كريم

 

http://www.tvquran.com/

 

LoGeCom

أول برنامج عربي للمحاسبة والتجارة وإدراة المخازن يعمل على اللينكس والماك والويندوز 

#7

السلام عليكم...

 

عند التعامل مع الحقول النصية يجب حصر القيمة بين علامات اقتباس أو تنصيص. و السبب بسيط: بدونها لا يستطيع محرك قاعدة البيانات أن يعرف هل القيمة هي قيمة النص أم اسم كائن في قاعدة البيانات (اسم جدول أو حقل مثلاً) كما أنه لا يستطيع أن يعرف نهاية النص، فبعد أول فراغ (دون علامات اقتباس) يتوفع وجود اسم كائن أو كلمة أساسية من كلمات لغة SQL.

 

لنفرض أن لدينا الجدول MyTable به الحقلان UserName و Notes (كلاهما نصي) و كتبت الجملة التالية:

UPDATE MyTable SET Notes = This is first UserName
WHERE (UserName = Salem)

اللخبطة ستحدث بعد = Notes . هل كلمة This هي بداية النص (القيمة) أم اسم حقل أم كلمة أساسية في اللغة؟ و حتى إذا تجاوز ذلك فإنه عندما يصل إلى كلمة UserName الأولى فهل هي مجرد كلمة كجزء من النص (القيمة) أم هي اسم الحقل الموجود في الجدول.

 

* الصحيح أن تكون الجملة هكذا:

UPDATE MyTable SET Notes = 'This is first UserName'
WHERE (UserName = 'Salem')

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#8

اتضحت الرؤية الان وحصلت الاستفادة

جزاك الله خير

وبارك لك في علمك, وعلمك ما لا تعلم

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