delphi4arab منتديات دلفي للعرب

نسخة كاملة : البحث باستعلام sql و طباعة النتيجة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
إقتباس :مشكلتي اخي متواجدة في المرفق تستطيع ان تحمله لتراها
اذا انه عند استعمال البحث بين تاريخين لا تخرج اي نتيجة في حين اذا استبدلنا القيم برقم الوصل على سبيل المثال تتم دون اي مشكل
مشكلتك أنك لم تحاول Big Grin

Access على خلاف غيره، حيث يقرأ التواريخ في الاستعلامات بين علامتين #، الاستعلام:
كود :
ADODataSet1.CommandText:= ('select * from BON where [DAT-JOUR]>= #' + maskEdit1.EditText + '# and' +' [dat-jour] <= #' + maskEdit2.EditText + '#');

أيضا لقراء النص من مكونات TMaskEdit (أقصد maskEdit2) يفضل استخدام EditText عوضا عن Text مباشرة، في هذه الحالة لا يظهر الفرق.

والأفضل استخدام BETWEEN بين التواريخ بهذا الشكل:
PHP كود :
ADODataSet1.CommandText:= ('SELECT * FROM BON WHERE [DAT-JOUR] BETWEEN #' + maskEdit1.EditText + '# AND' +' [dat-jour] #' + maskEdit2.EditText + '#'); 

بالتوفيق أخي Yahia Wink
وعليك السلام اخي ارفع لك القبعة كشفتني:laugh:
لكن لدي محاولات ب between وايضا بنفس طريقتك لكن المشكل هوا في ان النتائج لا تظهر
لقد جربت كل مااتيح الي من سبل لكن بدون اظهار اي نتيجة والله على ما اقول شهيد
:oops:
الكود بعد التعديل، و قد تم إلغاء قالب التاريخ Mask من تعريف الجدول في قاعدة البيانات.
كذلك به نسخة جملة SQL باستخدام BETWEEN

PHP كود :
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  
sSql: string;
begin
  ADODataSet1
.Active := False;
  
sSql := 'SELECT * FROM BON WHERE [DAT-JOUR] >= ' + #39 + maskEdit1.Text + #39+
                          
'AND' +' [dat-jour] <= ' +  #39+ maskEdit2.Text + #39;

 // sSql := 'SELECT * FROM BON WHERE [DAT-JOUR] BETWEEN ' + '#' + maskEdit1.Text + '#' +
 //                         'AND' +  '#' + maskEdit2.Text + '#';

  
ADODataSet1.CommandText:= sSql;
  
ADODataSet1.Active:=True;
end; 

أخي: التواريخ من أكثر الأمور إرباكا عند البرمجة، يجب أن تنتبه لأمور بعضها التالي:
- أن تكون قيمة التاريخ بين متلازمتين : من العلامة "’ ' " كما هو الحال عند التعبير عن الصيغ النصية وقيمتها في الأسكي 39 و تستطيع أن تعبر عنها في دلفي بالطرق التالية:
PHP كود :
''''xxxxxx''''
#39+ xxxxx + #39
Char(39) + xxxxx + Char(39)
أو استخدام الدالة
 QuotedStr
(xxxxx) 
حيث xxxxxx قيمة المتغير الذي يحوي القيمة النصية 
- قاعدة بيانات اكسيس قد لا تقبل وضع قيمة التاريخ بين علامتي اسكي 39، وتقبل بدلا عنه الحرف #
مثل:
‘SELECT * FROM MyTable WHERE MyDate = #1/15/2010# ’

- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة

- عند قراءة التاريخ من مدخلات المستخدم، وبسبب اختلاف توصيف صيغة التاريخ من حاسوب لآخر، حاول دائما تحويل التاريخ إلى صيغة شهر يوم سنة. قبل إمراره في جمل SQL
أهلا بالأستاذ خالد الشقروني
إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
أعتقد كذلك، في الأصل...
لكن يبدولي أن Delphi يتبع إعدادات النظام بخصوص نمط التأريخ
والله أعلم.
إقتباس :لكن يبدولي أن delphi يتبع إعدادات النظام بخصوص نمط التأريخ
نعم سيدي.

إقتباس :- حاول دائما أن تصيغ التاريخ على النمط الأمريكي : شهر يوم سنة
يمكن اعتباها عنوان للفثرة التي تليها. ما عنيته هو أن يتم التحويل صيغة التاريخ عند إعداد جمل sql
بالنسبة للتعمل مع التواريخ يفضل أولا تحويلها من نص الى تاريخ ثم استخدامها حتى تضمن دائما أن التاريخ المدخل والمراد البحث عنه بنفس اعدادات النظام المستضيف

قبل كل شيء أنا لا أتذكر الأكواد والأوامر بشكل صحيح فأنا لم أعمل على الدلفي لفترة كبيرة لذلك سأكتب على شكل خوارزمية
كود :
a, b :string; d1 ='3/1/2009'; // string d2 ='3/30/2009'; // string a = convert date to string (convert d1 to date) b = convert date to string (convert d2 to date) select * ........ From ....... Where bon between #a# and #b#

واذا ما كان في نتيجة ياحلو
فانه لا يوجد سجلات مطابقة
حلول كثيرة وكلها ممتعة ومفيدة افكار غاية في الروعة

هل لا نستطيع الطباعة اذا كان الناتج من استعلام اي عدم وجود جدول
السلام عليكم:
بالنسبة للتاريخ لماذا يا اخي لا تستخدم المكون Datetimepaker فهو يحتوي على اليوم والشهر والسنة فهو مريح في الاستعلامات جداً وبالنسبة للطباعة فهي تجوز من استعلام او جدول لا خلاف في ذلك .
السلام عليكم
حسب مافهمت اليك الحل
تاخظ adoquery داخل وتكتب
PHP كود :
select * from bon 
   where 
[num-mag=:m 
2/تذهب الى params
params: string
3/1 datasource
datasat : adoquery
4/dbgrid1
datasource : datasource1
5/اضغط مرتين على maskedit1 واكتب
كود :
adoquery1.Close; adoquery1.Params[0].value:=maskedit1.Text; adoquery1.Open;

اما في ما يخص الطباعة
اضغط مرتين على الزر واكتب
كود :
form2.adoquery1.Close; form2.adoQuery1.Params[0].value:=maskedit1.Text; form2.adoQuery1.Open;; form2.quickrep1.preview;
حيث ان form2 الطابعة
اضف adoquery1 الى form2
الصفحات : 1 2