اذهب إلى المحتوى

Mustafa Suleiman

الأعضاء
  • المساهمات

    9903
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    300

كل منشورات العضو Mustafa Suleiman

  1. إذا أردت النصيحة، فنعم عليك تعلم الأساسيات، لكن ذلك في حال أنك ستقوم بتطوير تطبيقات ويب من خلال Flask أو Django، وفي حال أنك ستتعامل مع كود بايثون فقط وليس مواقع الويب إذن لا حاجة إلى ذلك. وفي الدورة سيتم شرح بناء مواقع من خلال Flask وDjango، لذا إن أردت دراسة تلك المسارات عليك دراسة المسار الأول من دورة تطوير واجهات المستخدم بجانب المسار الأول من دورة تطوير التطبيقات من خلال جافاسكريبت، والمسارات الأولى من جميع الدورات متاحة لك بشكل مجاني.
  2. عليك إذن دراسة المسار الأول من دورة تطوير واجهة المستخدم لتتعلم HTML, CSS, JS. ثم تعود لدورة جافاسكريبت وتقوم بدراسة أساسيات JS بشكل معمق أكثر، ثم تقوم بدراسة أساسيات React، ثم أساسيات Node.js ثم React Native.
  3. صحيح، القصد هو أنه ليس لزامًا إتمام كامل الدورة للتقدم للإختبار والحصول على الشهادة، حيث تستطيع إنهاء 4 مسارات فقط وسيتم اختبارك بهم. لكن بالطبع لا أنصحك بذلك فإنهاء الدورة بالكامل سيحقق إفادة لك والشهادة في ذاتها لا معنى لها بدون فائدة تعود عليك، الغرض من ذلك هو أن البعض يريد دراسة مسارات معينة وليس بحاجة إلى باقي المسارات لأي سببٍ كان. يتم رفع المشاريع العملية الكاملة إلى منصة GitHub حيث ننشيء مستودع منفصل لكل مشروع، وهي بالفعل المشاريع التي قم بتنفيذها خلال الدورة.
  4. بالطبع لا، عليك تحديد ما تريده من الدورة تحديدًا، هل تريد أن تصبح مطور واجهة أمامية أم خلفية أم الاثنان معًا Full-stack. وطالما أنك لم تُحدد إذن عليك بالتجربة، صدقني قراءة 100 مقالة عن المجال المناسب لن تفيدك بقدر التجربة العملية، لذا لإختيار المسار البرمجي الذي ستبذل به أقصى جهدك، عليك بدراسة الدورة بالكامل لتفقد المجالات من واقع عملي. أيضًا هناك نقطة هامة ألا وهي إن كنت تنوي العمل بالشركات فعليك تفقد الوظائف في بلدك وما هي التنقيات المطلوبة وهل مجال الويب مطلوب أكثر أم مجال تطوير تطبيقات الهاتف وهل المطلوب Flutter أم React Native ألقي نظرة على الوظائف، وبالنسبة لمواقع العمل الحر عليك بتفقد المشاريع المعروضة في المنصة التي تنوي العمل عليها لتفقد التقنيات والمهارات المطلوبة بكثرة. وفي النهاية إن لم تستطع اتخاذ قرار، إذن من الأفضل تعلم مجال الواجهة الأمامية Font-End فهو سيفتح لك المجال لتعلم المجالات الأخرى ويعتبر أسهل نسبيًا والمفاهيم والمهارات التي ستتعلمها ستنتقل معك إلى المجالات الأخرى ويعتبر مجال جيد لدخول عالم البرمجة.
  5. بالطبع، لكن هل ستقوم بترجمة المقالات يدويًا أم تعرض نسخة مترجمة من المقالة بشكل آلي؟ عامًة تستطيع معرفة لغة الزائر من خلال واجهة navigator في جافاسكريبت، وكمثال: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content= "width=device-width, initial-scale=1.0"> <title> Get browser language preference </title> </head> <body> <div style="text-align: center;"> <h2 style="color: green;"> Hsoub </h2> <h3> Click the below button to get the language preference. </h3> <button id="myBtn"> Get Preferred language </button> <p id="result"></p> </div> <script> const myBtn = document. getElementById('myBtn') function getLanguages() { const langs = navigator.languages; const result = document. getElementById('result'); result.innerHTML += `The Preferred languages are: <b>${langs}</b>`; } myBtn.addEventListener('click', getLanguages); </script> </body> </html> عند الضغط على الزر سيظهر لك اللغات اللغات المفضلة لدى المستخدم في المتصفح وعرضها، وبالتالي تستطيع استخدام قيمة navigator.languages لعرض المقالة باللغة المفضلة لدى الزائر. لكن هناك مشكلة وهو إن كان المستخدم يستخدم اللغة الإنجليزية كلغة مفضلة أولى له في المتصفح، بينما هو من بلد عربي فسيتم عرض المقالة باللغة الإنجليزية له، لذا من الأفضل عرض المقالة باللغة المناسبة لبلد الزائر وذلك من خلال عنوان الـ IP ونحصل عليه بواسطة Geolocation API. لكن لن تحصل على ذلك إن لم يوافق المستخدم على مشاركة بيانات موقعه.
  6. أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل وطرح الأسئلة العامة هنا. التمرين لديك يقوم بالمطلوب بدون مشكلة. لكن تلك ليست الطريقة الأفضل، فتخزين النجوم في متغير arry غير مناسبة، وفي البداية لا تشغل بالك بذلك، وعلينا كتابة كود يقوم بالمطلوب فقط، بعد ذلك نسعى للتحسين وكتابة كود جيد كالتالي: function printStars(numStars) { for (let i = 1; i <= numStars; i++) { console.log("*".repeat(i)); } } const numStars = 5; printStars(numStars); حيث قمت بتعريف دالة printStars تتلقى متغيرًا واحدًا numStars يمثل عدد النجوم في السطر الأول من الهرم. داخل الدالة، حلقة for تبدأ من 1 وتستمر حتى numStars. داخل الحلقة، يتم طباعة حرف "*" عدد مرات يعتمد على قيمة i. يتم استخدام دالة repeat لطباعة حرف "*" عددًا محددًا من المرات. يتم استدعاء الدالة printStars مع قيمة numStars التي تحدد حجم الهرم.
  7. الاستخدامات كثيرة منها مشاركة الملفات والطباعة مع جميع الأجهزة المتصلة بشبكة الهماتشي بسهولة، أيضًا لعب الألعاب مع أصدقائك عبر الإنترنت وكأنكم على نفس الشبكة المحلية. أو للإتصال عن بعد بجهاز كمبيوتر آخر على الشبكة، بالطبع هناك برامج للتحكم عن بعد أخرى مثل TeamViewer أو AnyDesk. تستطيع أيضًا مشاركة البرامج والتطبيقات مع جميع الأجهزة المتصلة بشبكة الهماتشي، أو حماية خصوصيتك أثناء تصفح الإنترنت من خلال إخفاء عنوان IP الخاص بك وتشفير اتصالك بالإنترنت. وللدخول إلى الأجهزة المرتبطة ونسخ الملفات: افتح برنامج الهماتشي. اختر الجهاز الذي تريد الاتصال به من قائمة "الأجهزة". انقر بزر الماوس الأيمن على الجهاز واختر "توصيل". سيتم فتح نافذة جديدة تُظهر لك سطح المكتب الخاص بالجهاز. افتح نافذة "مستكشف الملفات" على جهازك. حدد الملفات التي تريد نسخها. انقر بزر الماوس الأيمن على الملفات واختر "نسخ". افتح نافذة "مستكشف الملفات" على الجهاز الذي تريد نسخ الملفات إليه. انقر بزر الماوس الأيمن في أي مكان فارغ في النافذة واختر "لصق".
  8. يوجد Vue-i18n وتتميز بالتالي: مكتبة شائعة وموثوقة توفر وظائف ترجمة شاملة. تدعم الترجمة القائمة على المكونات والمفاتيح. سهلة الاستخدام مع واجهة برمجة تطبيقات واضحة. توفر ميزات متقدمة مثل التعدد اللغوي الديناميكي وترجمة السمات. بجانب مكتبات أخرى مثل Vue-ns وvue-intl. وتستطيع التوجه للمستند الرسمي لكل مكتبة وتفقد طريقة الاستخدام وكمثال ذلك هو المستند الرسمي لمكتبة Vue-i18n: https://kazupon.github.io/vue-i18n/introduction.html
  9. بشكل بسيط وبدون تعقيد، تلك اللغات هي اللغات الأساسية لمواقع الويب والمبني عليها أي تقنية أخرى خاصة بالويب (المكتبات والإطارات الخاصة بالواجهة الأمامية). HTML نستخدمها لبناء هيكل الصفحة، أي تخيلي معي جسم السيارة نفسه (الهيكل المعدني). بعد ذلك نحن بحاجة إلى طلاء ذلك الهيكل وتنسيقه وتجميله صحيح؟ إذن نستخدم لغة CSS. لكن السيارة لن تتحرك بدون محرك صحيح؟ إذن نحن بحاجة إلى استخدام لغة جافاسكريبت وهي لغة برمجة الويب، ومن خلالها نضيف الديناميكية للموقع أي تنفيذ أمر معين عند النقر على زر ما وتغيير محتوى جزء من الصفحة بناءًا على أمر معين أو حدث معين وهكذا، أي التفاعل مع المستخدم، فالموقع بدون تلك اللغة لا يفهم ماذا يعني أن المستخدم ضغط على الزر؟ وبالتالي علينا استخدام ما سبق سويًا، لكن ليس بالضرروة استخدام جافاسكريبت، طالما أننا لا نحتاج إلى وجود ميزات برمجية في الموقع أي أوامر نكتبها يفهمها المتصفح ويقوم بأمر معين. لفهم الأمر انظر للصورة التالية: حيث توضح الصورة ما الذي تضيفه كل لغة عند استعمالها في بناء الموقع، لاحظ شكل الموقع من خلال HTML فقط، ثم أضفنا CSS، لكن الموقع هو شكل فقط حاليًا ونحتاج إلى إضافة تفاعلية له لتنفيذ أمر ما حسب ما نريد، إذن نستخدم جافاسكريبت لاحظ الأزرار والتحكم والحركة بناءًا على تفاعل المستخدم مع الموقع.
  10. أظن أن ما تبحث عنه هو مكتبة Laravel-world، فهي توفر قائمة بالدول والولايات والمدن والعملات والتواريخ الزمنية وتُدمج المكتبة البيانات مع نماذج Eloquent عبر قاعدة البيانات وتوفر واجهات ووظائف مساعدة وطرق API. تفقد أيضًا مكتبة Laravel Countries قد تفيدك.
  11. متاح ذلك من خلال PrintDocument Class لإنشاء تقرير يعكس محتوى الفورم، أو استخدام أدوات مثل Crystal Reports أو ReportViewer Control في Visual Studio لإنشاء تقارير مخصصة، وتصميم التقرير بحيث يعرض جميع العناصر التي ترغب في طباعتها بما في ذلك التكس بوكس والجروب بوكس والبيانات. أو بالإعتماد على Console.WriteLine() لطباعة البيانات على الشاشة أو في ملف نصي. مع تثبيت مكتبة طباعة خارجية مثل iTextSharp أو DevExpress لإنشاء مستند PDF أو XPS يحتوي على محتوى الفورم.
  12. بالطبع تعلم أن splice هي دالة مدمجة في جافاسكريبت وتسمح لك بإضافة، إزالة أو استبدال العناصر من مجموعة أو مصفوفة. وتستقبل المعلمات التالية: splice(start, deleteCount, item1) start: فهرس العنصر الذي تريد البدء من إزالته أو استبداله أو إضافته. deleteCount: عدد العناصر التي تريد إزالتها. item1, item2, ...: العناصر التي تريد إضافتها (اختياري). وتستطيع استخدام قيمة سالبة لـ index للبدء من نهاية المصفوفة أي -1 ولفهم الأمر، لننظر إلى مثال عملي لإضافة عنصر: const fruits = ["apple", "banana", "orange"]; fruits.splice(1, 0, "kiwi"); // يضيف "kiwi" بعد "banana" console.log(fruits); // ["apple", "kiwi", "banana", "orange"] وتستطيع أيضًا إضافة عنصرين: const fruits = ["apple", "banana", "orange"]; fruits.splice(2, 0, "kiwi", "grape"); // يضيف "kiwi" و "grape" بعد "orange" console.log(fruits); // ["apple", "banana", "kiwi", "grape", "orange"] ولإزالة عنصر: const fruits = ["apple", "banana", "orange"]; fruits.splice(2, 1); // يزيل "orange" console.log(fruits); // ["apple", "banana"] بنفس المنطق نستطيع إزالة عنصرين: const fruits = ["apple", "banana", "orange", "kiwi", "grape"]; fruits.splice(2, 2); // يزيل "orange" و "kiwi" console.log(fruits); // ["apple", "banana", "grape"] استبدال عنصر: const fruits = ["apple", "banana", "orange"]; fruits.splice(1, 1, "mango"); // يستبدل "banana" بـ "mango" console.log(fruits); // ["apple", "mango", "orange"] ولمعلوماتك تستطيع إزالة جميع العناصر من المصفوفة بكتابة أول معلمة بقيمة 0 أي بداية المصفوفة ثم وضع القيمة الثانية بطول المصفوفة: const fruits = ["apple", "banana", "orange"]; fruits.splice(0, fruits.length); // يزيل جميع العناصر console.log(fruits); // []
  13. تلك المنصات تُعرف باسم منصات low code أوؤ، و low code يعني إمكانية التصميم مع كتابة كود قليل للتخصيص، أما no code فسحب وإفلات فقط لتصميم الواجهة. ولا مشكلة في ذلك، فلكل أداة أو تقنية استخدامها المناسب لها، فمن خلالها نستطيع تنفيذ تصاميم أولية بشكل سريع لعرضه على العملاء مثلاً، أو إنشاء موقع لا يحتاج إلى الكثير من التخصيص. وبالفعل يوجد منصات بها مكونات React.js جاهزة من أجل إنشاء واجهة الموقع وإنشاء حالة state للمكونات. وستجد تفصيل أكثر في تعليق سابق هنا:
  14. عليك تحديث Unity إلى الإصدار 2019.3 أو أحدث، ففي ذلك الإصدار، تم دمج نظام الإدخال الجديد بشكل افتراضي. ثم عليك بالتالي: في Unity، افتح قائمة "Edit" وقم باختيار "Project Settings". في قائمة "Project Settings"، اختر "Input". سترى قائمة الأجهزة المدعومة. تأكد من تفعيل الجهاز الذي تريد استخدامه (مثل لوحة المفاتيح أو ذراع التحكم). يمكنك إضافة أزرار جديدة وتعيين وظائف لها. ثم كتابة أكواد حركة اللاعب: استخدم "Input System Actions" بدلاً من "Input.GetAxis" أو "Input.GetKey". يمكنك العثور على "Input System Actions" في قائمة "Assets". انشئ "Input Action Map" جديدًا وقم بتعيين أزرار التحكم. في نص برمجي، استخدم "Input Action Map" للتحقق من ضغطات الأزرار. وكمثال: using UnityEngine; using UnityEngine.InputSystem; public class PlayerController : MonoBehaviour { public InputActionMap inputMap; private void Update() { // Check for movement input Vector2 movementInput = inputMap.GetAction("Move").ReadValue<Vector2>(); // Move the player transform.Translate(movementInput * Time.deltaTime); } }
  15. لا مشكلة في ذلك، تستطيع العمل كمطور واجهة خلفية أو أمامية، إلا إن كنت تنوي العمل على مواقع العمل الحر، هنا يجب أن تصبح مطور Full-stack حيث أنك في الغالب ستعمل على تطوير وإنهاء المشروع بمفردك. وعند تعلم الواجهة الخلفية، من الأفضل تعلم أساسيات HTML, CSS, JS فقط لكي تعلم ما يحدث بالواجهة الأمامية وتستطيع التواصل مع فريق الواجهة الأمامية.
  16. سيتم سؤالك في الأمور المهمة التي لها علاقة بصميم محتوى الدورة والتخصص الخاص بها، وأيضًا في المسارات التي قمت بإنهائها بحد أدنى 4 مسارات، أيضًا سيتم سؤالك حول المشاريع العملية التي قمت بتنفيذها في الدورة. وذلك خلال محادثة مدتها 30 دقيقة، بعد ذلك سيتم تحديد مشروع التخرج للعمل عليه. لذا أمور مثل تخصيص المتصفح لن يتم سؤالك عنها بالطبع.
  17. أرجو التعليق أسفل فيديو الدورة لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا. تقصد كالتالي؟ لاحظ أن هذا المتغير موجود بالفعل في الكائن window أي يوجد خاصية باسم name في الكائن العالمي window، ولكن تلك الخاصية أصبحت deprecated أي لم يعد يتم دعمها وسيتم إزالتها عما قريب أو قد تظل موجودة لكن المتصفحات قد لا تدعمها. لذا يمكنك تجاهل ذلك، أو استخدام اسم متغير آخر بدلاً من name. وعامًة عند وجود خط في متغير أو غيره يعني ذلك أنه deprecated.
  18. تتنوع مسائل تعلم الآلة بشكل كبير، وتشمل مجالات واسعة، وكأمثلة: التصنيف: تصنيف البيانات إلى فئات مختلفة، مثل تصنيف البريد الإلكتروني العشوائي، أو تصنيف الصور. التنبؤ: التنبؤ بقيم مستقبلية بناءً على بيانات تاريخية، مثل التنبؤ بسعر الأسهم، أو التنبؤ بحالة الطقس. التركيب: استنتاج العلاقات بين متغيرات متعددة، مثل اكتشاف علاقات بين الجينات والأمراض. التجميع: تقسيم البيانات إلى مجموعات فرعية متشابهة، مثل تجميع العملاء حسب سلوكهم الشرائي. الاسترجاع: استخراج المعلومات ذات الصلة من كميات كبيرة من البيانات، مثل استرجاع المعلومات من الإنترنت. وبالفعل يلعب تعلم الآلة دورًا رئيسيًا في حل العديد من مشكل العالم الحقيقي، مثل: تحسين تشخيص الأمراض، وتطوير أدوية جديدة، وتقديم رعاية صحية مخصصة. الكشف عن الاحتيال، وإدارة المخاطر، وتحسين التداول. تحسين كفاءة الإنتاج، والتنبؤ بأعطال الآلات، وتطوير منتجات جديدة. تحسين غلة المحاصيل، وإدارة الموارد الطبيعية، ومكافحة الآفات. تطوير سيارات ذاتية القيادة، وتحسين أنظمة النقل العام، وإدارة حركة المرور. ومع ذلك، هناك بعض التحديات التي تواجه تعلم الآلة، مثل: من المسؤول عن أخطاء أنظمة تعلم الآلة؟ كيف يمكننا حماية بيانات المستخدمين من سوء الاستخدام؟ كيف يمكننا ضمان أن أنظمة تعلم الآلة عادلة وغير متحيزة؟ ولا يقتصر مجال تعلم الآلة على حل مشكل العالم الحقيقي، بل متاح توظفيه أيضًا في مجالات أخرى مثل الترفيه والألعاب والتعليم.
  19. أولاً عليك الحصول على max ID من الجدول: int maxId; using (var context = new DMMEntities()) { maxId = context.TBL_SUPP.Max(s => s.SUPP_ID) + 1; } ثم اضبط max ID في المورد الجديد: P.SUPP_ID = maxId; بعدها أضف المورد إلى قاعدة البيانات: db.TBL_SUPP.Add(P); db.SaveChanges(); ثم عرض max ID في textbox: txtSupplierID.Text = maxId.ToString(); ومن الأفضل استخدام try-catch block لمعالجة أي أخطاء قد تحدث عند استخراج max ID، والجدير بالذكر أنك تستطيع الإعتماد على stored procedure لتنفيذ عملية الإضافة والحصول على max ID في خطوة واحدة، واستخدام LINQ لكتابة استعلام أكثر إيجازًا للحصول على max ID.
  20. إما بالإعتماد على SELECT MAX() كالتالي: SELECT MAX(SUPP_ID) AS MaxID FROM DMM.DB.TBL_SUPP; ليصبح الكود: using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var command = new SqlCommand("SELECT MAX(SUPP_ID) AS MaxID FROM DMM.DB.TBL_SUPP", connection)) { var reader = command.ExecuteReader(); if (reader.Read()) { int maxId = reader.GetInt32(0); txtSupplierID.Text = maxId.ToString(); } } } أو استخدام IDENTITY بالشكل: CREATE TABLE DMM.DB.TBL_SUPP ( SUPP_ID INT IDENTITY(1, 1) PRIMARY KEY, SUPP_NAME VARCHAR(50) NOT NULL, SUPP_ADDRESS VARCHAR(100) NOT NULL ); ليصبح الكود: // Insert the new supplier without specifying SUPP_ID var newSupplier = new DMM.DB.TBL_SUPP { SUPP_NAME = edt_name.Text, SUPP_ADDRESS = edt_address.Text }; using (var connection = new SqlConnection(connectionString)) { connection.Open(); using (var command = new SqlCommand("INSERT INTO DMM.DB.TBL_SUPP (SUPP_NAME, SUPP_ADDRESS) VALUES (@name, @address)", connection)) { command.Parameters.AddWithValue("@name", newSupplier.SUPP_NAME); command.Parameters.AddWithValue("@address", newSupplier.SUPP_ADDRESS); command.ExecuteNonQuery(); } // Get the newly inserted ID using (var command = new SqlCommand("SELECT MAX(SUPP_ID) AS MaxID FROM DMM.DB.TBL_SUPP", connection)) { var reader = command.ExecuteReader(); if (reader.Read()) { int maxId = reader.GetInt32(0); txtSupplierID.Text = maxId.ToString(); } } } وبالطبع تأكد من أن عمود SUPP_ID هو نوع بيانات INT وله خاصية IDENTITY مضبوطة على (1, 1)، ومن أنك قمت بإضافة جميع البيانات المطلوبة لباقي أعمدة الجدول قبل تنفيذ INSERT.
  21. الأمر طبيعي فالشاشة لديك بهرتز مرتفع، فمن الطبيعي أن يتم خفضه عند العمل على البطارية ثم رفعه مرة أخرى عند توصيل الشاحن. ولمنع حدوث ذلك لكن الأمر سيؤدي إلى استهلاك طاقة أكبر من البطارية، توجه إلى برنامج Armoury Crate ثم Home ثم ستجد صندوق باسم System Configuration قم بتعطيل زر Panel Power Saver.
  22. غالبًا المشكلة بسبب عدم توافقية إصدار مكتبة Pygments مع إصدار IPython، عليك استخدام إصدار IPython 8.1 أو أحدث ولديك بالفعل الإصدار 8.2، وتستطيع التحديث مباشرًة لأحدث إصدار من خلال: pip install --upgrade ipython أيضًا عليك استخدام إصدار Pygments 2.4.0 أو أحدث فلديك إصدار أقل، واستخدم الأمر التالي: pip install --upgrade pygments إن استمرت المشكلة جرب الإصدارات التالية: pip install pygments==2.4.0 pip install ipython==8.0
  23. نعتذر لك على أي إزعاج تواجهه بشأن الوصول للدورة، تلك المشكلة تستطيع حلها من خلال التواصل مع مركز المساعدة في أكاديمية حسوب، وطالما أنك تواصلت سيتم الرد عليك بلا شك فلا تقلق بخصوص ذلك ربما يوجد ضغط حاليًا بسبب وجود عرض على الدورات.
  24. الأمر يعتمد على التقنيات المستخدم في الموقع هل يتم استخدام React أم لارافل؟ عامًة في جافاسكريبت هناك مكتبة i18next وذلك هو المستند الرسمي: https://www.i18next.com/ حيث تدعم i18next تحميل الملفات الترجمة بصيغ مختلفة مثل JSON و PO وغيرها، وتستطيع استخدامها في تطبيقات React و Angular و Vue.js وغيرها. وإن كان الموقع يتم تصييره rendering عن طريق SSR أي من جهة الخادم، فهنا الترجمة تتم على الخادم من خلال متغيرات وملف به الترجمات المطلوبة سواء من خلال إطار next.js أو من خلال PHP تفقدي النقاش التالي: أما إن كان الموقع Static تستطيعي إنشاء صفحات منفصلة لكل لغة والتبديل بينها من خلال جافاسكريبت.
  25. المشكلة الرئيسية هي في دالة الإضافة (add) حيث أنها تحتوي على عدة أخطاء: تحتاج إلى استدعاء الدالة execute بدلاً من cute لتنفيذ استعلام SQL. عند إجراء عملية الإدخال في قاعدة البيانات، يجب عليك توفير قيم لجميع الحقول في الجدول، وعلى ما أعتقد لديك حقل واحد فقط name، ولكن قمت بتضمين age و add و ph في الإدراج بدون توفير قيم لها، لذا، عليك إما تعديل جدول قاعدة البيانات لتناسب الحقول التي تحاول إضافتها، أو إزالة تلك الحقول من الإدراج. تحتاج إلى تعيين قيمة واحدة أو أكثر لحقول الإدراج، ولكن أنت أعطيتها قيمة واحدة فقط، قم بتعديل الاستعلام ليتضمن قيمة واحدة لحقل name فقط. لضمان إغلاق قاعدة البيانات بشكل صحيح، عليك نقل db.close() إلى نهاية دالة الإضافة بدلاً من وضعها في النهاية العامة للبرنامج. from PyQt5 import QtCore, QtGui, QtWidgets import sys import sqlite3 app = QtWidgets.QApplication(sys.argv) w = QtWidgets.QWidget() e1 = QtWidgets.QLineEdit(w) e1.move(200,150) e1.resize(400,40) e1.setStyleSheet("background-color: white ;font-size: 20px") b1 = QtWidgets.QPushButton("اضافة", w) b1.move(40,40) b1.resize(400,50) b1.setStyleSheet("background-color: yellow ;font-size: 24px") db = sqlite3.connect("name.db") c = db.cursor() c.execute("CREATE TABLE IF NOT EXISTS names(name TEXT)") def add(): a1 = e1.text() e1.clear() c.execute("INSERT INTO names(name) VALUES(?)", (a1,)) db.commit() db.close() b1.clicked.connect(add) w.show() app.exec_()
×
×
  • أضف...