31-01-25, 10:38 PM
المشكلة التي تواجهها عند اختيار أسماء المنتجات باللغة العربية في ComboBox ترجع على الأرجح إلى ترميز النصوص (Encoding) أو التعامل مع الأحرف العربية في الاستعلامات النصية داخل DLookup.
أسباب محتملة للمشكلة:
اختلاف الترميز (Collation) بين Access و SQL Server
قد يكون هناك عدم تطابق في الترميز بين الحقل nvarchar في SQL Server وبيئة Access.
استخدام علامات الاقتباس المفردة ' مع النص العربي
عند تمرير اسم المنتج العربي في DLookup, قد لا تتم معالجته بشكل صحيح بسبب المسافات أو المحارف الخاصة.
وجود مسافات غير مرئية في البيانات العربية
بعض الحقول في SQL Server قد تحتوي على مسافات زائدة أو رموز غير مرئية في نهاية أو بداية النص.
عدم تطابق نوع البيانات عند البحث في DLookup
DLookup يستخدم مقارنة نصية مباشرة، مما قد يسبب أخطاء مع النصوص العربية.
الحل المقترح:
1. استخدام Trim لإزالة المسافات غير المرئية
قبل تمرير اسم المنتج إلى DLookup، قم بإزالة أي مسافات زائدة:
2. إضافة N قبل النص العربي عند استخدام nvarchar
عند التعامل مع الحقول من نوع nvarchar في SQL Server، يجب وضع N قبل النص العربي حتى يتم تفسيره بشكل صحيح:
3. التأكد من تطابق Collation بين Access و SQL Server
افتح SQL Server Management Studio (SSMS) ونفذ الأمر التالي للتحقق من الترميز (Collation) الخاص بجدول tbl_Product:
إذا كان الترميز مختلفًا (Latin1_General_CI_AS مثلاً)، فجرّب تغييره إلى Arabic_CI_AS:
4. البحث باستخدام الباركود بدلاً من الاسم
بما أن البحث بالباركود يعمل بشكل صحيح، يمكنك تعديل DLookup ليتم البحث باستخدام ProCode بدلاً من ProName:
? الخلاصة
1. استخدم Trim() للتخلص من المسافات غير المرئية.
2. استخدم N عند تمرير القيم إلى DLookup للتعامل مع nvarchar.
3. تأكد من أن Collation في SQL Server يدعم اللغة العربية.
4. إذا استمر الخطأ، استخدم الباركود كمرجع بدلاً من الاسم.
أسباب محتملة للمشكلة:
اختلاف الترميز (Collation) بين Access و SQL Server
قد يكون هناك عدم تطابق في الترميز بين الحقل nvarchar في SQL Server وبيئة Access.
استخدام علامات الاقتباس المفردة ' مع النص العربي
عند تمرير اسم المنتج العربي في DLookup, قد لا تتم معالجته بشكل صحيح بسبب المسافات أو المحارف الخاصة.
وجود مسافات غير مرئية في البيانات العربية
بعض الحقول في SQL Server قد تحتوي على مسافات زائدة أو رموز غير مرئية في نهاية أو بداية النص.
عدم تطابق نوع البيانات عند البحث في DLookup
DLookup يستخدم مقارنة نصية مباشرة، مما قد يسبب أخطاء مع النصوص العربية.
الحل المقترح:
1. استخدام Trim لإزالة المسافات غير المرئية
قبل تمرير اسم المنتج إلى DLookup، قم بإزالة أي مسافات زائدة:
PHP كود :
Dim proName As String
proName = Trim(Me.CboName)
Form_frm_froshtn_detail.ProName = DLookup("[ProName]", "tbl_Product", "[ProName]= '" & proName & "'")
Form_frm_froshtn_detail.ProCode = DLookup("[ProCode]", "tbl_Product", "[ProName]= '" & proName & "'")
Form_frm_froshtn_detail.Cost = DLookup("[Cost]", "tbl_Product", "[ProName]= '" & proName & "'")
Form_frm_froshtn_detail.Price = DLookup("[Price]", "tbl_Product", "[ProName]= '" & proName & "'")
2. إضافة N قبل النص العربي عند استخدام nvarchar
عند التعامل مع الحقول من نوع nvarchar في SQL Server، يجب وضع N قبل النص العربي حتى يتم تفسيره بشكل صحيح:
PHP كود :
Form_frm_froshtn_detail.ProName = DLookup("[ProName]", "tbl_Product", "[ProName]= N'" & proName & "'")
Form_frm_froshtn_detail.ProCode = DLookup("[ProCode]", "tbl_Product", "[ProName]= N'" & proName & "'")
Form_frm_froshtn_detail.Cost = DLookup("[Cost]", "tbl_Product", "[ProName]= N'" & proName & "'")
Form_frm_froshtn_detail.Price = DLookup("[Price]", "tbl_Product", "[ProName]= N'" & proName & "'")
3. التأكد من تطابق Collation بين Access و SQL Server
افتح SQL Server Management Studio (SSMS) ونفذ الأمر التالي للتحقق من الترميز (Collation) الخاص بجدول tbl_Product:
PHP كود :
SELECT name, collation_name
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.tbl_Product') AND name = 'ProName'
إذا كان الترميز مختلفًا (Latin1_General_CI_AS مثلاً)، فجرّب تغييره إلى Arabic_CI_AS:
PHP كود :
ALTER TABLE tbl_Product
ALTER COLUMN ProName NVARCHAR(255) COLLATE Arabic_CI_AS
4. البحث باستخدام الباركود بدلاً من الاسم
بما أن البحث بالباركود يعمل بشكل صحيح، يمكنك تعديل DLookup ليتم البحث باستخدام ProCode بدلاً من ProName:
PHP كود :
Dim proCode As String
proCode = DLookup("[ProCode]", "tbl_Product", "[ProName]= N'" & proName & "'")
Form_frm_froshtn_detail.ProName = proName
Form_frm_froshtn_detail.ProCode = proCode
Form_frm_froshtn_detail.Cost = DLookup("[Cost]", "tbl_Product", "[ProCode]= '" & proCode & "'")
Form_frm_froshtn_detail.Price = DLookup("[Price]", "tbl_Product", "[ProCode]= '" & proCode & "'")
? الخلاصة
1. استخدم Trim() للتخلص من المسافات غير المرئية.
2. استخدم N عند تمرير القيم إلى DLookup للتعامل مع nvarchar.
3. تأكد من أن Collation في SQL Server يدعم اللغة العربية.
4. إذا استمر الخطأ، استخدم الباركود كمرجع بدلاً من الاسم.
