1.4 · ربط الحقول بالبيانات والتعامل مع السجلات

المستوى 1 · المبتدئ: التطبيق الأول

1.4ربط الحقول بالبيانات والتعامل مع السجلات

الهدف: ربط الحقول بالبنود والتعامل مع السجلات (HAjoute، HModifie…) مع اختبار HEnDehors دائمًا.
الوقت المقدّر: 11 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 30 ثانية

  • ربط حقل ↔ بند عالي الإنتاجية: ÉcranVersFichier() ينسخ الإدخال إلى البنود، وFichierVersÉcran() يفعل العكس للعرض.
  • دوال HFSQL (البادئة H) تتعامل مع البيانات: HAjoute، HModifie، HSupprime، HLitPremier/Suivant، HLitRecherche، HRAZ.
  • اختبر HEnDehors دائمًا بعد قراءة أو بحث: وإلا تعمل على بيانات غير موجودة — بل قد تعدّل السجل الخطأ.

حالة مصغّرة متسلسلة — ياسين يربط بطاقة طلبه بالبيانات

رسم ياسين نافذة «بطاقة الطلب». الآن يربطها بالبيانات. أولًا يربط كل حقل ببنده: SAI_NomClient ↔ Client.Nom، وSAI_Ville ↔ Client.Ville. ثم يكتب كود التسيير. لإنشاء طلب: يستدعي HRAZ لتفريغ البنود، ويترك المستخدم يُدخل، ثم ÉcranVersFichier() ينسخ الإدخال دفعة واحدة وHAjoute يسجّل. وللبحث عن عميل برمزه، يستخدم HLitRecherche ثم يختبر HEnDehors: إذا لم يُعثر على شيء، يعرض رسالة واضحة بدل استغلال بيانات وهمية. بفضل الحقول المرتبطة، يستغرق تعديل بطاقة أسطرًا قليلة. يستخلص ياسين: الربط يؤتمت تبادل الشاشة/الملف، واختبار HEnDehors انعكاس إلزامي.

حالة مستقلة لهذا القسم: تعود في الدرس والمخطّط والسكربت وتحدّي 48 ساعة للقسم 1.4.

1. ربط الحقل ↔ البند

هذه إحدى أكثر آليات WinDev إنتاجية: الرابط بين حقول نافذة وبنود التحليل. عندما يُربط حقل ببند (SAI_NomClient ↔ Client.Nom)، يعرف WinDev من أين يأخذ القيمة وأين يضعها.

ودالتان تقومان بكل العمل: ÉcranVersFichier() (تنسخ إدخال الشاشة إلى البنود قبل التسجيل) وFichierVersÉcran() (تنسخ قيم الملف إلى الحقول للعرض). انتهت عشرات الإسنادات اليدوية — ومصدر أخطاء أقل.

2. دوال HFSQL

لـالتعامل مع البيانات، يوفّر WLangage دوال HFSQL، كلها ببادئة H: HAjoute (إضافة)، وHModifie (تحديث السجل الجاري)، وHSupprime، وHLitPremier / HLitDernier / HLitSuivant / HLitPrécédent (التنقل)، وHLitRecherche (البحث على مفتاح)، وHRAZ (تفريغ البنود في الذاكرة قبل إدخال).

مفهوم أساسي: السجل الجاري. في لحظة معينة، يكون سجل ما «جاريًا» في الذاكرة، وهو الذي سيؤثر فيه HModifie أو HSupprime. والخطأ في السجل الجاري خطأ كلاسيكي.

3. انعكاس HEnDehors

بعد قراءة أو بحث، يبيّن HEnDehors هل نحن خارج الملف: لا شيء وُجد، أو بلغنا النهاية. ويجب دائمًا اختباره قبل استغلال النتيجة.

إذًا دورة البطاقة النموذجية هي: HRAZ → إدخال → ÉcranVersFichier → HAjoute (أو HModifie). ونسيان اختبار HEnDehors يعني عرض بيانات متبقية، بل تعديل السجل الخطأ — فساد صامت يجب تجنّبه قطعًا.

