اخواني أرجو منكم مراجعة هذه الموضوع
وإن شاء الله ستجدون الفائدة
Haytham A. Mahmoud
PhSoft
When No Others
اخواني أرجو منكم مراجعة هذه الموضوع
وإن شاء الله ستجدون الفائدة
Haytham A. Mahmoud
PhSoft
When No Others
شكرا اخى على مساعدتك هل بأمكانك عرض مثال على طلبى
up
وما زال البحث عن الحل
أخي الكريم المثال المرفق معمول بدلفي أرجو أن يفيدك
قم بتشغبل الملف التنفيذي و لاحظ ما يحصل و تأكد من النتيجة بعد النقر على الزر
إن نفع الحل أحاول أقلبه للـ VB
الكود المستخدم في دلفي
// حدث البداية
procedure TForm1.FormShow(Sender: TObject);
// تعريف متحول من نوع عدد صحيح
var i : integer;
begin
// إسناد القيمة 1 للمتحول الذي سيدل على رقم سطر الشبكة
i := 1;
// وضع عناوين الحقول للشبكة
stringgrid1.Cells[0,0] := 'accno';
stringgrid1.Cells[1,0] := 'ref';
stringgrid1.Cells[2,0] := 'level';
stringgrid1.Cells[3,0] := 'amount';
// تحديد عدد أسطر الشبكة بعدد السجلات في الجدول +1 الذي هو سطر العنوان
stringgrid1.RowCount := adotable1.RecordCount + 1;
adotable1.First;
// تحميل سجلات الجدول إلى الشبكة
while adotable1.Eof = false do
begin
stringgrid1.Cells[0,i] := adotable1.fieldbyname('accno').asstring;
stringgrid1.Cells[1,i] := adotable1.fieldbyname('ref').asstring;
stringgrid1.Cells[2,i] := adotable1.fieldbyname('level').asstring;
stringgrid1.Cells[3,i] := adotable1.fieldbyname('amount').asstring;
i := i + 1;
adotable1.Next;
end;
end;
// حدث الزر
procedure TForm1.Button1Click(Sender: TObject);
// تعرف متحولات
var i,j,sum : integer;
begin
// العد من أخر سطر في الشبكة حتى السطر رقم 1
for i := stringgrid1.RowCount -1 downto 1 do
begin
// تصفي المتحول الذي سيمثل المجموع
sum := 0;
// العد من السطر الأول حتى السطر الأخير من الشبكة
for j := 1 to stringgrid1.RowCount -1 do
begin
// إختبار في حال كان الحساب هو حساب رئيسي
if stringgrid1.Cells[0,i] = stringgrid1.Cells[1,j] then
begin
sum := sum + strtoint(stringgrid1.Cells[3,j]);
end;
end;
// في حال كان المجموع = 0 هذا يعني أن الحساب فرعي
if sum > 0 then
stringgrid1.Cells[3,i] := inttostr(sum);
end;
end;أرجو أن أكون قد وفقت بالشرح
حاول أن تبحث عن شيء مشابه في قسم الدلفي قد تجد مبتغاك
أرجو الفائدة
تم تعديل هذه المشاركة بواسطة rober في 13 أكتوبر 2008 في 20:59
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
اخي الكريم ROBER بارك الله فيك ولك كل الشكر على هذة المساعة
حقا اخي العزيز حسب مثالك المرفق هو مانبحث عنة تحديدا
يرجي المحاولة في الفجول ولك كل الشكر والعرفان
السلام عليكم
أرجوكم أعذروني إن كان هناك خطأ في الكود لأن درايتي بالفيجول سطحية جدا :blush:
و أرجو من أحد الأخوة مراجعة الكود و أخبارنا بالأخطاء الموجودة
dim i,j,sum as integer Private Sub Form_Activate() MSFlexGrid1.TextMatrix(0,0) = "accno" MSFlexGrid1.TextMatrix(0,1) = "ref" MSFlexGrid1.TextMatrix(0,2) = "level" MSFlexGrid1.TextMatrix(0,3) = "amount" // دلفي :السطر التالي بالدلفي و يقوم بتحديد عدد أسطر الشبكة بعدد سجلات الجدول + 1 stringgrid1.RowCount := adotable1.RecordCount + 1; // VB i = 1 table.First; do until table.eof = true MSFlexGrid1.TextMatrix(i,0) = table![accno] MSFlexGrid1.TextMatrix(i,1) = table![ref] MSFlexGrid1.TextMatrix(i,2) = table![level] MSFlexGrid1.TextMatrix(i,3) = table![amount] i = i + 1 table.next loop end sub Private Sub Command1_Click() for i = MSFlexGrid1.rows-1 to 1 step -1 sum = 0 for j = 1 to MSFlexGrid1.rows-1 step 1 if MSFlexGrid1.TextMatrix(i,0) = MSFlexGrid1.TextMatrix(j,1) then sum = sum + val(MSFlexGrid1.TextMatrix(j,3)) if sum > 0 then // note : sum is integer MSFlexGrid1.TextMatrix(i,3) = sum end sub
أعيد و أكرر صحة الكود غير معروفة الرجاء التأكد قبل التجريب
أرجو الفائدة
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
اخي الكريم ROBER اشكرك كل الشكر على هذة المساعدة
ولكن اخي لم يفلح هذا الكود في الوصول الى الحل كما هو في مثالكم في الدلفي
اكرر شكري لكم 0000 ونرجو من الاعضاء المساعدة في الوصول الى الحل الصحيح
اخى Rober
شكرا
فعلا مثالك فى الدلفى هو المطلوب ولكن يوجد أخطاء فى كود الفيجول
تم تعديل هذه المشاركة بواسطة khaledmh في 17 أكتوبر 2008 في 07:13
أين مكان الخطأ ؟؟؟
ممكن أحاول البحث عن حل
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
الخطأ اخى يبدأ من عبارةfor i = MSFlexGrid1.rows-1 to 1 step -1
واعتقد انها تحول الى for i = 1 to MSFlexGrid1.rows-1
وايضا for يعقبها next على حد معلوماتى
ارجو من الاخوة التصحيح لاحتياجى واحتياج الاخوة لمثل هذا الكود
وشكرا مرة اخرى اخى Rober لمساعدتك
أخي الكريم الحلقتين for
الأولى تبدأ بـ السجلات من الأخير إلى الأعلى و الثانية تقوم بالبدء بالسجلات من الأعلى إلى الأسفل لكل سجل من الأولى و هي صحيحة
فهي نفسها في مثال الدلفي
أعتقد أن الأخطاء هي أملائية
هل جرب أحد عمل مثال عملي على الطريقة حتى نجر فيه :happy:
تم تعديل هذه المشاركة بواسطة rober في 18 أكتوبر 2008 في 16:45
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
اخى الكريم
بالفعل لقد جربت المثال وتظهر لى رسالة تفيد بالاتى
الخطأ الاول
compile error
block if without if
لقد اضفت للعبارة الشرطية if
end if لانها مطلوبة وانتهت هذه المشكلة
الخطأ الثانى
Compile error
for without next
وشكرا
تم تعديل هذه المشاركة بواسطة khaledmh في 19 أكتوبر 2008 في 11:29
أخي الكريم
جرب المرفق أنا جربته عندي و مشي الحال
كانت المشاكل أني لم أضف next بعد نهاية كل for
و كان هناك خطأ في الـ for الثانية أنها كانت step -1 و تم تصحيحها إلى step 1 و هي كانت step 1 في الكود السابق
الكود بعد التصحيح
Private Sub Cmd_Calc_Click() For i = grid.Rows - 1 To 1 Step -1 sum = 0 For j = 1 To grid.Rows - 1 Step 1 If grid.TextMatrix(i, 0) = grid.TextMatrix(j, 1) Then sum = sum + Val(grid.TextMatrix(j, 3)) End If If sum > 0 Then grid.TextMatrix(i, 3) = sum End If Next Next End Sub
يا ريت حد يجربه و يخبرنا بالنتيجة
تم تعديل هذه المشاركة بواسطة rober في 19 أكتوبر 2008 في 12:02
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
شكرا اخى بالفعل المشكلة اتحلت
طلب اخير فى الموضوع
كيف يمكن حفظ بيانات الجدول بعد حساب القيم
تم تعديل هذه المشاركة بواسطة khaledmh في 19 أكتوبر 2008 في 17:26
أخي الكريم
الأمر بسيط بعون الله
النقر على زر الحفظ
Private Sub Command1_Click()
العد من السطر رقم 1 في الجريد حتى أخر سطر
For i = 1 To grid.Rows - 1 Step 1
الرجاء الإنتباه : هذا السطر فيه مشكلة بسبب أن طريقة تعريف الجدول فيه غير الطريقة التي أستخدمت في المثال السابق
طبعا يتم تعديله للتوافق مع المثال (لو عرفت كيف كنت كتبت الطريقة الصحيحة)و
عملية البحث عن رقم الحساب
Set Rs = Db.OpenRecordset("Select * From chart Where code = " & Me.grid.TextMatrix(i, 0) & "")
في حال وجود مشابه
If Rs.EOF = False Then
تحرير الجدول تمهيداً لتعديل قيمة المبلغ بالقيمة الجديدة
Rs.Edit
تعديل قيمة المبلغ
Rs![amount] = Me.grid.TextMatrix(i, 3)
حفظ التعديلات التي أجريت على الجدول
Rs.Update
نهاية الشرط
End If
Next
End Subيقوم الكود السابق بأخذ قيمة خلية خلية من حقل رقم الحساب و البحث عن مشابهها في الجدول Rs في حقل code الذي يمثل رقم الحساب و عند وجود مشابه و يقوم بتعديل قيمة المبلغ amount بالقيمة الجديدة الموجودة في حقل المبلغ من نفس سطر رقم الحساب المبحوث عنه
أرجوك أعذرني مرة ثانية لأني لا أقدم حل كامل بسبب قلة درايتي بالـ VB :blush: المهم المبدأ صحيح فحاول تصحيحة إلى VB
أرجو الفائدة :wub:
تم تعديل هذه المشاركة بواسطة rober في 20 أكتوبر 2008 في 04:18
I'm Away For Sometimes
I'll Finish My Works
Come Back Soon
More Study > More Search > More Try > More Learning > Great Success
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…