PDA

View Full Version : سوال: درست کردن Dynamic Table(فوری)



AmirAlimadadi
دوشنبه 17 تیر 1387, 13:15 عصر
سلام دوستان
من می خوام توی یه برنامه، یه جدول داشته باشم که تعداد فیلدهاش توی هر اجرا ممکنه متفاوت باشه، البته توی برنامه من می تونم فیلدها رو پیدا کنم، راه حلی که به نظر خودم رسید به دو شکل زیر است:
1- یه جدول از قبل درست کنم و بعد از پیدا شدن فیلدها، اون رو modi stru کنم، در این صورت چطور می شه این کار رو با برنامه نویسی انجام داد.
2-فیلدها رو پیدا کنم و توی یه جدول دیگه و یا مثلا یه آرایه بریزم،بعد این جدول و یا آرایه رو از اول تا آخر بخونم و با مقدار اونها create table کنم، که باز هم نمی دونم با برنامه نویسی چطور می شه این کار رو کرد.
البته باید یه چیزی رو هم بگم، نام این فیلدها به صورت فارسی هست، چطور می شه اونها رو به عنوان نام فیلد یه جدول در نظر گرفت
دوستان اگه ممکنه فوری جواب رو به من بدین که خیلی واجبه،ممنون

rahro
دوشنبه 17 تیر 1387, 13:34 عصر
سلام دوستان
من می خوام توی یه برنامه، یه جدول داشته باشم که تعداد فیلدهاش توی هر اجرا ممکنه متفاوت باشه، البته توی برنامه من می تونم فیلدها رو پیدا کنم، راه حلی که به نظر خودم رسید به دو شکل زیر است:
1- یه جدول از قبل درست کنم و بعد از پیدا شدن فیلدها، اون رو modi stru کنم، در این صورت چطور می شه این کار رو با برنامه نویسی انجام داد.
2-فیلدها رو پیدا کنم و توی یه جدول دیگه و یا مثلا یه آرایه بریزم،بعد این جدول و یا آرایه رو از اول تا آخر بخونم و با مقدار اونها create table کنم، که باز هم نمی دونم با برنامه نویسی چطور می شه این کار رو کرد.
البته باید یه چیزی رو هم بگم، نام این فیلدها به صورت فارسی هست، چطور می شه اونها رو به عنوان نام فیلد یه جدول در نظر گرفت
دوستان اگه ممکنه فوری جواب رو به من بدین که خیلی واجبه،ممنون
سلام
تا آنجايي كه من از مطالب شما دستگيرم شد , اگر از فرامين SQL خود فاكس استفاده كني مشكلت حله اما به اين صورت كه ابتدا كل دستور رو طراحي كني بعد با عملگرها اون رو اجرا كني . اميدوارم متوجه شده باشي.

AmirAlimadadi
دوشنبه 17 تیر 1387, 13:46 عصر
سلام
تا آنجايي كه من از مطالب شما دستگيرم شد , اگر از فرامين SQL خود فاكس استفاده كني مشكلت حله اما به اين صورت كه ابتدا كل دستور رو طراحي كني بعد با عملگرها اون رو اجرا كني . اميدوارم متوجه شده باشي.

سلام دوست عزیز،
مشکل من در برنامه پیچیده است، بنابراین به صورت خیلی ساده اگه بگم، شما تصور بکن که می خوام یه برنامه داشته باشم که یه تعداد (نامعلوم بسته به نظر کاربر)، اسم از کاربر بگیره، بعد یه جدول درست کنه که اسم فیلدهاش (ستون ها) برابر اون اسامی باشه که کاربر وارد کرده، فقط ممکنه که این اسمها فارسی باشه، در مورد این sql هم اگه ممکنه بیشتر توضیح بدین(اگه مثال داشته باشه که خیلی بهتره). ممنون

rahro
دوشنبه 17 تیر 1387, 14:16 عصر
سلام دوست عزیز،
مشکل من در برنامه پیچیده است، بنابراین به صورت خیلی ساده اگه بگم، شما تصور بکن که می خوام یه برنامه داشته باشم که یه تعداد (نامعلوم بسته به نظر کاربر)، اسم از کاربر بگیره، بعد یه جدول درست کنه که اسم فیلدهاش (ستون ها) برابر اون اسامی باشه که کاربر وارد کرده، فقط ممکنه که این اسمها فارسی باشه، در مورد این sql هم اگه ممکنه بیشتر توضیح بدین(اگه مثال داشته باشه که خیلی بهتره). ممنون
اولا به نظر منطقي نمياد كه به تعداد دلخواه كاربر شما فيلد ايجاد كنيد .
به هر حال شما ميتونيد اين اسامي رو از كاربر اخد كني و در يك آرايه ذخيره كني و بوسيله فرمان create table اقدام به ايجاد جدول خود كني البته همانطور كه عرض كردم در ابتدا بايد كل دستور رو طراحي كني و با عملگرها اين عمل رو انجام دهي .
مثلا":

