سؤال لخبراء تصميم واجهات البرمجيات

أرسل من قبل bayrn في الخميس, 2008/10/09 - 8:10am.
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

في ال Windows App نستطيع استخدام الأداة DataGridView و التي من خلالها أستطيع أن أقوم بادخال عدة بنود
ومن ثم بالضغط على زر الارسال يتم تسجيل البنود كافة في قاعدة البيانات

أما لنفس البرنامج لكن على Pocket PC App فلا توجد الأداة DGV بل توجد الأداة DataGrid بحيث أنني لم أستطع من خلالها
أن أقوم بنفس الطريقة المتبعة من خلال DGV و خصوصا أن DG لاتملك navigator bar يمكن من خلاله أن أقوم بعملية
اضافة للبنود أو الحذف

لذلك اضطررت لأن أقوم ببناء واجهة ال PPC app كالتالي :

وعند حدث SelectChange للعنصر ComboBpx الخاص ب Quantity أقوم بتنفيذ منهح الاتصال بقاعدة البيانات
و تخزين البند ( فمثلا لوكان لدي بالفاتورة 10 بنود بالتالي أنا مضطر لأن أقوم باستدعاء منهج الاتصال و التخزين عشر مرات )

بالاضافة الى أن العنصر ComboBox حساس جدا في واجهة جهاز الPocket Pc الحساس للمس ، وبالتالي امكانية ادخال بيانات خاطئة كبير جدا

لذلك سؤالي هل توجد طريقة ما يمكن أن أتبعها لتوفير هذه المشاكل ؟؟

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات | قراءة: 338

خيارات عرض التعليقات

اختر طريقتك المفضلة لعرض التعليقات و اضغط "حفظ الإعدادات" لتفعيل تغييراتك.
الخميس, 2008/10/09 - 8:16am
مشرف
صورة NightWolf

تاريخ التسجيل: 2006-10-12
مشاركات: 1645

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

طيب ليش الحدث ما يكون هو button Click

New look, new work, new laptop, new room, new challenges,and many new stuff It's not my birthday it's my revolution Smile

 
دخول أو تسجيل لإرسال التعليقات
الخميس, 2008/10/09 - 4:21pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

كتب NightWolf:
طيب ليش الحدث ما يكون هو button Click
لأنه وقت تضغط الزر يجب أن يتم التخزين في جدول الفاتورة Invoice

أما وقت تختار البنود سوف يتم التخزين في جدول المبيعات Sales

بحيث أن الفاتورة الواحدة لها عدة بنود و بالتالي بيانات كل من الجدةولين مختلفين

وطبعا على خلاف الواجهة يلي بتطبيق Windows App لا يمكن أن أقوم بتخزين الفاتورة مع باقي البنود بضغطة زر واحدة على الPocket

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الخميس, 2008/10/09 - 11:47pm
مشرف
صورة NightWolf

تاريخ التسجيل: 2006-10-12
مشاركات: 1645

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

ما فهمت عليك حسب ما شفت البيانات هي بيانات فاتورة يعني بتخزن بالفواتير .
قصدك عم تعمل Update على جدول تاني كمان ؟

New look, new work, new laptop, new room, new challenges,and many new stuff It's not my birthday it's my revolution Smile

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/10/10 - 7:43am
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

كتب NightWolf:
ما فهمت عليك حسب ما شفت البيانات هي بيانات فاتورة يعني بتخزن بالفواتير .
قصدك عم تعمل Update على جدول تاني كمان ؟

أنا عندي جدولين واحد للفواتير و الآخر للمبيعات

جدول الفواتير بياخد ( No PK , Date , Customer , Sum )

جدول المبيعات ( No + Pro_ID Pk , Quantity , Price )

بما أنه الفاتورة يمكن أن تتضمن شراء أكثر من مادة

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/10/10 - 4:28pm
مشرف
صورة NightWolf

تاريخ التسجيل: 2006-10-12
مشاركات: 1645

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

طيب خلي عملية بناء الفاتورة Wizard ..
يعني كل ما بدو يشتري شغلة بيكبس Next وهيك لحتى يخلص .. بس يخلص ممكن تخليه يخزن الفاتورة

New look, new work, new laptop, new room, new challenges,and many new stuff It's not my birthday it's my revolution Smile

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/10/10 - 6:41pm
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

