السلام عليكم
ماهية طريقة استبدال قيمة عمود في جدول نوعة حرفي اي character
على عمود ثاني نوعة رقمي اي numeric
علما ان قيمة العمودين هي ارقام فقط
السلام عليكم
ماهية طريقة استبدال قيمة عمود في جدول نوعة حرفي اي character
على عمود ثاني نوعة رقمي اي numeric
علما ان قيمة العمودين هي ارقام فقط
تم تعديل هذه المشاركة بواسطة lion iraq في 26 فبراير 2013 في 23:55 — السبب: الاخ العزيز تم تغيير العنوان : وارجو عدم استخدام اللهجة الشعبية
السلام عليكم
اخي العزيز هنالك الكثير من الطرق ولكن لدلك على داله جديدة سهلة ويمكن استخدامها من replace وهي CAST( ) Function
والضيغة البرمجية
CAST(eExpression AS cDataType [(nFieldWidth [, nPrecision])] [NULL | NOT NULL])
ومهمتها تحويل نوع الحقل الى نوع حسب الطلب n او c
لنفترض ان هنالك جدولين الاول باسم lion ويحتوي على حقل code نصي
والاخر جدول باسم lion1 ويحتوي على حقل code رقمي
ولنفترض اردنا استبدال صف من جدول lion بصف معين ضمن نفس الحقل من جدول lion1 اليك الايعاز
REPLACE code WITH CAST(lion1.code as C) وبالعكس اذا اردنا REPLACE code WITH CAST(lion.code as N)
لاحظ كيفية تغيير النوع عند الاضافة مع العلم الحقل لايتاثر بالنوع
تحياتي للجميع
تم تعديل هذه المشاركة بواسطة lion iraq في 26 فبراير 2013 في 23:54 — السبب: الاخ العزيز تم تغيير العنوان : وارجو عدم استخدام اللهجة الشعبية
اقتباسلاحظ كيفية تغيير النوع عند الاضافة مع العلم الحقل لايتاثر بالنوع
تحياتي للجميع
شكرا لك اخي العزيز فراس على سرعة الاجابة
ولكن اخي تظهر هذه الرسالة عند التنفيذ

وهي
عدم تطابق نوع البيانات
المطلوب هو
اذا كانت الحقل يحتوي على معلومات وليس فارغ
هو نقل قيمة حقل نوع (C)الى حقل نوع (N) سواء كان الحقلان في جدول واحد او اثنان دون التأثير بالقيمة
مثلا نقل قيمة 44.50 او قيمة عشرية
ملاحظة
عند تغيير نوع الحقل من (C) الى (N) من خصائص الجدول وكان يحتوي الحقل الاول على نفس القيمة اعلاه وهي 44.50
عند التغيير تتحول القيمة الى 44.00
اي اذا كانت القيمة عبارة عن رقم ثم فاصلة ثم رقم عند تحويل نوع الحقل يتغيير ما بعد الفاصلة الى( اصفار)
والمطلوب هو ان تبقى على حالها دون تغيير القيمة
واذا لم يكن حل لهذه المشكلة
هل يوجد كود لحذف الفاصلة فقط من القيمة لان القيمة الصحيحة اي بدون فاصلة تنقل كما هي بدون التغيير
واسف على الاطالة
تم تعديل هذه المشاركة بواسطة jmjms في 27 فبراير 2013 في 09:35
اخي العزيز
لاتاسف على اي شي وانا اشجع الشرح المفصل
ارفق جدول او جدولين للتطبيق
وسوف اريك طريق الاستعمال مع ذكر نسخة الفيجوال فوكس برو
تحياتي
اخي العزيز فراس تم حل المشكلة
ولكن سوف اضع ماهي الاخطاء التي صادفتني للافادة
بالنسبة للرسالة الاولى كان الكود بالشكل الاتي