dbfname=SYS(2015)
LOCAL fildn as Character
FOR i=1 TO ALEN(arrname,1)
fildn=fildn+ALLTRIM(arrname[i])+' C(30) as fld'+ALLTRIM(STR(i))
IF i<> ALEN(arrname,1)
fildn=fildn+','
ENDIF
ENDFOR
fildn=dbfname+' ('+fildn+')'
create TABLE &fildn

در مثال فوق arrname نام آرايه ايست كه كاربر اسامي رو در آن وارد كرده و C(30 يعني اينكه از نوع كاركتري باشه و اندازه آن 30 كه مي توانيد به دلخواه تغييرش دهيد و AS هم رو هم براي اين استفاده كردم كه كاربر هر نامي انتخاب كرد نام فيلد شما دستخوش تغيير خاصي نشه و در آينده بتواني روي آن مانور انجام دهي .
اين كد رو سريع نوشتم و تست نكردم كه صد در صد جواب ميده فقط خواستم روش كار را رسانده باشم .

AmirAlimadadi
دوشنبه 17 تیر 1387, 15:50 عصر
اولا به نظر منطقي نمياد كه به تعداد دلخواه كاربر شما فيلد ايجاد كنيد .
به هر حال شما ميتونيد اين اسامي رو از كاربر اخد كني و در يك آرايه ذخيره كني و بوسيله فرمان create table اقدام به ايجاد جدول خود كني البته همانطور كه عرض كردم در ابتدا بايد كل دستور رو طراحي كني و با عملگرها اين عمل رو انجام دهي .
مثلا":

dbfname=SYS(2015)
LOCAL fildn as Character
FOR i=1 TO ALEN(arrname,1)
fildn=fildn+ALLTRIM(arrname[i])+' C(30) as fld'+ALLTRIM(STR(i))
IF i<> ALEN(arrname,1)
fildn=fildn+','
ENDIF
ENDFOR
fildn=dbfname+' ('+fildn+')'
create TABLE &fildn

در مثال فوق arrname نام آرايه ايست كه كاربر اسامي رو در آن وارد كرده و C(30 يعني اينكه از نوع كاركتري باشه و اندازه آن 30 كه مي توانيد به دلخواه تغييرش دهيد و AS هم رو هم براي اين استفاده كردم كه كاربر هر نامي انتخاب كرد نام فيلد شما دستخوش تغيير خاصي نشه و در آينده بتواني روي آن مانور انجام دهي .
اين كد رو سريع نوشتم و تست نكردم كه صد در صد جواب ميده فقط خواستم روش كار را رسانده باشم .

سلام
از راهنمایی شما ممنون، ولی من یه مشکلی که دارم اینه که می خوام اسم فیلدها (ستون ها ) فارسی باشه، چطور می شه این کار رو انجام داد

IC_prog
دوشنبه 17 تیر 1387, 16:06 عصر
پاسخ 1
اضافه کردن فیلد به dbf :
alter tabel tabelname fieldname fieldtype
جهت اطلاعات بیشتر در help مطالعه کنید.

rahro
سه شنبه 18 تیر 1387, 07:24 صبح
سلام
از راهنمایی شما ممنون، ولی من یه مشکلی که دارم اینه که می خوام اسم فیلدها (ستون ها ) فارسی باشه، چطور می شه این کار رو انجام داد
سلام
خوب از سوئيچ As استفاده نكن
به عنوان مثال :

dbfname=SYS(2015)
LOCAL fildn as Character
FOR i=1 TO ALEN(arrname,1)
fildn=fildn+ALLTRIM(arrname[i])+' C(30)'
IF i<> ALEN(arrname,1)
fildn=fildn+','
ENDIF
ENDFOR
fildn=dbfname+' ('+fildn+')'
create TABLE &fildn
البته به اين ترتيب فكر كنم رو آدرس دهي به مشكل بر بخوري . شايد اگر از اين كد بعد براي پر كردن فيلد فارسي استفاده كني به مشكل كمتري بربخوري .

nfild=ALLTRIM(FIELD(4))
REPLACE &nfild WITH 'ali rahro'
كه Field(4)‌ منظور چهارمين فيلد جدول مورد نظر است كه ميشه آنرو از آرايه اي كه در فوق تعريف كرديد نيز بدست آورد.