خطأ شائع في الفهم: «البحث الذي لا يجد شيئًا لا يسبب مشكلة: أواصل كما هو». لا، هذا هو الفخ بالضبط. بدون اختبار HEnDehors، يستغل الكود قيمًا متبقية (آخر سجل مقروء) ويعرض التطبيق بيانات خاطئة دون أن يتعطل؛ والأسوأ أن HModifie بعد بحث فاشل قد يعدّل السجل الخطأ. يختبر ياسين HEnDehors بشكل منهجي ويعالج حالة «غير موجود» قبل أي استغلال.
دورة البطاقة تفريغ، نسخ، تسجيل — ومعاينة النتيجة دائمًا. HRAZ تفريغ البنودفي الذاكرةÉcranVersFichier إدخال→ بنودHAjoute / HModifie تسجيلالسجل
تفريغ، نسخ، تسجيل — ومعاينة النتيجة دائمًا.
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) ياسين، مطوّر WinDev في شركة صغيرة لتجارة العتاد الكهربائي بمدينة وهران، يربط حقول نافذة الطلب ببنودها (SAI_NomClient ↔ Client.Nom). 2) لإنشاء طلب، يتابع HRAZ → إدخال → ÉcranVersFichier → HAjoute؛ وللتعديل، يتموضع بـHLitRecherche، ويعرض بـFichierVersÉcran ثم يسجّل بـHModifie. 3) بعد كل بحث، يختبر HEnDehors: إذا لم يُعثر على شيء يعرض رسالة واضحة بدل استغلال بيانات وهمية. الدرس: الربط يؤتمت تبادل الشاشة/الملف، واختبار HEnDehors انعكاس إلزامي.

🔎 مثال ملموس — 🔎 مثال ملموس — تسجيل بطاقة والبحث عنها

دورة ياسين لبطاقة طلبه:

// Créer une nouvelle commande (champs liés)
HRAZ(Commande)                      // vider les rubriques en mémoire
// ... l'utilisateur saisit dans les champs liés ...
ÉcranVersFichier(Commande)          // recopier la saisie vers les rubriques
HAjoute(Commande)                   // enregistrer le nouvel enregistrement

// Rechercher un client, puis TOUJOURS tester HEnDehors
HLitRecherche(Client, IDClient, 1042)
SI HEnDehors(Client) ALORS
	Info("Client introuvable : vérifiez le code.")
SINON
	FichierVersÉcran(Client)        // afficher la fiche trouvée
FIN

القراءة: استدعاءان (ÉcranVersFichier / FichierVersÉcran) يعوّضان عشرات الإسنادات؛ واختبار HEnDehors يحمي من بحث فارغ.

الانعكاس: يُختبر HEnDehors فورًا بعد القراءة أو البحث، قبل أي استغلال.

مفردات القسم

حقل مرتبط ببند
حقل شاشة مرتبط ببند (SAI_NomClient ↔ Client.Nom): يعرف WinDev كيف يقرأ القيمة ويسجّلها تلقائيًا.

مثال بسيط: يربط ياسين SAI_Ville بـClient.Ville في نافذته.

ما ليس كذلك: نسخ كل قيمة يدويًا في الكود، حقلًا بحقل.

رد فعل: حقل شاشة ↔ بند → اربطهما.

ÉcranVersFichier / FichierVersÉcran
دالتا الربط الأساسيتان: ÉcranVersFichier تنسخ الإدخال إلى البنود؛ وFichierVersÉcran تنسخ قيم الملف إلى الحقول.

مثال بسيط: يستدعي ياسين ÉcranVersFichier قبل HAjoute مباشرة.

ما ليس كذلك: إسناد ثلاثين بندًا يدويًا ونسيان واحد.

رد فعل: نقل شاشة ↔ ملف → هاتان الدالتان.