تم تعديل هذه المشاركة بواسطة jmjms في 27 فبراير 2013 في 10:39
الاخ العزيز
يجب مراعاة الاتي
طلبت ختلاف في النوع
والمثال يوجد اختلاف في النوع والطول
وسوف ارشدك الى تطبيقها وبنفس الدالة
في مثالك الكود
SELECT porta2 REPLACE jm WITH CAST(porta.jm AS n) BROWSE يمكنك ومن خلال الصيغة البرمجية اضافة الطول والفاصلة مع الرقمية ووليصبح الايعاز هو SELECT porta2 REPLACE jm WITH CAST(porta.jm AS n(9,2)) BROWSE مع الانتباه الى طول الحقل او القيم يجب ان تكون بنفس الطول واذا كنت تريد العكس اي من حقل رقمي الى نصي لاحظ الايعاز SELECT porta REPLACE jm WITH CAST(porta2.jm AS C(10)) الحقل الرقمي كان طوله 9 والدالة عملة له 10 لغرض اضافة الفاصلة اي قم باضافة الطول زائد واحد اذا كنت تريد الحفاظ على الفواصل تحياتي لك وللجميع وانا مستمر معك في المتابعة
اخي فراس يرجى توضيح طريقة استبدال الحقل بالكامل علما ان القيمة لكل صف مختلفة عن الاخرى
وطريقة اعلاه يتم فيها استبدال الصف الاول فقط من الحقل

تم تعديل هذه المشاركة بواسطة jmjms في 27 فبراير 2013 في 18:35
هذا الكود يتطلب تساوي الصفوف بين الجدولين او الحقول وهو مبسط DO WHILE !EOF() SELECT porta ccode=jm SELECT porta2 REPLACE jm WITH CAST(ccode as n) skip SELECT porta skip ENDDO وتاكد الايعازات لها سياقات وشروط للعمل وبالامكان استخدام الاستعلام ومن ثم تصدير لجدول باسم معين اما الارقام ذات الفواصل الثنائية مثلا 12.22.23 او نقاط العرض والطول يجب ان تكون نوع نص لتفادي المشاكل وبالامكان ادخالها منفرد وتستخرج بشكل واحد تحياتي للجميع

شكرا لك اخي العزيز فراس على المتابعة والابداع

