مشاهدة النسخة كاملة : طريقة التعامل مع dbgrid حسابيا
khiro.alg
10-03-2010, 11:29 AM
السلام عليكم
إخواني أنا أبحث عن طريقة التعامل مع جدول قاعدة البيانات DBgrid في الحسابات
مثلا **** حساب مجموع الخلية الثانية من السطر الأول مع الخلية الثانية من السطر الثاني
بشكل عام وعرض النتيجة في Edit
جزاكم الله كل خير شباب وأنا في إنتظاركم
تحياتي
kachwahed
10-03-2010, 02:01 PM
وعليكم السلام ورحمة الله
يمكن استخدام الخصائص OnDrawColumnCell و OnDrawDataCell
حاول وجرب
بالتوفيق.
yahia1921
10-03-2010, 02:18 PM
وعليكم السلام اخي
ممكن توضح اكثر
اذا كان الحساب يخضع لشروط مثلا يجب ان تتوفر في التسجيلات المراد حسابها فقط ام ماذا
khiro.alg
10-03-2010, 04:01 PM
يمكن استخدام الخصائص ondrawcolumncell و ondrawdatacell
حاول وجرب
.
أخي لا أعرف كيف - ممكن توضيح أكثر؟- لم يسبق لي أن تعاملت بها
شكرا أخي على تعاونك
khiro.alg
10-03-2010, 04:12 PM
QUOTE=delphi7;15493]وعليكم السلام اخي
ممكن توضح اكثر
اذا كان الحساب يخضع لشروط مثلا يجب ان تتوفر في التسجيلات المراد حسابها فقط ام ماذا[/QUOTE]
أخي مثلا لدي جدول DBGrid به أرقام - كله أرقام
كيف يمكن مثلا أن نجمع الخانة الثانية من السطر الأول مع الخانة الثانية من السطر الثاني
مثلا التالي هو DBgrid . كيف أجمع 6 و 2 ونعرضهما في Edit1 و edit2
أو كيف نحسب مجموعهما ونعرضه في edit؟
--------------------------------------------------------------
/ / 4 / 6 / 3 /
---------------------------------------------------------------
/ / 3 / 2 / 5 /
---------------------------------------------------------------
/ / 7 / 7 / 4 /
--------------------------------------------------------------
/ / 4 / 3 / 8 /
---------------------------------------------------------------
/ / 3 / 8 / 1 /
---------------------------------------------------------------
شكرا أخي على تعاونك
NabHib
10-03-2010, 04:20 PM
السلام عليكم ورحمة الله تعالى وبركاته
لازم تصيف حقل جديد بالجدول وتكون نوع معطياته من نوع كالكيلي ثم نذهب إلى الأحداث الخاصة بالجدول و نختار oncalcfiled و نضع العملية
kachwahed
10-03-2010, 05:44 PM
يمكن الوصول إلى رقم السطر/العمود في TDBGrid بمثل:
with TStringGrid(DBGrid1) do
begin
Row := 2; // Row - Zeile
Col := 5; // Column - Spalte
SetFocus;
end;
البقية عليك :)
بالتوفيق.
khiro.alg
10-03-2010, 05:51 PM
السلام عليكم ورحمة الله تعالى وبركاته
لازم تصيف حقل جديد بالجدول وتكون نوع معطياته من نوع كالكيلي ثم نذهب إلى الأحداث الخاصة بالجدول و نختار oncalcfiled و نضع العملية
لم أفهمك أخي - أتعامل مع هذه الطريقة أول مرة - ممكن توضيح أكثر؟
وجزاك الله كل خير أخي
khiro.alg
10-03-2010, 06:10 PM
يمكن الوصول إلى رقم السطر/العمود في tdbgrid بمثل:
with tstringgrid(dbgrid1) do
begin
row := 2; // row - zeile
col := 5; // column - spalte
setfocus;
end;
البقية عليك :)
بالتوفيق.
شكرا أخي
لكن لم توصلني بالكود حتى لطرف الخيط
NabHib
11-03-2010, 07:40 PM
ممكن اخي تعرض مشكلتك بالتفصيل ومن الأول ونساعدك بحلها
يعني ممكن تدرج مثال وراح نساعدك على حسب مقدروي
khiro.alg
11-03-2010, 09:16 PM
هذه الصورة توضح ما أقصده
http://www.alfaris.net/up/53/alfaris_net_1268342036.JPG
في الإنتظار...........
جزاكم الله كل خير
Rover
11-03-2010, 11:28 PM
تفضل أخي انجزت لك مثال جامع لكل حالات جمع الحقول ..
بالتوفيق أن شاء الله ..
kachwahed
12-03-2010, 10:49 AM
السلام عليكم
الأخ khiro.alg
بما أنك قلت بأنك مبتدئ، فالأصل أن البيانات لا تخزن في TDBGrid وإنما في TDataSet
والجدول TDBGrid يستخدم لجلب من TDataSet البيانات ثم عرضها...
فلجلب البيانات من أي حقل ومن أي سجل،عليك باستخدام مكون TDataSet (مثل TTable أو TADOTable) للتحرك (استعمل Next/Prior...)
ثم عرض القيمة المناسبة بمثل FieldByName('e').AsString، مثال:
DBGrid1.DataSource.DataSet.Next;
ShowMessage(DBGrid1.Fields[6].Text);
لتخزين قيم على شكل أسطر وأعمدة،استخدم المكون TStringGrid المخصص لذلك...
ثم لعرض البيانات استخدم بـ Cells[ACol, ARow]: string
أما إذا كنت ضليع في المكونات فيمكنك إضافة منهج لذلك، أو توريث منهج مناسب، مثل:
type
TMyDBGrid = class(TDBGrid)
end;
ShowMessage(TMyDBGrid(DBGrid1).GetEditText(6, 5));
بالتوفيق.
khiro.alg
10-04-2010, 04:47 PM
بارك الله فيك أخي-ذاك هو المطلوب
وخاصة هذا الجزء
procedure TForm1.Button1Click(Sender: TObject);
Var
Q: TADOQuery;
begin
AdoTable1.Requery();
Q:= TAdoQuery.Create(Self);
With Q Do
Begin
Connection := ADOConnection1;
Close;
SQL.Text := 'Select f From CustomData Where N = 1';
open;
if FieldValues['f'] <> Null Then
Edit7.Text := IntToStr (FieldValues['f'])
Else
Edit7.Text :='0';
End;
With Q Do
Begin
Close;
SQL.Text := 'Select e From CustomData Where N = 2';
open;
if FieldValues['e'] <> Null Then
Edit8.Text := IntToStr (FieldValues['e'])
Else
Edit7.Text :='0';
End;
if (Edit7.Text <> '') And ( Edit7.Text <> '') then
Edit9.Text := IntToStr( StrToInt(Edit7.Text ) + StrToInt(Edit8.Text ));
Q.Free;
end;
- هل يمكنك شرحه ؟
ضد نسخ لصق
مع فهمه فهذا أفضل بكثير
تحياتي لكم إخواني
AL-MOB4RM3G
10-04-2010, 06:08 PM
- هل يمكنك شرحه ؟
وما هو الشئ الذي لم تفهمه اخي الكريم؟
قل ما هو بالتحديد, لأن شرح هذا الكود سطر سطر شئ يأخذ وقت,
بالتوفيق,
khiro.alg
11-04-2010, 04:16 PM
شكرا أخي
إن لم تستطع شرحه كاملا-فأرجـو شرحه بشكل عام
الأسطر 8 الأخيرة واضحة
AL-MOB4RM3G
11-04-2010, 07:11 PM
طيب, جميل,
حرف ال Q يعرف على انه AdoQuery
لا ادري ماذا تفعل بالحديد, يمكن البحث عنها في ملف ال Help,
AdoTable1.Requery
يتم انشآء AdoQuery
Q:= TAdoQuery.Create(Self)
مع ال AdoQuery التي تم انشآءها افعل
With Q Do
ويتم عمل او تعديل بعض الأمور و الخصآئص, منها وصل ال Adoquery مع AdoConnection1 ومنها ايضى Close لل AdoQuery التي تم انشآءها, يتم ايضى تحديد جملة sql لل Query التي قد تم انشآءها, وفي النهآية يتم عمل Open
Connection := ADOConnection1;
Close;
SQL.Text := 'Select f From CustomData Where N = 1';
open;
ايضى هناك مقآرنة,
if FieldValues['f'] <> Null Then
Edit7.Text := IntToStr (FieldValues['f'])
Else
Edit7.Text :='0';
End;
وبعدها يتم عمل تقريبا نفس الشئ مرة اخرى لكن بمعلومات اخرى, وهناك ايضى مقآرنة, وفي النهآية يتم عمل free للمكون Query, يعني يتم تحريره من الذآكرة,
Q.Free;
هذا والله اعلم,
kachwahed
11-04-2010, 07:56 PM
كود:
AdoTable1.Requery
Requery تعيد تنفيذ الاستعلام، وكأنك قمت بـ Close ثم Open للـ TADOQuery.
vBulletin® , Copyright ©2008-2012