دوال HFSQL (البادئة H)
دوال التعامل مع البيانات: HAjoute، HModifie، HSupprime، HLitPremier/Suivant/Précédent/Dernier، HLitRecherche، HRAZ.

مثال بسيط: يضيف ياسين طلبًا بـHAjoute ويعيد قراءته بـHLitRecherche.

ما ليس كذلك: تعديل سجل بالكتابة مباشرة في الملف.

رد فعل: بيانات → دوال ببادئة H.

السجل الجاري
السجل «الجاري» في الذاكرة: هو الذي سيؤثر فيه HModifie أو HSupprime.

مثال بسيط: يتموضع ياسين على العميل الصحيح قبل استدعاء HModifie.

ما ليس كذلك: استدعاء HModifie دون التموضع على السجل الصحيح.

رد فعل: تعديل/حذف → تحقق من السجل الجاري.

HEnDehors (يجب اختباره)
يبيّن أننا خارج الملف بعد قراءة أو بحث (لا شيء وُجد، أو بلغنا النهاية)؛ ويجب اختباره منهجيًا.

مثال بسيط: يعرض ياسين «العميل غير موجود» عندما يكون HEnDehors صحيحًا.

ما ليس كذلك: استغلال نتيجة بحث دون اختبار HEnDehors.

رد فعل: بعد القراءة/البحث → اختبر HEnDehors.

في التطبيق — عمليًا — تسجيل بطاقة وإعادة قراءتها

  1. اربط حقول النافذة بالبنود المقابلة في التحليل (SAI_NomClient ↔ Client.Nom) عبر خصائص الحقل.
  2. للـإنشاء: استدعِ HRAZ لتفريغ البنود، واترك المستخدم يُدخل، ثم ÉcranVersFichier متبوعة بـHAjoute.
  3. للـتعديل: تموضع على السجل الصحيح (HLitRecherche)، واعرضه بـFichierVersÉcran، ثم بعد الإدخال ÉcranVersFichier وHModifie.
  4. اختبر HEnDehors منهجيًا بعد كل قراءة أو بحث، قبل استغلال النتيجة.
تعرف كيف تسجّل البيانات وتعيد قراءتها وتعدّلها بأسطر قليلة بفضل الحقول المرتبطة ودوال HFSQL، مع انعكاس المراقبة HEnDehors — وهي الآلية التي يربطها ياسين ببطاقة طلبه.

سكربت خطوة بخطوة — اربط البطاقة كما يفعل ياسين (4 دقائق)

1) اربط كل حقل ببنده (SAI_NomClient ↔ Client.Nom) في خصائص الحقل. 2) الإنشاء: HRAZ، إدخال المستخدم، ÉcranVersFichier، HAjoute. 3) التعديل: HLitRecherche للتموضع، ثم FichierVersÉcran للعرض، ثم ÉcranVersFichier وHModifie. 4) بعد كل قراءة أو بحث، اختبر HEnDehors وعالج حالة «غير موجود». 5) الحذف: تموضع ثم HSupprime.

لا تتابع كتابة بعد بحث دون أن تختبر HEnDehors.

نموذج للنسخ واللصق — دورة البطاقة عند ياسين

// Création
HRAZ(Fichier)
< saisie de l'utilisateur >
ÉcranVersFichier(Fichier)
HAjoute(Fichier)

// Recherche + contrôle
HLitRecherche(Fichier, Clé, valeur)
SI HEnDehors(Fichier) ALORS
	< cas non trouvé >
SINON
	FichierVersÉcran(Fichier)
FIN

// Modification / Suppression (enregistrement en cours)
ÉcranVersFichier(Fichier)
HModifie(Fichier)      // ou HSupprime(Fichier)

استعراض للقراءة فقط

يستخدم ياسين HLitRecherche ثم FichierVersÉcran فقط لعرض طلب، دون تسجيل.

إضافة من جدول

