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

كيف يمكن جمع عامود بشكل تراكمى

بدأه khaledmh في 1 سبتمبر 2008 · 41 رد · 3,968 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#26

اخواني أرجو منكم مراجعة هذه الموضوع

وإن شاء الله ستجدون الفائدة

Haytham A. Mahmoud

PhSoft

When No Others

#27

شكرا اخى على مساعدتك هل بأمكانك عرض مثال على طلبى

#28

up

#29

وما زال البحث عن الحل

#30

أخي الكريم المثال المرفق معمول بدلفي أرجو أن يفيدك

قم بتشغبل الملف التنفيذي و لاحظ ما يحصل و تأكد من النتيجة بعد النقر على الزر

إن نفع الحل أحاول أقلبه للـ 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;

أرجو أن أكون قد وفقت بالشرح

حاول أن تبحث عن شيء مشابه في قسم الدلفي قد تجد مبتغاك

أرجو الفائدة

Get_Amount.rar

تم تعديل هذه المشاركة بواسطة 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

#31

اخي الكريم ROBER بارك الله فيك ولك كل الشكر على هذة المساعة

حقا اخي العزيز حسب مثالك المرفق هو مانبحث عنة تحديدا

يرجي المحاولة في الفجول ولك كل الشكر والعرفان

#32

السلام عليكم

أرجوكم أعذروني إن كان هناك خطأ في الكود لأن درايتي بالفيجول سطحية جدا :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

#33

اخي الكريم ROBER اشكرك كل الشكر على هذة المساعدة

ولكن اخي لم يفلح هذا الكود في الوصول الى الحل كما هو في مثالكم في الدلفي

اكرر شكري لكم 0000 ونرجو من الاعضاء المساعدة في الوصول الى الحل الصحيح

#34

اخى Rober

شكرا

فعلا مثالك فى الدلفى هو المطلوب ولكن يوجد أخطاء فى كود الفيجول

تم تعديل هذه المشاركة بواسطة khaledmh في 17 أكتوبر 2008 في 07:13

#35

أين مكان الخطأ ؟؟؟

ممكن أحاول البحث عن حل

I'm Away For Sometimes

I'll Finish My Works

Come Back Soon

More Study > More Search > More Try > More Learning > Great Success

#36

الخطأ اخى يبدأ من عبارةfor i = MSFlexGrid1.rows-1 to 1 step -1

واعتقد انها تحول الى for i = 1 to MSFlexGrid1.rows-1

وايضا for يعقبها next على حد معلوماتى

ارجو من الاخوة التصحيح لاحتياجى واحتياج الاخوة لمثل هذا الكود

وشكرا مرة اخرى اخى Rober لمساعدتك

#37

أخي الكريم الحلقتين 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

#38

اخى الكريم

بالفعل لقد جربت المثال وتظهر لى رسالة تفيد بالاتى

الخطأ الاول

compile error

block if without if

لقد اضفت للعبارة الشرطية if

end if لانها مطلوبة وانتهت هذه المشكلة

الخطأ الثانى

Compile error

for without next

وشكرا

تم تعديل هذه المشاركة بواسطة khaledmh في 19 أكتوبر 2008 في 11:29

#39

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

test.rar

#40

أخي الكريم

جرب المرفق أنا جربته عندي و مشي الحال

كانت المشاكل أني لم أضف 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

يا ريت حد يجربه و يخبرنا بالنتيجة

test.rar

تم تعديل هذه المشاركة بواسطة 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

#41

شكرا اخى بالفعل المشكلة اتحلت

طلب اخير فى الموضوع

كيف يمكن حفظ بيانات الجدول بعد حساب القيم

تم تعديل هذه المشاركة بواسطة khaledmh في 19 أكتوبر 2008 في 17:26

#42

أخي الكريم

الأمر بسيط بعون الله

النقر على زر الحفظ
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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…