كتب bayrn:
وعند حدث SelectChange للعنصر ComboBpx الخاص ب Quantity أقوم بتنفيذ منهح الاتصال بقاعدة البيانات
و تخزين البند ( فمثلا لوكان لدي بالفاتورة 10 بنود بالتالي أنا مضطر لأن أقوم باستدعاء منهج الاتصال و التخزين عشر مرات )
مو منطقية نهائياً هالطريقة!

في عندك اسلوبين لحتى اتدخل بيانات Master-Details (متل الفاتورة)
الطريقة الأولى متل الي انت مستخدمها بالبرنامج الأول (يعني ادخال البنود من خلال الـgrid مباشرةً)

الطريقة التانية بكون عندك read-only grid أو listbox وادخال البنود من خلال dialog (بكون في زر Add Item بجانب الـ grid)
(طبعاً البيانات مابتنبعت على قاعدة البيانات وانما بتتخزن بالذاكرة)

أما طريقة التخزين ممكن تخزن البنود بـ DataTable وبعدين من خلال DataAdapter تحفظ التغييرات إلى قاعدة البيانات.

ولاتنسى انو تغلف العملية كلها (عملية حفظ الفاتورة) بـtransaction وحدة.

 
دخول أو تسجيل لإرسال التعليقات
السبت, 2008/10/11 - 12:21pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

كتب foaad:
مو منطقية نهائياً هالطريقة!
لكن أنا ليش طرحت السؤال و عذبت حالي

كتب foaad:
في عندك اسلوبين لحتى اتدخل بيانات Master-Details (متل الفاتورة)
الطريقة الأولى متل الي انت مستخدمها بالبرنامج الأول (يعني ادخال البنود من خلال الـgrid مباشرةً)

ما أنا ذكرت أنه ما ظبطت هي الطريقة في ال Pocket PC App بحيث أن البرنامج الأول استخدمت DataGridView بحيث أنا فيني أنشأ أعمدة

بس وقت فتحت مشروع Pocket PC مافي عنصر DGV بس في DG و ما في خاصية انشاء أعمدة و بالتالي حسيت أنه هالعنصر بس لاستيراد بيانات من جدول في قاعدة معطيات

كتب foaad:
الطريقة التانية بكون عندك read-only grid أو listbox وادخال البنود من خلال dialog (بكون في زر Add Item بجانب الـ grid)
(طبعاً البيانات مابتنبعت على قاعدة البيانات وانما بتتخزن بالذاكرة)

هلأ هي فكرة منطقية أنه ضيف ListBox وبعدين عنطرقها ضيف العناصر ثم خزنهن دفعة واحدة ، بس المشكلة الواجهة ما فيها مكان لهذا العنصر عنصر كبير صعي أنا فيني أتحكم بحجمه بس على الأقل يجب أن يكون بارتفاع أربعو بنود

كتب foaad:
أما طريقة التخزين ممكن تخزن البنود بـ DataTable وبعدين من خلال DataAdapter تحفظ التغييرات إلى قاعدة البيانات.

بدي عذبك معي ممكن تشرحلي ياها بالكود

كتب foaad:
ولاتنسى انو تغلف العملية كلها (عملية حفظ الفاتورة) بـtransaction وحدة.

شو قصدك هون بال Transaction هل تعني أنه يكون عندي منهج اتصال و تخزين البيانات تبع الفاتورة يلي هي بدها تتخزن بجدولين ، بحيث أنه بعملية فتح اتصال واحدة أقوم بتنفيذ جميع تعليمات
SqlCommand و من ثم اغلق الاتصال بقاعدة البيانات

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
السبت, 2008/10/11 - 11:00pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الأحد, 2008/10/12 - 12:53am
صورة mrabooode

تاريخ التسجيل: 2006-09-28
مشاركات: 298

الجامعة: دمشق
الكلية: الهندسة المعلوماتية
المرحلة: السنة الثالثة

ليش عال pocket PC app مافي data adapter؟؟

..dont limp at the disabled boulevard

 
دخول أو تسجيل لإرسال التعليقات
الأحد, 2008/10/12 - 5:19am
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

ممكن تعملها متل هيك شي:

(هي مجرد رسمة بس على الأغلب فيك تعمل متلها)