من جدول الطلبات، يفتح ياسين بطاقة الإضافة، ثم HRAZ، وÉcranVersFichier، وHAjoute، ثم يحدّث الجدول.

بحث فاشل

عندما يكون HEnDehors صحيحًا، يقترح ياسين إنشاء عميل جديد بدل عرض بطاقة فارغة.

نقل يدوي

لحقل محسوب (المجموع مع الرسم)، يحسب ياسين القيمة ثم يسندها يدويًا، دون حقل مرتبط.

✓ ممارسات جيدة

  • اربط الحقول بالبنود بدل الإسناد اليدوي.
  • استخدم ÉcranVersFichier / FichierVersÉcran قبل التسجيل أو العرض.
  • اختبر HEnDehors بعد كل قراءة أو بحث.

✗ أخطاء شائعة

  • نسيان اختبار HEnDehors بعد بحث.
  • تعديل السجل الخطأ (السجل الجاري).
  • إعادة كتابة عشرات الإسنادات يدويًا بدل الحقول المرتبطة.

النقاط الأساسية

  • الربط حقل ↔ بند عالي الإنتاجية: ÉcranVersFichier تنسخ الإدخال، وFichierVersÉcran تعرض القيم.
  • دوال HFSQL (البادئة H) تتعامل مع البيانات: HAjoute، HModifie، HSupprime، HLit…، HLitRecherche، HRAZ.
  • السجل الجاري هو الذي يؤثر فيه HModifie أو HSupprime: والخطأ فيه خطأ كلاسيكي.
  • انعكاس إلزامي: اختبار HEnDehors بعد كل قراءة أو بحث قبل استغلال النتيجة.

تحدي 48 ساعة — طبّقه غدًا

خذ ملفًا من تحليلك واكتب، كما يفعل ياسين، الدورة الكاملة لبطاقة: HRAZ → ÉcranVersFichier → HAjoute، ثم بحث HLitRecherche يتبعه اختبار HEnDehors. اكتب في جملة واحدة ما يحدث إذا نُسي اختبار HEnDehors.

قائمة الخروج من القسم
  • أعرف كيف أربط حقول نافذة ببنود التحليل.
  • أعرف كيف أضيف سجلًا وأبحث عنه وأعدّله بدوال HFSQL.
  • لديّ انعكاس اختبار HEnDehors بعد كل قراءة أو بحث.
تقييم ذاتي 1-5: هل أربط حقولي بالبنود بدل إسناد كل شيء يدويًا؟تقييم ذاتي 1-5: هل أختبر HEnDehors بعد كل بحث؟

أسئلة شائعة

لماذا يجب اختبار HEnDehors منهجيًا بعد بحث؟

لأن البحث قد لا يجد شيئًا. وبدون هذا الاختبار، يواصل الكود استغلال القيم المتبقية في الذاكرة — غالبًا آخر سجل مقروء — فيعرض التطبيق بيانات خاطئة دون تعطل. والأسوأ: متابعة HModifie بعد بحث فاشل قد تعدّل سجلًا غير المقصود. لذا نختبر HEnDehors فورًا بعد القراءة أو البحث، قبل أي استغلال.

ما الفرق بين الحقول المرتبطة والكود اليدوي؟

الحقول المرتبطة تؤتمت النقل شاشة ↔ ملف عبر ÉcranVersFichier / FichierVersÉcran: سريعة وآمنة ويُفضَّل اعتمادها. أما الكود اليدوي (إسناد واحدًا واحدًا) فيبقى مفيدًا للحالات الخاصة: بيانات محوّلة عند العرض (حساب، تحويل) أو حقول غير مرتبطة (مرشحات، مجاميع، مؤشرات). في بطاقة من ثلاثين حقلًا، توفّر الحقول المرتبطة وقتًا كبيرًا وتجنّب كثرة النسيان.

تحقّق من فهمك

كيف نسجّل البيانات المُدخلة في نافذة مرتبطة؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 1أسئلة جديدة وأصعب للتحقق من مكتسباتك