هذا النسر سوف ياكل طيورك
الشكر لله
اخي العزي لك ولجميع الاعضاء الاخوة ارجو عدم التردد في حال وجود اي مشكلة
ان يشاركناً معه
تحياتي للجميع
طيب يا حبايب هناك شيء اخر وهو اذا اردت ان انقل بيانات حقل من جدول وليكن اسم الجدول الاول lion1 واسم الحقل raw والبيانات في الحقل رقمي الى جدول اخر باسم lion2 واسم الحقل ايضا raw والنقل يكون بالاعتماد على رقم الموظف بحيث يبحث ان وجد رقم الموظف في الجدول الثاني الذي هو اصلا موجود في الجدول الاول يضيف القيد والا لا يضيف ؟ من يستطيع الاجابة اكون له شاكراً ؟
السلام عليكم
اتمنى من الاخوة الكرام المحاوله مع العلم ثلثي الاجابه موجدة بالموضوع امهلكم ليومين مع صاحب الموضوع طبعاًاتمنى المحاوله قبل اجابتي
تحياتي
تم تعديل هذه المشاركة بواسطة كمال العراقي في 3 مايو 2014 في 00:34
محاوله جميله جداً
اين الاخرين
شكرا على المساعدة وبوركتم
اخي العزيز الاخ المثابر فكرة جميله جداً
واليك بنفس طريقه الاخ المثابر مع القليل من الاختصار
SELECT lion1
GO top
DO WHILE !EOF()
icode=E_code
SELECT lion2
scan FOR E_code=icode
replace raw WITH lion1.raw
ENDSCAN
GO TOP
SELECT lion1
SKIP
ENDDO
MESSAGEBOX("done")شكرا لك اخي العزيز . فعلا طريقة حضرتك تختصر كثيرا في الكود دائما ما نتعلم منك ونستفيد من خبرتك.
ولكن عندي سؤال هام دائما ما اسئلة ولا اجد لة اجابة علي الرغم من معرفتي بأمر scan -endscan ولقد اسخدمتة كثيرا من قبل ولكني لم اسخدمة في المثال الذي قمت بمشراكتة واستخدمت بدلا منة الامر locate و if -endif دائما ما اكتشف هذة المشكلة بعد الانتهاء من تنفيذ اي برنامجي اني كتبت الكثير من الاكواد لعمل شيء معين علي الرغم من انة كان يمكن حلة بطريقة ابسط وعدد اقل من السطور هل هيا قلة خبرة ؟
Persistent Fox
هذا لايعتبر قلة خبرة وانما طريقه لفكره
وعند استيعاب ادوات ودوال البرمجة يمكنك اختيار الطريقه المناسبه وهذا يعتمد على الخبرة
اما اذا لم تعرف طريقه عمل الايعازات او الادوات فهذا يعتمد على الخبرة
والفكرة اعلاه يمكن عملها بااكثر من طريقه واكثرها شيوعاً طريقتي وطريقتك ويمكن عملها ب for
لانها تعتمد على loop
داخل الجداول
استمر في عمل كل فكرة بااكثر من طريقه بعد استيعاب الفكرة والناتج منها وان ارى فيك خبير مذهل في البرمجة
والفارق بين الخبير والمبرمج ان الخبير يستطيع انشاء الفكرة باكثر من المبرمج في عدد الطرق
تحياتي
السلام عليكم
طبعا لا مشكلة باستخدام Scan أو For أو Do while
ولكن باستخدام Sql Update يختلف الوضع بشكل كبير من ناحية السرعة خاصة لو تكلمنا عن آلاف السجلات
هذا بالاضافة لاختصار الكود بجملة واحدة وهي على سبيل المثال
UPDATE B_Table SET Salary=A_Table.Salary FROM A_Table WHERE B_Table.EmpId =A_Table.EmpId
جرب المثالين التاليين وانظر لفرق السرعة الذي سيظهر على الشاشة
مثال SQL UPDATE
*SQL UPDATE CLOSE DATABASES ALL CREATE CURSOR A_Table (EmpId i, EmpName c(30) , Salary N(20,3)) FOR i = 1 TO 100000 INSERT INTO A_Table VALUES(i, "EmpName "+TRANSFORM(i), i*753) ENDFOR INDEX ON EmpId TAG EmpId CREATE CURSOR B_Table (EmpId i, EmpName c(30) , Salary N(20,3)) FOR i = 1 TO 3000 INSERT INTO B_Table VALUES(i, "EmpName "+TRANSFORM(i), 0) ENDFOR INDEX ON EmpId TAG EmpId a=SECONDS() UPDATE B_Table SET Salary=A_Table.Salary FROM A_Table WHERE B_Table.EmpId =A_Table.EmpId ?SECONDS()-a RETURN
والتالي نفس المثال مع تطبيق Do While
CLOSE DATABASES ALL CREATE CURSOR A_Table (EmpId i, EmpName c(30) , Salary N(20,3)) FOR i = 1 TO 100000 INSERT INTO A_Table VALUES(i, "EmpName "+TRANSFORM(i), i*753) ENDFOR INDEX ON EmpId TAG EmpId CREATE CURSOR B_Table (EmpId i, EmpName c(30) , Salary N(20,3)) FOR i = 1 TO 3000 INSERT INTO B_Table VALUES(i, "EmpName "+TRANSFORM(i), 0) ENDFOR INDEX ON EmpId TAG EmpId SELECT A_Table GO TOP a=SECONDS() DO WHILE !EOF() icode=EmpId SELECT B_Table SCAN FOR EmpId =icode REPLACE Salary WITH A_Table.Salary ENDSCAN GO TOP SELECT A_Table SKIP ENDDO ?SECONDS()-a
أستغفر الله العظيم و أتوب إليه
شكراً للمتابعة معناً وعلى الافكار الجميلة
واتمنى التوفيق لك ولامثالك
تحياتي للجميع
اذا كان السوال لي فانا لا ادقق خلفك لثقتي العمياء بك انك كدها في البرمجة والعمل جميل جداً ولايحتاج التنفيذ فقط من قراءة الايعاز شي حلو بارك الله فيك واتمنى ان تتابع المنتدى خلال هذا الشهر لضرف خاص بالامتحانات النهائية
وستكون متابعتي شبة منعدمة وتحياتي للجميع
العفو عزيزي فراس وموفق بالامتحانات ان شاء الله
وان شاء الله اتابع ما أمكن ( حسب الظروف والوقت )
بالتوفيق :)
أستغفر الله العظيم و أتوب إليه
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…