استخدم DataGrid بحيث تقرأ من DataTable (موشرط يكون في Table مقابل بقاعدة البيانات) ولما المستخدم يكبس Add طلعلوا Dialog من خلاله بدخل معلومات بند (سطر) واحد وبتم تخزين المعلومات بالـ DataTable
وبعدين لما يكبس OK أو حفظ الفاتورة بتفتح اتصال مع قاعدة البيانات (أنا بفضل يكون الاتصال مفتوح دائماً) وبتفتح Transaction وبتخزن رأس الفاتورة وبعدين بنود الفاتورة وبعدين بتعمل Commit للـ Transaction وبتسكر الاتصال.

يعني عملية التخزين يدوية.
مابعرف اذا في عناصر تحكم أو مكونات ممكن تأتمت هالعملية بالـ compact framework على الأغلب فيك تستخدم DataAdapter بس بأسواء الأحوال ممكن تعملها من خلال حلقة وأوامر Insert و/أو Update

 
دخول أو تسجيل لإرسال التعليقات
الأحد, 2008/10/12 - 6:42pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

على فكرة انت موضح شغلة هو أنه لازم يكون ال Label من اليسار لليمين لأنه بالانكليزي ، لكن أنا بدي ساوي بالعربي بشان هيك من اليمين لليسار ، و هي مشكلة عندي أنو وقت عم حط ال LAbel عربي ما عم يترمز على ال Pocket PC

هلأ حضرتك ذكرت أنه يجب أن أعمل Commite ، كيف برمجيا ؟

 هي الطريقة المتبعة في البرنامج الأول استخدمت حلقة For لتحزين البنود

private void rec_btn_Click(object sender, EventArgs e)

{

//DGV = DataGridView

int crow = DGV.RowCount;

if (DGV[0, 0].Value == "" || DGV[1, 0].Value == "" || DGV[2, 0].Value == "" || DGV[3, 0].Value == "") 

{

MessageBox.Show(
"تأكد من البيانات");

}

//تخزين بيانات الفاتورة

else

{

try

{

connect.Open();

//SqlCommand comm = new SqlCommand();

comm.Connection = connect;

comm.CommandText =
"INSERT INTO invoice (stoid,customer,dat,datid)";

comm.CommandText +=

"VALUES ('" + stoID_Box.Text +

"','" + cust_Box.Text +

"','" + datBox.Text +"','" + datID_Box.Text + "'Wink";

comm.ExecuteNonQuery();

//تخزين بيانات المبيعات

for (int row = 0; row < crow - 1; row++)

{

ArrayList list = new ArrayList(4);

 for (int col = 0; col < 4; col++)

{

list.Add(DGV[col, row].Value);

}

comm.CommandText =
"INSERT INTO stosale (invid,procode,quant,price,totprice)";

comm.CommandText +=

"VALUES ('" + type +

"','" + list[index] +

"','" + list[index + 1] +

"','" + list[index + 2] +

"','" + list[index + 3] + "'Wink";

comm.ExecuteNonQuery();

index = 0;

}

}

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 5:05am
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

It should be something like this:

    SqlConnection mainConnection = new SqlConnection();
    mainConnection.Open();

    //Start a transaction
    SqlTransaction mainTransaction = mainConnection.BeginTransaction();

    SqlCommand invoiceCommand = new SqlCommand();
    invoiceCommand.Connection = mainConnection;

    //Pass the transaction to the command elsewise it'll fail
    invoiceCommand.Transaction = mainTransaction;

    //You can initilize the Command text once...
    invoiceCommand.CommandText = "INSERT INTO Invoice(StoreID, CustomerID, Date, SeasonID) " + 
                             "VALUES(@StoreID, @CustomerID, @Date, @SeasonID)";
    //Add its parameters once...
    invoiceCommand.Parameters.Add(new SqlParameter("@StoreID", SqlDbType.Int)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@SeasonID", SqlDbType.Int));

    //And then you can assign the values and execute as many times as you want
    invoiceCommand.Parameters["@StoreID"].Value = cboStore.Value;
    //cboStore is a ComboBox where the text is the name of the store and the value is its ID
    //the user should not write the ID by hand but select the store name from the 
    //pre-populated ComboBox
    invoiceCommand.Parameters["@CustomerID"].Value = cboCustomer.Value;
    invoiceCommand.Parameters["@Date"].Value = dtbInvoiceDate.Value;
    invoiceCommand.Parameters["@SeasonID"].Value = cboSeason.Value;
    
    invoiceCommand.ExecuteNonQuery();

    //Items command. same approach as above...
    SqlCommand saleCommand = new SqlCommand();
    saleCommand.Connection = mainConnection;
    saleCommand.Transaction = mainTransaction;

    saleCommand.CommandText = "INSERT INTO StoreSale(InvoiceID, ProductID, Qty, Price) " +
                              "VALUES(@InvoiceID, @ProductID, @Qty, @Price)";

    saleCommand.Parameters.Add(new SqlParameter("@InvoiceID", SqlDbType.Int));
    saleCommand.Parameters.Add(new SqlParameter("@ProductID", SqlDbType.Int));
    saleCommand.Parameters.Add(new SqlParameter("@Qty", SqlDbType.Float));
    saleCommand.Parameters.Add(new SqlParameter("@Price", SqlDbType.Float)); 
    //TotalPrice is calculated (using a calculated column or using a view)
    
    for (int rowIndex = 0; rowIndex < dgvBillItems.RowCount - 1; rowIndex++)
    {
        saleCommand.Parameters["@InvoiceID"].Value = invoiceID; // Where is it comming from?!
        saleCommand.Parameters["@ProductID"].Value = dgvBillItems["ProductID", rowIndex].Value;
        saleCommand.Parameters["@Qty"].Value = dgvBillItems["Qty", rowIndex].Value;
        saleCommand.Parameters["@Price"].Value = dgvBillItems["Price", rowIndex].Value;

        saleCommand.ExecuteNonQuery();
    }

    // It's a good idea to do the checking at this point (in the database)
    // by calling a stored procedure which return 0 if everything is OK 
    // or an error code otherwise
    
    //Commit or rollback the transaction (based on the previous result)
    mainTransaction.Commit();

    mainConnection.Close();

The code above could use some optimization but I've left it as-is for simplicity and clarity.

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 6:17am
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

In fact Mr.Foaad I dont konw how to thank you .
But I Wonder what do you mean exactly by checking DB at prticular point

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 7:52am
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

قصدي يكون في اجرائية (stored procedure) بقاعدة البيانات بتتحقق من صحة كامل بيانات الفاتورة وتحقيقها لشروط العمل (Business Logic) أو ممكن يكون Trigger
اذا اجرائية بكون عندك اجرائية بتاخد ID الفاتورة وبترجع رقم الخطأ (اذا كان في خطأ)
واذا Trigger فبكون في عندك حقل بجدول الفاتورة مثلاً Posted بياخدالقيمة 0 بشكل افتراضي (وبتكون الفاتورة لساها مسودة)
بعدين بعد ادراج البنود بتعمله Update إلى 1 وبيشتغل الـ trigger وبيتحقق من صحة بيانات الفاتورة واذا في أي مشكلة بيعمل rollback

ليش لازم يكون التحقق بقاعدة البيانات؟ لأنو في شروط مرتبطة ببيانات موجودة بجداول تانية وصعب جداً (بس مو مستحيل) تقرأ كل هالبيانات من البرنامج وتتحقق من الشروط (لأنو بتصير عملية بطيئة كتير) وبعدين تخزن الفاتورة.
مثلاً بجوز بدك تمنع المستخدم من بيع كمية أكتر من الكمية المتوفرة بالمستودع (أو بأسواء الأحوال بدك تمنع مستخدم محدد من انو يبيع مادة محددة تحت سعر محدد لزبون محدد).

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 6:18pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

لك والله يا سيد فؤاد غريب أنا حاسس أنه مشاريع قواعد بيانات بهالحجم ما ممكن تظبط على Pocket pc

الآن هناك عدة أسئلة مهمة لا أجد الاجابة عليها سوف أقوم بطرحها

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 6:27pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

هذه الأسئلة تحتاج الى اختصاصي هندسة برمجيات :

سؤال 1- :

وقت عم اشتغل القاعدة على SQL SERVER Compact عمتكون لاحقة ملف قاعدة المعطيات sdf بحيث لايوجد غير ملف وحيد لا يمكنني تحديد حجمه

هذا يدفعني الى السؤال الثاني

سؤال 2- :

حجم ذاكرة ال pocket pc يلي عمأشتغل البرنامج عليه 48 ميغا مع امكانية اضافة كرت ذاكرة ، هل ملف القاعدة يمكنأن يتمدد تلقائيا و أن يقوم باستهلاك ذاكرة من كرت الذاكرة عند امتلاء ذاكرة الجهاز ، وان كان لا هذا يقودني الى سؤال آخر

سؤال 3 -

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

سؤال 4 -

من شان توفير حجم اذا كان من الممكن اكمال البرنامج مع العوائق السابقة ، هل من المنطقي أن أقوم باستخدام أنماط معطيات الحقول كالتلي :

بدلا من smallmony يللي بدها 4 بايت باستخدم nvarchar

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الإثنين, 2008/10/13 - 9:01pm
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

كتب bayrn:
حجم ذاكرة ال pocket pc يلي عمأشتغل البرنامج عليه 48 ميغا مع امكانية اضافة كرت ذاكرة ، هل ملف القاعدة يمكنأن يتمدد تلقائيا و أن يقوم باستهلاك ذاكرة من كرت الذاكرة عند امتلاء ذاكرة الجهاز ، وان كان لا هذا يقودني الى سؤال آخر
لأ. لازم تكون حاطط الملف على كرت الذاكرة لحتى يستخدمو

كتب bayrn:
هل يمكنني اتباع طريقة لكي أقوم بتفريغ جداول القاعدة مثل جدول الفاتورة من البيانات كل فترة محددة و تخزين هذه البيانات في ملف آخر
ببرامج المحاسبة والمستودعات عادة بكون في عملية اسمها تدوير قاعدة البيانات
يعني بتاخد بس البيانات الاجمالية على قاعدة جديدة وبتترك القاعدة القديمة كأرشيف.
وبتصير بتستخدم القاعدة الجديدة

كتب bayrn:
من شان توفير حجم اذا كان من الممكن اكمال البرنامج مع العوائق السابقة ، هل من المنطقي أن أقوم باستخدام أنماط معطيات الحقول كالتلي :
بدلا من smallmony يللي بدها 4 بايت باستخدم nvarchar
لأ الحقول الرقمية أوفر من nvarchar وكمان بالنسبة للأداء أفضل.

كتب bayrn:
هذه الأسئلة تحتاج الى اختصاصي هندسة برمجيات
الأسئلة السابقة مالها علاقة بهندسة البرمجيات!

 
دخول أو تسجيل لإرسال التعليقات
الخميس, 2008/10/16 - 10:11pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

هل تؤمن لي ال Dot NET عن طريق ADO التعاملمع Connection String بشكل ديناميكي

فمثلا عند بناء التطبيق مع قاعدة البناء و اجراء ال Test على الEmulator يكون ال ConnectionString = "DataSource=".\\DB.sdf"

ولكن عندما أقوم بعملية Deploy للمشروع على الPocet pc ملف القاعدة عم يصير مع الملف exe بنفس المجلد و بالتالي عم يتغير ال Source

هل بامكاني أن اعمل connstr بشكل ديناميكي بدون واجهة لجلب الملف و بالتالي الحصول على المسار

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الجمعة, 2008/10/17 - 10:41pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

ملف قاعدة البيانات بنفس المجلد مع الملف EXE للبرنامج

ConnectionString = "Data Source = .\\Auto.sdf

عم يعطي رسالة File not found يقصد به Auto ملف قاعدة البيانات

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الأربعاء, 2008/10/29 - 12:28pm
صورة bayrn

تاريخ التسجيل: 2008-03-05
مشاركات: 785

الجامعة: الافتراضية
الكلية: تكنولوجيا المعلومات
المرحلة: السنة الرابعة
الاختصاص: غير ذلك

كتب foaad:
It should be something like this:

    SqlConnection mainConnection = new SqlConnection();
    mainConnection.Open();

    //Start a transaction
    SqlTransaction mainTransaction = mainConnection.BeginTransaction();

    SqlCommand invoiceCommand = new SqlCommand();
    invoiceCommand.Connection = mainConnection;

    //Pass the transaction to the command elsewise it'll fail
    invoiceCommand.Transaction = mainTransaction;

    //You can initilize the Command text once...
    invoiceCommand.CommandText = "INSERT INTO Invoice(StoreID, CustomerID, Date, SeasonID) " + 
                             "VALUES(@StoreID, @CustomerID, @Date, @SeasonID)";
    //Add its parameters once...
    invoiceCommand.Parameters.Add(new SqlParameter("@StoreID", SqlDbType.Int)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime)); 
    invoiceCommand.Parameters.Add(new SqlParameter("@SeasonID", SqlDbType.Int));

    //And then you can assign the values and execute as many times as you want
    invoiceCommand.Parameters["@StoreID"].Value = cboStore.Value;
    //cboStore is a ComboBox where the text is the name of the store and the value is its ID
    //the user should not write the ID by hand but select the store name from the 
    //pre-populated ComboBox
    invoiceCommand.Parameters["@CustomerID"].Value = cboCustomer.Value;
    invoiceCommand.Parameters["@Date"].Value = dtbInvoiceDate.Value;
    invoiceCommand.Parameters["@SeasonID"].Value = cboSeason.Value;
    
    invoiceCommand.ExecuteNonQuery();

    //Items command. same approach as above...
    SqlCommand saleCommand = new SqlCommand();
    saleCommand.Connection = mainConnection;
    saleCommand.Transaction = mainTransaction;

    saleCommand.CommandText = "INSERT INTO StoreSale(InvoiceID, ProductID, Qty, Price) " +
                              "VALUES(@InvoiceID, @ProductID, @Qty, @Price)";

    saleCommand.Parameters.Add(new SqlParameter("@InvoiceID", SqlDbType.Int));
    saleCommand.Parameters.Add(new SqlParameter("@ProductID", SqlDbType.Int));
    saleCommand.Parameters.Add(new SqlParameter("@Qty", SqlDbType.Float));
    saleCommand.Parameters.Add(new SqlParameter("@Price", SqlDbType.Float)); 
    //TotalPrice is calculated (using a calculated column or using a view)
    
    for (int rowIndex = 0; rowIndex < dgvBillItems.RowCount - 1; rowIndex++)
    {
        saleCommand.Parameters["@InvoiceID"].Value = invoiceID; // Where is it comming from?!
        saleCommand.Parameters["@ProductID"].Value = dgvBillItems["ProductID", rowIndex].Value;
        saleCommand.Parameters["@Qty"].Value = dgvBillItems["Qty", rowIndex].Value;
        saleCommand.Parameters["@Price"].Value = dgvBillItems["Price", rowIndex].Value;

        saleCommand.ExecuteNonQuery();
    }

    // It's a good idea to do the checking at this point (in the database)
    // by calling a stored procedure which return 0 if everything is OK 
    // or an error code otherwise
    
    //Commit or rollback the transaction (based on the previous result)
    mainTransaction.Commit();

    mainConnection.Close();

The code above could use some optimization but I've left it as-is for simplicity and clarity.

هلأ أنا الى الآن ما جربت الكود هذا ما فضيت و هلأ بدي جربو ، بس في عندي سؤال

شو بيتميز هالكود عن يلي حطيتوا أنا غير بتنفيذال transaction
مع العلم أيضا أنه وقت كنت عم قوم بتنفيذ كودي بدون transaction commit كان عم يتم التخزين ، أيهما الأفضل ؟؟

 

قرأتُ مجدَكِ في قلبي و في الكُتُـبِ         شَـآمُ ، ما المجدُ؟ أنتِ المجدُ لم يَغِبِ

 
دخول أو تسجيل لإرسال التعليقات
الخميس, 2008/10/30 - 12:36pm
مدير
صورة foaad

تاريخ التسجيل: 2005-07-15
مشاركات: 3116

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

كتب bayrn:
هلأ أنا الى الآن ما جربت الكود هذا ما فضيت و هلأ بدي جربو ، بس في عندي سؤال

شو بيتميز هالكود عن يلي حطيتوا أنا غير بتنفيذال transaction
مع العلم أيضا أنه وقت كنت عم قوم بتنفيذ كودي بدون transaction commit كان عم يتم التخزين ، أيهما الأفضل ؟؟

الفائدة من الـtransaction هي انو اما بتم تنفيذها كلها سوى أو لأ يعني اذا صار أيا مشكلة وتوقف البرنامج عن التنفيذ قبل تعليمة الـ commit مارح يتنفذ شي (رح يتم التراجع عن التغييرات) وبالتالي مارح يصير عندك حالة رأس فاتورة بدون بنود أو بنود ناقصين بسبب اغلاق البرنامج اثناء عملية تخزين الفاتورة

الفرق التاني المهم هو استخدام SqlParameters بدل من بناء شريط محرفي بمثل تعليمة الـ sql وهي الطريقة أفضل بكتير

وبظن في فروقات بالتسمية وهيك شغلات بحيث يكون الكود maintainable أكتر

 
دخول أو تسجيل لإرسال التعليقات