PDA

نسخه کامل مشاهده نسخه کامل : آموزش و سوالات مربوط به استفاده از دستورات Sql در دلفی



صفحه ها : [1] 2

F A R H A D
24-09-2007, 11:00
سلام
در این تاپیک میخوام آموزشهای مربوط به استفاده از دستورات SQL در دلفی رو بذارم.
به چند دلیل:
- برای استفاده از اکثر دستورات sql نوع دیتابیس مورد استفاده در پروژه مهم نیست (paradox,ado,interbase,…)
- بیشتر مشکلاتی که در این تالار مطرح شدند رو میشه با استفاده از دستورات sql خیلی راحت تر حل کرد
- Sql در زبانهای برنامه نویسی دیگه هم قابل استفاده هست پس یادگیری اون لازمه

چند نکته برای شروع:
- آموزشها از مبتدی شروع میشه و در ادامه به دستورات پیچیده می رسیم (پس پروفشنال ها شاکی نشن)
- در تمام آموزشها فرض بر این هست که دوستان در ارتباط دادن پایگاه داده با برنامه کاربردی مشکلی ندارند
- دستورات sql به حروف کوچک و بزرگ حساس نیستند (select با SELECT فرقی ندارند)
- تمامی دستوراتی که در اینجا گفته میشه، تست شده هست
- دستورات در کامپوننت های ADO به کار گرفته میشه

امیدوارم مورد توجه قرار بگیره و با همکاری اساتید گرامی به حل مشکلاتی که برای دوستان عزیزمون پیش میاد کمک کنیم.
پیروز باشید


مقاله مربوط به اين آموزشها، تا پست #170 را از لينك زير دريافت كنيد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
24-09-2007, 11:01
قبل از هر چیز مقدمه ای بر SQL (Structured Query Language):
SQL زبان پرس و جویی هست که توسط ANSI (American National Standards Institute) استاندارد شده و برای دستکاری دیتابیس ها، بازیابی و update داده ها در بانک های اطلاعاتی مفید می باشد.
SQL در دیتابیسهای MS Access, Paradox, DB2, Informix, MS SQL Server, My SQL, Oracle, Sybase و غیره استفاده میشود.
متاسفانه ورژن های مختلفی از این زبان وجود دارد (SQL/PSM, SQL PL, T-SQL, MySQL, PL/SQL, PL/pgSQL , ...) اما برای اینکه همه آنها با استاندارد ANSI سازگاری داشته باشند باید از کلمات کلیدی یکسان در استفاده های مشابه پشتیبانی کنند. (مانند SELECT, UPDATE, DELETE, INSERT, WHERE و غیره)

چرا SQL ؟
SQL زبان پرس و جوی ساخت یافته است
SQL به شما اجازه میدهد تا به آسانی به دیتابیس ها دسترسی داشته باشید
SQL میتواند برای دیتابیس ها پرس و جو ایجاد کند
SQL میتواند داده ها را از دیتابیس بازیابی کند
SQL میتواند رکورد جدیدی در دیتابیس درج کند
SQL میتواند رکوردی را از دیتابیس حذف کند
SQL میتواند رکوردهای دیتابیس را به روز کند
SQL برای یادگیری آسان است

منابع:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
24-09-2007, 11:03
اولین دستوری رو که میخوام بگم دستور select هست.
شکل کلی دستور:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
فرض کنید جدولی با نام inventory مربوط به مشخصات کالا داریم که دارای فیلدهای no , name , cost , color , weight هست.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمامی فیلدهای مربوط به ستون name,cost رو به ما نشون میده
حالا اگر بخوایم که تمامی فیلدها رو ببینیم نیازی نیست که نام همه فیلدها رو بنویسیم، کافیه به جای نام فیلدها " * " رو قرار بدیم. به صورت زیر:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا این دستورات رو چطور در دلفی استفاده کنیم؟ از تب ADO یه کامپوننت ADOQuery به فرم اضافه کنید و کد رو در یه button به صورت زیر بنویسید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سوالی که اینجا هست اینه که چطور نتایج دلخواه رو بر اساس یه مقدار متغیر نمایش بدیم؟ برای این کار باید از دستور where استفاده کرد.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در قسمت condition میتونیم از شرط های مختلف استفاده کنیم
فرض کنید در همون جدول مشخصات کالا میخوایم کالاهایی که نام اونها در یک edit نوشته میشه رو نمایش بدیم:

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

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
<> به معنای نا مساوی هست.
همچنین میتونید از عملگرهای منطقی AND و OR برای پیاده سازیهای مختلف استفاده کنید.
موفق باشید

F A R H A D
24-09-2007, 11:04
دستور دیگه ای که کاربرد زیادی درselect داره ORDER BY هست که برای مرتب سازی نتایج بر اساس یه فیلد خاص استفاده میشه.
شکل کلی دستور:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توجه: اگر به جای * از نام فیلد استفاده کنید، مرتب سازی باید بر اساس فیلدی باشه که در نتیجه هم نمایش داده میشه.
میشه در قسمت order by از نام چند فیلد استفاده کرد. مزیت این کار این هست که اگر در فیلد اولی دو مقدار یکسان وجود داشته باشه، همون مقادیر بر اساس فیلد دیگه ای هم مرتب میشن.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در اینجا اگر دو کالا با نام یکسان وجود داشته باشه، بر اساس وزن مرتب میشن
بعد از نام ستونها در قسمت order by اگر DESC رو قرار بدین، نتایج به صورت نزولی مرتب میشن و در صورتی که ASC قرار داشته باشه به صورت صعودی. حالت پیش فرض در زمانی که شما حالت مرتب سازی رو مشخص نکنین، صعودی هست.

برای ادامه کار منتظر نظرات دوستان هستم.
موفق باشید.

romixery
24-09-2007, 11:23
دست درد نكنه فرهاد جون. ديگه منتظره چي هستي
خيلي عاليه. خيلي.
مطمئن باش اگه همينجوري پيش بري نه تنها من بلكه خيلي هاي ديگه تا آخرش باهات هستن. پس ادامه بده.
موفق باشي:11::40::11::40::10::31:

sara_program
24-09-2007, 11:32
ممنون . منم تا آخرش با شما هستم .

مرد مباح
24-09-2007, 15:33
فرهاد جان.
از شما خیلی مننونم. این فرامین خیلی جاها کمک میکنه و من یکی که خیلی دوست دارم کاملش کنی.
ضمنا برای اطلاع دوستان عرض کنم که همه فرامینی که در SQL ایتفاده میشه رو میتونین خودتون در دلفی بنویسین ولی بسته به کارتون شاید ناچار بشین 15-20 خط کد بنویسید ولی این کارها با فرامین SQL بسیار راحتتر میشه.
البته من خودم در مورد فیلترکردن اطلاعات خاص بیشتر از خاصیت Filter خود دلفی استفاده میکنم که اون هم یک جوریی به SQL لینک هست.

به هر حال بسیا ممنونم و کماکان منتظر ادامه مباحث شما.

F A R H A D
24-09-2007, 20:54
تشکر از همه دوستان.
خوب برگردیم سر ادامه آموزشها:
برای اینکه دستورات رو بهتر متوجه بشین، مثالها رو با همون جدول inventory که در اولین آموزش گفتم پیگیری میکنم.
فرض کنید شما میخواین تمام مقادیر بین دو مقدار مشخص رو داشته باشین. مثلا مقادیری که وزن اونها از 15 بیشتر و از 75 کمتر باشه. با توجه به آموزشهایی که تا حالا گفته شده با استفاده از where و عملگر and میشه این کار رو به صورت زیر انجام داد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما یه راه دیگه هم هست. میتونین به جای نوشتن شرط های مختلف از between استفاده کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد بالا مشخصات تمام کالاهایی رو برمیگردونه که وزن اونها بین 15 و 75 هست.

F A R H A D
24-09-2007, 20:55
بعضی وقتها پیش میاد که چند مقدار خاص از یه فیلد رو میخوایم. باید از 5 یا 6 شرط مختلف استفاده کرد؟
جواب منفیه. شما میتونین از گزینه in در دستور select استفاده کنین (فرض کنید دنبال کالاهایی هستیم که رنگ اونها قرمز، سفید، آبی و سبز هست):

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تا به زودی
پیروز باشید

soha996
25-09-2007, 13:37
سلام فرهاد عزيز
اگه بدوووني چقدر دنبال همچين تاپيكي بووودم و با ديدنش چقدر ذوق كردم............... واقعا لازم بووووود ....دست شما درد نكنه ...اميدوارم تو كاري كه شروع كردي موفق باشي!!!!!!!!!!!!

F A R H A D
25-09-2007, 14:03
سلام دوباره و ممنون از لطفی که دارید. ظاهرا که تا اینجای کار دوستان مشکل خاصی ندارند، امیدوارم که استفاده کرده باشین.
توی پست قبلی یادم رفت که در مورد between , in یه توضیح بدم که چطور میشه مقدار مورد جستجو رو از کاربر دریافت کنن.
اگر قرار باشه کاربر از edit استفاده کنه و مقادیر مورد نظر رو وارد کنه، در اکثر دستورات sql مقادیر متنی حتما باید بین "" قرار بگیره ("متغیر") ولی برای مقادیر عددی نیازی به " " نیست.
مثال برای between زمانی که در فیلد عددی جستجو میکنیم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مثال برای in زمانی که در فیلد متنی (رشته) جستجو میکنیم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه داشته باشید که برعکس where که به تعریف پارامتر نیاز بود، اینجا نیازی به اینکار نیست و فقط کافیه متغیر رو بین دستورات به شکل صحیح جا بدیم.

توجه: در دستور in فرقی نداره که مقدار عددی باشه یا رشته، حتما از پرانتز استفاده کنید.

تا اینجا اگر سوالی هست در خدمتم، وگرنه ادامه آموزشها...
پیروز باشید

F A R H A D
26-09-2007, 12:59
سلام دوباره. خوشبختانه تا اینجا که ظاهرا مشکلی نیست. پس ادامه:
در حالت عادی وقتی که از query ها استفاده میشه title مربوط به dbgrid نام فیلدهایی هست که در دستورات sql استفاده شده و معمولا به زبان انگلیسی هست. پس تکلیف برنامه های ما که به زبان فارسی هست چیه؟
برای حل این مشکل میتونید از Alias استفاده کنید. شکل کلی دستور به صورت زیر هست:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا میخوایم که نتایج در dbgrid به صورتی نشون داده شه که دو فیلد name,color انتخاب شه و title مربوط به اونها "نام و رنگ" باشه:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حتی اگر نام جدول هم خیلی طولانی هست و شما رو کلافه کرده میتونید از Alias به همین صورت که توضیح داده شده برای کوتاه کردن نام جدول استفاده کنید و جدول رو با نام دلخواه در برنامه خودتون به کار بگیرید.

سوال؟ نظر؟ مشکل؟
پیروز باشید

F A R H A D
27-09-2007, 13:52
تا حالا پیش اومده که بخواین تمام مقادیر یک فیلد رو توی combobox یا یه جدول دیگه داشته باشین؟ اگر همچین موردی بوده حتما میدونید که تمام مقادیر تکراری موجود در فیلد، در نتیجه حاصل هست. ممکنه چندین مقدار تکراری در یک فیلد وجود داشته باشه و بی دلیل به لیست مورد نظر شما اضافه شده باشه. راه حل این مشکل استفاده از DISTINCT در SQL هست.
شکل کلی دستور به صورت زیر هست:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

به طور کلی این مورد به شما کمک میکنه مقادیر منحصر به فرد یک فیلد رو داشته باشید.
فرض کنید لیست کالاهای موجود در جدول نمونه رو میخوایم تا بدونیم که چه کالاهایی موجود هست، مطمئنا نیازی به نام های تکراری نداریم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پیروز باشید

romixery
27-09-2007, 16:47
عاليه فرهاد جان. عالي:40::11:
اگه مي توني طرز استفاده و كاربرد دستور Like رو هم بگو چون خيلي مي خوام بدونم.
موفق باشي
باي:10:

F A R H A D
28-09-2007, 07:53
سلام
یکی دیگه از دستوراتی که زمان جستجو خیلی کارآمد هست، دستور LIKE هست که به همراه where استفاده میشه. این دستور برای زمانی هست که ما به دنبال تمام مقادیری هستیم که با یک یا چند حرف مشخص شروع میشه و یا تمام میشه، و یا حتی این چند حرف میتونه جزیی از نتیجه باشه.

شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در قسمت pattern مشخص میکنیم که نتیجه حاصل بر چه اساسی باشه.
به مثال توجه کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

فرض میکنیم که مقادیر فیلد name قطعات سخت افزاری هستند. در مثال بالا اگر در edit1 مقدار "مانیتور" وارد شه، تمام مقادیری که با "مانیتور" شروع شده مثل "مانیتور Samsung، مانیتور LG ، مانیتور BenQ و ..." به نمایش در میاد.
با کمی خلاقیت اگر این کد رو در رویداد OnChange یک ادیت قرار بدیم با تایپ اولین حرف مثلا "م" تمام مقادیر "مانیتور، ماوس، مادر بورد" و بقیه مقادیری که با "م" شروع میشه به نمایش در میاد.

اگر به محل کاربرد "%" دقت کنید، خودتون میتونید شرط هایی که با نیاز شما سازگارتر هستند بنویسید.

پیروز باشید.

DrXoX
28-09-2007, 08:06
سلام
فرهاد جان عاليه
موفق باشي

MasterData
28-09-2007, 10:08
شايد تمام اين مطالب رو توي کتابها هم پيدا کنيد
ولي چيزي که توي اين آموزش ها هست تفهيم کامل نوع استفاده از دستورات و مثالهايي هست که بيان شده
خيلي جالب گفته شده , اين فرهاد بدرد ميخوره بره تدريس کنه

romixery
28-09-2007, 10:35
موافقم. بايد بره تدريس كنه
دست درد نكنه فرهاد جان

F A R H A D
28-09-2007, 18:21
خب دیگه ... من رفتم تدریس کنم! حلال کنید دیگه. از بیکاری هم در میام...
.
.
.
.
چرا خوشحال شدین؟ بر گشتم بابا شوخی بود!

نکته ای که فراموش کردم در مورد select بگم اینه که select میتونه اطلاعات چند جدول رو با هم در یک query به شما نمایش بده. پس شما میتونید اطلاعاتی رو که میخواین از دو یا چند جدول انتخاب کنید.
این کار به JOIN معروف هست.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کاربرد join در جداول master/detail بیشتر هست که جدولها بر اساس یک فیلد کلید با هم ارتباط دارند. فرض کنید در همین جدول inventory فیلد no مربوط به کد کالا، کلید هست. و جدول دیگه ای هم وجود داره به نام جدول orders که سفارش اشخاص بر اساس کد کالا در اون ذخیره میشه (پس فیلد no که در inventory کلید اصلی هست، در orders به عنوان کلید خارجی استفاده میشه) فیلدهای جدول orders میتونه "person_id(کلید اصلی) – no – fname – lname " باشه.

حالا ما میخوایم ببینیم چه افرادی چه کالاهایی رو سفارش دادند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

نتیحه حاصل شامل نام و نام خانوادگی اشخاص از جدول orders و نام کالا از جدول inventory هست.

پیروز باشید

MohammadJavad.T
29-09-2007, 03:44
سلام دوست عزیز خیلی عالی
لطفا ادامه بدید

DrXoX
29-09-2007, 04:11
سلام

پيشنهاد به آقا فرهاد:

برايJoin كردن اگه Left Join ، Right Join , Inner Join رو هم بگيد خوبه

F A R H A D
29-09-2007, 13:10
سلام

پيشنهاد به آقا فرهاد:

برايJoin كردن اگه Left Join ، Right Join , Inner Join رو هم بگيد خوبه

سلام
همونطور که DrXoX عزیز هم گفته، JOIN در sql موارد INNER JOIN , LEFT JOIN , RIGHT JOIN رو داره که توضیح میدم:
شکل کلی دستور در INNER JOIN :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شکل کلی دستور در LEFT JOIN :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

شکل کلی دستور در RIGHT JOIN :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

مثال برای Inner Join :

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تفاوت inner , left , right :

در Inner join تمام رکوردهای دو جدول، هر جا که شرط مطابقت داشته باشه نمایش داده میشه و اگر در جدول اول رکوردی وجود داشته باشه که با هیچ رکوردی از جدول دوم مطابقت نداشته باشه، در نتیجه نهایی نمایش داده نمیشه.
در Left join تمام رکوردها از جدول اول نمایش داده میشه، حتی اگر با هیچ رکوردی از جدول دوم مطابقت نداشته باشه.
Right join برعکس left join عمل میکنه و تمام رکوردهای جدول دوم رو نمایش میده، حتی اگر با هم مطابقت نداشته باشند.

با روش آزمون و خطا و مثالهای مختلف میتونین دقیقا متوجه شین که کار این دستورات چی هست.
پیروز باشید

DrXoX
29-09-2007, 22:10
دستت درد نكنه خيلي عالي بود:10:

مرد مباح
29-09-2007, 22:33
دوست عزیز.
من متوجه نشدم.
چرا یاید از Left Join یا Right Join استفاده کرد.
چون اینجوری که انگار فقط یکی از تیبلها رو فراخوانی کردیم و اونوفق Join کجاست ؟

MasterData
29-09-2007, 23:18
دوست عزیز.
من متوجه نشدم.
چرا یاید از Left Join یا Right Join استفاده کرد.
چون اینجوری که انگار فقط یکی از تیبلها رو فراخوانی کردیم و اونوفق Join کجاست ؟

با اجازه استاد
هنگامي از inner join استفاده مي کنيم که کليد در هر دو جدول مقدار داشته باشد و فقط در اين صورت رکوردهاي متناظر با هم Join مي شوند اما در Left Join يا Right Join يکي از جدولهاي چپ يا راست فقط کافي است حاوي شرط تلفيق باشد (خيلي خلاصه گفتم)

F A R H A D
30-09-2007, 00:23
با تشکر از MasterData عزیز.
با مثال توضیح میدم:
زمانی که از inner join استفاده میشه تمام رکوردهایی لیست میشه که با شرط ما مطابقت داشته باشه. یعنی در جدول orders کالایی سفارش داده شده که در جدول inventory موجود هست.
اگر از left join استفاده کنیم علاوه بر لیست شدن رکوردهایی که با شرط مطابقت دارند، بقیه رکوردهای جدول اول هم در نتیجه نهایی هست. یعنی کالاهایی که کسی اونها رو سفارش نداده.
و در صورتی که از right join استفاده کنیم، باز هم علاوه بر لیست شدن رکوردهایی که با شرط مطابقت دارند، بقیه رکوردهای جدول دوم هم در نتیجه نهایی هست. یعنی سفارشاتی که کالای مورد سفارش در جدول inventory معرفی نشده.

پیروز باشید

DrXoX
30-09-2007, 02:22
مثال فرهاد جان کاملا درسته
برای درک بهتر مطلب شکل زیر فکر کنم خوب باشه


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

F A R H A D
30-09-2007, 11:04
DrXoX عزیز مثال خیلی خوبی هست و برای درک کامل مطلب کمک زیادی میکنه.
مر30 به خاطر همکاری دوستان عزیز

F A R H A D
30-09-2007, 11:06
یکی دیگه از توابعی که میتونه مفید باشه IS NULL هست.
این تابع زمانی کاربرد داره که شما میخوای تمام فیلدهای null (خالی) رو پیدا کنی.

شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کد زیر تمام رکوردهایی رو برمیگردونه که فیلد name اونها خالی هست:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توجه کنید که null با space (" ") تفاوت داره.

اگر خواستید رکوردهای پر شده رو پیدا کنید، دستور رو به صورت زیر تغییر بدید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پیروز باشید

مرد مباح
01-10-2007, 13:08
دوستان.
من نتوستم فرق "" با Null رو پیدا کنم ولی در بعضی مسائل تفاوت دارند.
میشه لطفا توضیح بدید ؟

F A R H A D
01-10-2007, 15:18
دوستان.
من نتوستم فرق "" با Null رو پیدا کنم ولی در بعضی مسائل تفاوت دارند.
میشه لطفا توضیح بدید ؟

منظور از " " ، کاراکتر فضای خالی هست که با فشردن کلید space کیبورد ایجاد میشه. یعنی اگر فیلدی در ظاهر خالی باشه ولی این کاراکتر در اون وجود داشته باشه، به عنوان null شناخته نمیشه.
null مربوط به زمانی هست که هیچ کاراکتری در فیلد وجود نداره.

hp1361
01-10-2007, 15:36
سلام

دوستان اگه ممکنه طریقه اتصال به بانک رو هم توضیح بدین .

اینکه بانکمون کجا باید باشه ، تو پوشه برنامه یا پوشه پیش فرض Sqlserver .

اینکه در سیستم کاربر باید Sqr نصب بشه یا نه و تکلیف محل بانک در سیستم کاربر چیه

ممنون میشم راهنمایی بفرمایید .

اخه برای شروع نوشتن اولین برنامه که بخواهد با بانک Sqlserver (حتما این بانک )کار کنه باید اول به بانک متصل بشم و ....

بام ممنون و منتظرم

DrXoX
01-10-2007, 16:04
سلام

دوستان اگه ممکنه طریقه اتصال به بانک رو هم توضیح بدین .

اینکه بانکمون کجا باید باشه ، تو پوشه برنامه یا پوشه پیش فرض Sqlserver .

اینکه در سیستم کاربر باید Sqr نصب بشه یا نه و تکلیف محل بانک در سیستم کاربر چیه

ممنون میشم راهنمایی بفرمایید .

اخه برای شروع نوشتن اولین برنامه که بخواهد با بانک Sqlserver (حتما این بانک )کار کنه باید اول به بانک متصل بشم و ....

بام ممنون و منتظرم

سلام

جواب سوال 1:

طریقه اتصال به SqlServer در دلفی بسیار ساده می باشد مراحل زیر را به ترتیب انجام بده

1 - قرار دادن یک AdoConnection از تب ADO روی فرم یا روی Data Module

2- مقدار خاصیت LoginPrompt را به False تغییر یده ( این خاصیت برای موقعی که دیتابیس دارای پسورد باشه باید True باشه )

3- روی ... خاصیت ConnectionString کلیک کنید سپس روی Build

4- در پنجره ظاهر شده روی Microsoft OLE DB Provider for SQL Server کلیک کن بعد Next رو بزن

5- در پنجره بعد، با قسمت 1 کاری نداشته باشید ، در قسمت2 Use Windows NT Integrated security رو انتخاب کنید

6- در قسمت 3 نیز Select the database on the server در ComboBox زیر این گزینه باید نام دیتابیس خود که در SQLServer ساخته اید را انتخاب کنید

7- بعد از Ok کردن پنجره ها ، خاصیت Connected مربوط به ADOconnection را True کنید

جواب سوال 2:
در سیستم کاربر هم باید SQL نصب باشه ولی یه راهی وجود داره که نیازی به نصب SQL روی سیستم کاربر نیست و اون استفاده از نرم افزار Setup ساز Install Sheild هستش

برای دیتابیس هم ، شما برای این که آن را به یک سیستم دیگر انتقال بدین باید از دیتابیس بک آپ بگیرید و در سیستم مورد نظرتون در SQL ، دیتابیس رو Restore کنید

F A R H A D
02-10-2007, 10:00
سلام

دوستان اگه ممکنه طریقه اتصال به بانک رو هم توضیح بدین .

اینکه بانکمون کجا باید باشه ، تو پوشه برنامه یا پوشه پیش فرض Sqlserver .

اینکه در سیستم کاربر باید Sqr نصب بشه یا نه و تکلیف محل بانک در سیستم کاربر چیه

ممنون میشم راهنمایی بفرمایید .

اخه برای شروع نوشتن اولین برنامه که بخواهد با بانک Sqlserver (حتما این بانک )کار کنه باید اول به بانک متصل بشم و ....

بام ممنون و منتظرم

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


در تمام آموزشها فرض بر این هست که دوستان در ارتباط دادن پایگاه داده با برنامه کاربردی مشکلی ندارند

در اولین پست این تاپیک، این مطلب ذکر شده بود.
با تشکر
پیروز باشید

F A R H A D
02-10-2007, 10:03
استفاده از محاسبات ریاضی:
در حالت عادی و قتی که از table ها استفاده میشه، برای محاسبات روی تمام مقادیر یه فیلد، میومدیم و یه فیلد جدید از نوع calculate درست میکردیم و در OnCalcFields مربوط به جدول چند خط کد مینوشتیم. اینکار با استفاده از دستورات sql فوق العاده راحت هست.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

به جای قسمت <arithmatic operation> یه عبارت محاسباتی قرار میگیره.
به مثال توجه کنید (تمام مقادیر فیلد cost با 2000 جمع میشه و در ستون new_cost قرار میگیره):


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پیروز باشید

مرد مباح
02-10-2007, 10:11
البته یک سری کامپوننت هم وجود داره که به کمک اونا میتونی به صورت مستقیم به دیتابیست لینک بشی.

F A R H A D
03-10-2007, 10:35
Sql یه سری تابع خیلی مفید برای انجام عملیات روی فیلدها داره که میتونه خیلی مفید باشه. این توابع در دو دسته کلی قرار گرفته: Aggregate Functions و Scalar functions .

توابع Aggregate :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته 4 تا تابع دیگه هم هست که فکر میکنم مربوط به محاسبه واریانس و ... باشه. ریاضی دانها کمک کنند:



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

توی پست بعدی توابع Scalar رو توضیح میدم.
پیروز باشید

F A R H A D
03-10-2007, 23:59
توابع Scalar :
برعکس توابع Aggregate که بر روی تمام مقادیر فیلد عمل میکنه، این توابع مقادیر رو تک تک پردازش میکنه و نتیجه رو نمایش میده.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تبدیل کاراکترهای فیلد به حروف بزرگ (برای کاراکترهای a تا z)



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تبدیل کاراکترهای فیلد به حروف کوچک (برای کاراکترهای A تا Z)



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از محل start به میزان end کاراکتر از فیلد جدا کرده و نمایش میدهد (start و end اعداد صحیح هستند)



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
مشخص کردن طول رشته های فیلد



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمایش محل وقوع کاراکتر ch در فیلد



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
جدا کردن تعداد کاراکتر مشخص، از سمت چپ مقادیر فیلد



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
جدا کردن تعداد کاراکتر مشخص، از سمت راست مقادیر فیلد



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
رند کردن اعداد اعشاری و مشخص کردن دقت اعشار



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمایش تاریخ و زمان

سوالی بود در خدمتم.
پیروز باشید

F A R H A D
04-10-2007, 00:13
یادم رفت روش استفاده رو بگم.

شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یه مثال برای حاصل جمع فیلد:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

پیروز باشید

مرد مباح
04-10-2007, 12:12
فرهاد جان.
خروجی تابع بالا قاعدتا یک عدد هست. درسته ؟
اونوقت چطوری باید از اون توی برنامه استفاده کرد؟ اگه میشه یک توضیح کوچیک به ما بده.

ممنون.

F A R H A D
04-10-2007, 22:48
فرهاد جان.
خروجی تابع بالا قاعدتا یک عدد هست. درسته ؟
اونوقت چطوری باید از اون توی برنامه استفاده کرد؟ اگه میشه یک توضیح کوچیک به ما بده.

ممنون.

بله درسته. خروجی توابعی مثل max,min,first,count,avg,... یک عدد هست.
اگر در به کار بردن این توابع از نام مستعار استفاده کنید (استفاده از AS) به صورت زیر میتونید مقداری که query برمیگردونه رو داشته باشید (با table ها فرقی نداره):


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

روش دسترسی:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولی اگر نام مستعار به کار نبرید، با استفاده از شماره فیلد که از 0 شماره گذاری میشه، میتونید به مقدار فیلد دسترسی داشته باشید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

روش دسترسی:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشی

hp1361
06-10-2007, 01:27
سلام
دوستان من يه جدولي دارم كه شامل 10ستون است . ستون اول كد معين سرويس ها ميباشد . در اين جدول ركورد هايي ذخيره ميشوند كه داراي كد معين تكراري هستند .

من ميخواهم ابتدا ركوردهارو به تاريخ معيني ***** كنم و بعدش در بين اين ركوردهاي ***** شده ركوردهايي كه داراي كد معين يكساني هستند مقدار فيلهاشون با هم جمع بشه (ستون ها با هم جمع بشن )و دست آخر از هر كد معين يك ركورد داشته باشيم .

نوع جدولم فرقي نميكنه Paradox يا Access يا SQLSERVER

ممنون و منتظرم

F A R H A D
06-10-2007, 11:13
سلام
دوستان من يه جدولي دارم كه شامل 10ستون است . ستون اول كد معين سرويس ها ميباشد . در اين جدول ركورد هايي ذخيره ميشوند كه داراي كد معين تكراري هستند .

من ميخواهم ابتدا ركوردهارو به تاريخ معيني ***** كنم و بعدش در بين اين ركوردهاي ***** شده ركوردهايي كه داراي كد معين يكساني هستند مقدار فيلهاشون با هم جمع بشه (ستون ها با هم جمع بشن )و دست آخر از هر كد معين يك ركورد داشته باشيم .

نوع جدولم فرقي نميكنه Paradox يا Access يا SQLSERVER

ممنون و منتظرم

جستجو بر اساس تاریخ به این بستگی داره که شما تاریخ رو چطور ذخیره کردی. بیشتر توضیح بده.
برای تاریخی که به صورت رشته و بدون کاراکتر های "- و / و ..." ذخیره شده، از کد زیر میتونی استفاده کنی. Date_field فیلد تاریخ هست، field1 فیلد کد مورد نظر و field2 فیلدی که مقادیر عددی داره.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در کد بالا از group by استفاده کردم. آموزش کامل این دستور رو در پستهای بعدی میذارم.

موفق باشی

hp1361
06-10-2007, 15:02
سلام

دوست عزیز تاریخ از نوع 01/01/1386 و استرینگ هست .

در ضمن هر رکورد دارای 10 فیلد هست و من می خواهم رکوردهایی که دارای کد معین یکسان هستند (فیلد اولشون یکی هست ) با هم جمع بشن .

مثال : 20 تا رکورد داریم که هر 5 رکورد دارای یک کد معین هستند . این رکورد ها باید دست آخر چهار رکورد بشن که هر رکورد جمع پنج رکورد با کد معین برابر هست .(مشکلم اینه که از کجا بفهمم کدوم رکورد ها دارای کد معین برابر هستند تا با هم جمع بشن )

ممنون و منتظرم

F A R H A D
06-10-2007, 17:36
در مورد تاریخ نمیتونی اینطوری جستجو رو انجام بدی. کاراکترهای / که وجود دارند باعث میشه که جواب درستی رو برنگردونه.
در مورد قسمت دوم سوال، کدی که نوشتم خودش کارها رو انجام میده. تست نکردی؟

MasterData
06-10-2007, 21:03
سلام

دوست عزیز تاریخ از نوع 01/01/1386 و استرینگ هست .

در ضمن هر رکورد دارای 10 فیلد هست و من می خواهم رکوردهایی که دارای کد معین یکسان هستند (فیلد اولشون یکی هست ) با هم جمع بشن .

مثال : 20 تا رکورد داریم که هر 5 رکورد دارای یک کد معین هستند . این رکورد ها باید دست آخر چهار رکورد بشن که هر رکورد جمع پنج رکورد با کد معین برابر هست .(مشکلم اینه که از کجا بفهمم کدوم رکورد ها دارای کد معین برابر هستند تا با هم جمع بشن )

ممنون و منتظرم

میتونی از Group by استفاده کنی

hp1361
07-10-2007, 15:22
سلام

دوستان هر رکورد من 10 تا ستون داره اسم ستونهارو باید در قسمت Sum بنویسم؟

اگه بخواهم هر رکورد جمع فیلدهاش در یک فیلد دیگه در همون رکورد (فیلد جدید باشه ها) قرار بگیره چیکار کنم ؟

ممنون و منتظرم

MasterData
07-10-2007, 16:56
سلام

دوستان هر رکورد من 10 تا ستون داره اسم ستونهارو باید در قسمت Sum بنویسم؟

اگه بخواهم هر رکورد جمع فیلدهاش در یک فیلد دیگه در همون رکورد (فیلد جدید باشه ها) قرار بگیره چیکار کنم ؟

ممنون و منتظرم
شما میخوای ستون های یک رکورد رو جمع بزنی یا یک ستون از همه رکوردها؟
تگه میخوای مجموع ستونهای یک رکورد رو به عنوان یک ستون جدید داشته اشی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما اگه مبخوای یک ستون رو از چند روکورد جمع بزنی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
07-10-2007, 17:56
شما میخوای ستون های یک رکورد رو جمع بزنی یا یک ستون از همه رکوردها؟
تگه میخوای مجموع ستونهای یک رکورد رو به عنوان یک ستون جدید داشته اشی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اما اگه مبخوای یک ستون رو از چند روکورد جمع بزنی

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

کاملا درسته. فقط این نکته رو اضافه میکنم که اگر میخوای یک ستون رو جمع بزنی و بر اساس مقدار یکتا در فیلد دیگه نشون بدی، باید از group by استفاده کنی. نام فیلدی که در قسمت group by نوشته میشه، باید حتما در جلوی select هم اومده باشه.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

hp1361
08-10-2007, 15:29
سلام مجدد

کل قضیه رو از اول توضیح میدم

من یک جدول دارم که 22 تا ستون داره (1-کد سرویس 2- نام سرویس 3- تعدادیک 4- مبلغ یک 5- تعداد دو 6- مبلغ دو ....... 21-تعداد ده 22-مبلغ ده )

بین تاریخ فرضاً 1/1/86 لغایت 20/1/86 تعداد 100 رکورد داریم . در بین این رکورد ها رکوردهای تکراری که کد سرویسشون یکی باشه وجود داره (فرض بگیرین 10 رکورد با کد 1020 و 10 رکورد با کد 1030 ووو

حالا من میخوام با یه کوئری تنها 10 رکورد داشته باشم که هر رکورد جمع 10 رکورد ی باشه که کد سرویسشون یکیه و البته هر رکورد کد رویس و نام سرویسشو داشته باشه .

در آخر هم میخوام که این رکورد ها که هر کدوم جمع اون 10 رکورد با کد سرویس یکسان هستند یک فیلد جدید واسشون تعریف بشه که جمع فیلدهاش درش قرار بگیره .
لطف کنید این دستور رو واسه 22تا فیلد بنویسین نه یک فیلد

امیدوارم مبهم نگفته باشم

ممنون و منتظرم

F A R H A D
09-10-2007, 07:36
سلام مجدد

کل قضیه رو از اول توضیح میدم

من یک جدول دارم که 22 تا ستون داره (1-کد سرویس 2- نام سرویس 3- تعدادیک 4- مبلغ یک 5- تعداد دو 6- مبلغ دو ....... 21-تعداد ده 22-مبلغ ده )

بین تاریخ فرضاً 1/1/86 لغایت 20/1/86 تعداد 100 رکورد داریم . در بین این رکورد ها رکوردهای تکراری که کد سرویسشون یکی باشه وجود داره (فرض بگیرین 10 رکورد با کد 1020 و 10 رکورد با کد 1030 ووو

حالا من میخوام با یه کوئری تنها 10 رکورد داشته باشم که هر رکورد جمع 10 رکورد ی باشه که کد سرویسشون یکیه و البته هر رکورد کد رویس و نام سرویسشو داشته باشه .

در آخر هم میخوام که این رکورد ها که هر کدوم جمع اون 10 رکورد با کد سرویس یکسان هستند یک فیلد جدید واسشون تعریف بشه که جمع فیلدهاش درش قرار بگیره .
لطف کنید این دستور رو واسه 22تا فیلد بنویسین نه یک فیلد

امیدوارم مبهم نگفته باشم

ممنون و منتظرم

حالا تقریبا منظورتو فهمیدم و امیدوارم که همینطور باشه. ستونهای تعداد رو از T1 تا Tn و مبلغ رو از C1 تا Cn نامگذاری کردم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

خودت کد رو کامل کن.
اگر از خمون اول سوال هامون رو واضح بپرسیم، خیلی زودتر به جواب میرسیم.

موفق باشی

hp1361
09-10-2007, 14:19
سلام
دستت درد نکنه

راستی اون فیلد جدید که باید جمع فیلدهای اون رکورد های جمعی(ده تای آخر) درش قرار بگیره چی شد ؟

F A R H A D
09-10-2007, 18:17
سلام
دستت درد نکنه

راستی اون فیلد جدید که باید جمع فیلدهای اون رکورد های جمعی(ده تای آخر) درش قرار بگیره چی شد ؟

اگر به کدی که نوشتم توجه کنی، نوشتن این که میخوای کار سختی نیست.
موفق باشی

F A R H A D
09-10-2007, 18:24
توی این پست میخوام در مورد UNION توضیح بدم. این دستور برای انتخاب اطلاعات مربوط به هم از دو جدول هست، مثل Join .
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

- تعداد فیلدهایی که در دستورهای select قرار میگره باید برابر باشه
- نوع داده فیلدهایی که زیر هم قرار میگیرن باید یکی باشه

این دستور اطلاعاتی رو که از دو جدول بدست میاد به صورت یکتا (Distinct) و sort شده در یک ستون قرار میده.
اگر نیاز به انتخاب مقادیر تکراری باشه باید از UNION ALL استفاده کرد. شکل کلی دستور همونی هست که گفته شد، فقط به جای union از union all استفاده میشه و البته دیگه sort نمیشه.

تا به زودی
پیروز باشید

romixery
16-10-2007, 10:38
فرهاد جان سلام
مي گم اين آموزش شما خيلي خيلي عاليه. يه پيشنهاد دارم:
اگه مي تونستي اين آموزش رو به صورت PDF در بياري خيلي خيلي عالي بود. چون همه آموزش به صورت Pakage در ميومد و هركه واقعا خواهان بود اونو دانلود و ازش استفاده مي كرد. و مثلا در اين تاپيك به مشكلات و سوالات برو برچي كه SQL كار مي كردن مي رسيدي. اينطوري چطور بود؟
به هر حال اگه بتوني در آخر آموزشت نسخه PDF شدش رو هم بزاري خيلي ممنونتم.
موفق باشي
باي

F A R H A D
17-10-2007, 00:15
سلام
ممنون از پیشنهاد خوب شما، ان شاءالله آموزشها که تمام شد.

چند وقت پیش در مورد توابع Aggregate صحبت کردم و گفتم که کاربرد 4 تا از توابع رو نمیدونم:


البته 4 تا تابع دیگه هم هست که فکر میکنم مربوط به محاسبه واریانس و ... باشه. ریاضی دانها کمک کنند:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ریاضی دانها که کمک نکردند، خودم دست به کار شدم:
STDEV , STDEVP برای محاسبه انحراف آماری استاندارد
VAR , VARP برای محاسبه واریانس

تا به زودی...

F A R H A D
19-10-2007, 14:13
Group By :
یکی از مواردی که کاربرد زیادی هم در sql داره گروه بندی داده ها هست.
زمانی که از توابع aggregate استفاده میکنید، تمام داده های جدول رو به عنوان نتیجه بر میگردونه. با استفاده از group by میتونید بر اساس یک مقدار یکتا در فیلد، داده ها رو گروه بندی کنید.

شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

فرض کنید در جدول inventory ارزش تمام کالاها رو به تفکیک هر کالا میخواین:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در کد بالا اگر در جدول چند کالا با یک نام وجود داشته باشه، query که نوشته شده مجموع فیلد cost مربوط به کالاهای همنام رو به عنوان نتیجه برمیگردونه.

نکته: فیلدی که در جلوی group by نوشته میشه باید در قسمت select هم باشه.

Having :
زمانی که داده ها رو گروه بندی میکنید، اگر نیاز به دستورات شرطی باشه نمیشه از where استفاده کرد و باید از عبارت having استفاده کنید.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

فرض کنید در جدول inventory ارزش تمام کالاها رو به تفکیک هر کالا و کالاهایی که ارزش کلی آنها بیشتر از 25000 هست:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تا به زودی...
پیروز باشید

F A R H A D
28-10-2007, 00:13
با سلام. دستورات مربوط به بازیابی داده ها تقریبا تمام شده، از امروز میخوام دستوراتی رو بگم که مربوط به ویرایش و اعمال تغییرات در دیتابیس و جداول هست. پس برای این دستورات دیگه از adoquery استفاده نمیکنم و به جای اون از ADOCommand استفاده میشه که در تب ADO هست.

یکی از کارهایی که همیشه در دیتابیسها انجام میشه ویرایش داده هایی هست که قبلا وارد شده، برای این کار از دستور UPDATE استفاده میشه.
همینطور که از معنی این کلمه مشخص هست، این دستور برای ویرایش و اصلاح داده ها در جدول ها استفاده میشه.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در مقابل set مقدار جدید new_value برای فیلد column_name نوشته میشه.

فرض کنید در جدول inventory میخوایم مقدار فیلد cost رو برای فیلد name تغییر بدیم با این شرط که هر جا name=sample هست cost=new_cost بشه.


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سوالی بود در خدمتم.
تا به زودی...

romixery
01-11-2007, 09:40
سلام فرهاد جان
فكر كنم آموزشاتون ديگه تموم شده كه ديگه پستي نميزنين.
به نظر شما حالا ديگه وقتش نيست فايل Pdf آموزشتون رو هم آپلود كنيد تا پرونده اين آموزشم بسته بشه؟!!!!
موفق باشين
باي

F A R H A D
02-11-2007, 21:09
سلام. نه هنوز مونده. این روزها به خاطر مسائل مختلف نمیتونم زیاد بیام.
romixery عزیز لطفا اینگونه موارد رو با پیغام خصوصی بگو. تشکر

hp1361
03-11-2007, 00:01
سلام آقا فرهاد

من میخوام که جمع هر ستون از جدولم رو بدست بیارم و از دستور SUM استفاده میکنم . یه MaskEdit روی فرمم دارم که تاریخ رو با فرمت 11/08/1386 نمایش میده و اطلاعات تاریخ هم با همین فرمت در جدولم ذخیره شدند . حالا اگه فقط دستور Sum رو بدم query یه فیلد بنام Sum of field1 رو بر میگردونه اما اگه دستور Where رو بنویسم هیچی بر نمیگردونه . لطفا راهنمایی بفرمایین

اینم کدی که می نویسم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
03-11-2007, 01:12
سلام آقا فرهاد

من میخوام که جمع هر ستون از جدولم رو بدست بیارم و از دستور SUM استفاده میکنم . یه MaskEdit روی فرمم دارم که تاریخ رو با فرمت 11/08/1386 نمایش میده و اطلاعات تاریخ هم با همین فرمت در جدولم ذخیره شدند . حالا اگه فقط دستور Sum رو بدم query یه فیلد بنام Sum of field1 رو بر میگردونه اما اگه دستور Where رو بنویسم هیچی بر نمیگردونه . لطفا راهنمایی بفرمایین

اینم کدی که می نویسم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام. کد رو به شکل زیر اصلاح کنید:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشید

romixery
03-11-2007, 10:27
سلام فرهاد جان
یه سوالی در مورد دستور Like داشتم.
متأسفانه اگه بخوایم با دستور Like مقداری را در فیلدی مورد بررسی و جستجو قرار بدم از فقط از کلمات اول استفاده می کنه.
برای مثال توی یه فیلد من یه مقداری هست به نام:( دانشگاه صنعتی شریف)
خوب من مثلا توی فیلد جستجوم عبارت (شریف) رو می زنم ولی چیزی نمیاره.
ولی اگه من توی فیلد جستجوم بزنم (دانشگاه) هر فیلدی که اولش با دانشگاه شروع بشه رو میاره. برای حل این مشکل باید چی کار کنم.
کدی که نوشتم اینه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حله؟
موفق باشین
بای

F A R H A D
03-11-2007, 13:11
سلام. به صورت زیر اصلاح کن:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشی

hp1361
03-11-2007, 15:07
سلام
فرهاد جان دستت درد نکنه

خیلی ممنون که کارم رو راه انداختی .

راستی لازمه حتما قبل از اضافه کردن کد جدید به اس کیو ال یک کوئری دستور پاک کردن رو بدیم.

F A R H A D
04-11-2007, 12:07
لازمه حتما قبل از اضافه کردن کد جدید به اس کیو ال یک کوئری دستور پاک کردن رو بدیم

معمولا بله ولی همیشه نه!
زمانی که از پارامترها استفاده کنی فقط کافیه مقدار جدید پارامتر رو وارد کنی

sp1000
05-11-2007, 08:50
انگار SQL خیلی پر کاربرده که این همه طرف دار داره
من تازه باهاش آشنا شدم
تصمیم دارم با همین تاپیک جلو برم:46:
راستی مگه
کاربرد SQL و Database با هم فرق دارند
برای ساخت چه برنامه های باید از کدوم یک از این ها استفاده کرد

یا شاید هم مکمل یکدیگرند:13:

F A R H A D
06-11-2007, 00:04
راستی مگه
کاربرد SQL و Database با هم فرق دارند

ببین دوست عزیز شما اگر در برنامه خودتون نیاز به ذخیره و بازیابی اطلاعات زیادی داشته باشی باید از database استفاده کنی. دیتابیس یک سیستم مدیریت پایگاه داده داره که این سیستم میتونه access, paradox, ms sql, mysql,oracle, sybase و ... باشه که برای پیاده سازی اعمال مختلف دیتابیس به کار برده میشه. و دستورات sql دستوراتی هستند که در این پایگاه های داده شناخته شده هستند و برای اعمال مختلف روی داده ها به کار میرند. پس دو مفهوم کاملا مجزا هستند.
شما در رابط کاربری که با دلفی یا هر زبان دیگه که طراحی میکنی با استفاده از دستورات sql با دیتابیس ارتباط برقرار میکنی.


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

موفق باشی

sp1000
06-11-2007, 06:45
مرسی
دوهزاری افتاد
راستی من چند تا سوال در مورد دیتابیس پرسیدم فکر کنم با دستورات Sql حل بشن

توی این تاپیک هستش ، لطف کن یه سری بزن و کمکم کن


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ممنون
بای

نرم افزار قفل دسکتاب >> خودمون ساختیمش با دلفی دانلود کنید و پیشنهاد و انتقاد بدهید

دانلود :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

:11:

وبلاگ ما :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
07-11-2007, 00:09
راستی من چند تا سوال در مورد دیتابیس پرسیدم فکر کنم با دستورات Sql حل بشن

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

hp1361
07-11-2007, 02:21
سلام

اقا فرهاد يه سوال ديگه

من تاريخ هاي برنامم رو بصورت استرينگ در بانك sqlserver ذخيره كردم و دستور دادم ركورداي بين 1/1/1386 تا 30/8/1386 رو بازيابي كنه . واسه امتحان هم چند تا ركورد از 27/2/86 تا 30/2/86 رو وارد كردم و همشون رو نشون داد .

شما گفتين با فيلدايي كه درشون /(اسلش) هست مشكل خواهم داشت . اما براحتي اين ركورد ها نمايش داده شد . (با توجه به اينكه تاريخ ميلادي ماه دومش 28 روزه )

آيا منظور شما چيزي بغير از اين بوده و ممكنه اين روش استفاده كردن از تاريخ جايي منو اذيت كنه .

ممنون و منتظرم

F A R H A D
08-11-2007, 01:11
آيا منظور شما چيزي بغير از اين بوده و ممكنه اين روش استفاده كردن از تاريخ جايي منو اذيت كنه .

رکوردها رو بین چند سال مختلف با ماههای مختلف وارد کنید. احتمالا به مشکل من گرفتار میشی

sp1000
09-11-2007, 00:54
سلام دوستان

من جدول اکسس رو به برنامه ام وصل کردم و جدولم پسورد هم داره اما وقتی می خوام توی دلفی لودش کنم ارور میده و میگه پسورد قبول نمی کنم یه هم چین چیزی

حالا چیکار کنم که بتونم جدول پسورد دار رو توی دلفی لود کنم

البته بگم که جدول بدون پسورد راحت می تونم لود کنم

منتظرم
بای

F A R H A D
09-11-2007, 01:12
من جدول اکسس رو به برنامه ام وصل کردم و جدولم پسورد هم داره اما وقتی می خوام توی دلفی لودش کنم ارور میده و میگه پسورد قبول نمی کنم یه هم چین چیزی

sp1000 عزیز مشکل شما قبلا بحث شده و نکته مهمتر اینکه به این تاپیک هیچ ارتباطی نداره.
جستجو کنید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشی

sp1000
11-11-2007, 07:30
با سلام

من می خواستم میشه با استفاده از دستور Sql کارهای زیر را انجام داد
1 - به رکورد خاصی رفت یعنی من میخوام وقتی روی یک Button کلیک شد هر عددی که توی یک Edit باشه مثلا (10) بره به رکورد 10

2- تعداد رکورد جدول را فهمید یعنی مثلا ( اگه تعداد رکورد 120 تاست ) توی یک Edit بنویسه 120

3- من میخوام و قتی از خاصیت Rundomize استفاده میکنم فقط رکورد هایی که مد نظر من هست انتخاب بشن یعنی مثلا( من 20 تا رکورد دارم حالا می خوام که خاصیت راندوم فقط از عدد 1 تا 10 انتخاب بشن و بدون تکرار )

ممنون میشم کدش را بهم بدین

منتظرم بای

F A R H A D
11-11-2007, 12:32
من می خواستم میشه با استفاده از دستور Sql کارهای زیر را انجام داد
1 - به رکورد خاصی رفت یعنی من میخوام وقتی روی یک Button کلیک شد هر عددی که توی یک Edit باشه مثلا (10) بره به رکورد 10

2- تعداد رکورد جدول را فهمید یعنی مثلا ( اگه تعداد رکورد 120 تاست ) توی یک Edit بنویسه 120

3- من میخوام و قتی از خاصیت Rundomize استفاده میکنم فقط رکورد هایی که مد نظر من هست انتخاب بشن یعنی مثلا( من 20 تا رکورد دارم حالا می خوام که خاصیت راندوم فقط از عدد 1 تا 10 انتخاب بشن و بدون تکرار )

در مورد سوال 1 و 2 در همین تاپیک به صورت کامل بحث شده. ولی بازم میگم
1- باید از where استفاده کنی
2- استفاده از تابع count
3- به همچین موردی برخورد نکردم اما شما میتونی با استفاده از distinct تمام رکوردهای منحصر به فرد رو انتخاب کنی، بعد از تابع RandomRange(const From, To: Integer) استفاده کنی.

موفق باشی

F A R H A D
14-11-2007, 12:03
بعد از مدت ها با دو بحث جدید ...
1- DELETE
تا حالا پیش اومده بخواید چند سطر رو با هم از یک جدول حذف کنید؟ حتما برای این کار یه حلقه مینوشتید و ...
با استفاده از delete در sql میتونید خیلی راحت هر تعداد سطر رو از جدول با شرایط خاص حذف کنید.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

با توجه به دستورات و مثال های قبلی دیگه نیازی به مثال نیست.

F A R H A D
14-11-2007, 12:05
2- INSERT INTO
برای درج داده های جدید در بانک استفاده میشه.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

روش اول برای زمانی هست که قراره تمام فیلدها مقدار دهی شه و لی دومی زمانی کاربرد داره که فیلدهای خاصی رو وارد میکنید.
فرض کنید قرار در جدول inventory تمام فیلدها مقدار دهی شه:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

میبینید که مقدار دهی 5 فیلد در 2 خط انجام شد!

نکته مهم: مقادیر فیلدهای متنی (text) حتما باید بین " " داشته باشند.
پیروز باشید

as13851365
15-11-2007, 09:24
خیلی خوب و مفید و کامل بود امیدوارم که دوست خوب ما خسته نشده باشه و ما را با کدهای بیشتری آشنا کند.

delphianddotnet
15-11-2007, 10:38
من تاريخ هاي برنامم رو بصورت استرينگ در بانك sqlserver ذخيره كردم و دستور دادم ركورداي بين 1/1/1386 تا 30/8/1386 رو بازيابي كنه . واسه امتحان هم چند تا ركورد از 27/2/86 تا 30/2/86 رو وارد كردم و همشون رو نشون داد .

جا Hp1361
تنظیمات دیتابیس تون رو امتحان کنید .(Collation)

as13851365
22-11-2007, 10:10
مثل این که آقا فرهاد خسته شده !

در ضمن اگر این مطالب را به صورت Pdf در بیاری و آپلود کنی خیلی بهتره خواهد بود اگر هم وقت نداری اجازه بده من چنین کاری کنم( یعنی تمام گفته های شما را به صورت Pdf در بیارم و آپلود کنم )

romixery
22-11-2007, 10:16
منم همينون ميگم. اگه Pdf بشه خيلي بهتره بابا. يكي زحمتش رو بكشه ممنون ميشم.

romixery
22-11-2007, 10:20
يه سوال رو يادم رفت بپرسم:
فرهاد جان براي اينكه بخوايم در جستجوي ما كلمه اي باشه كه ما در فيلد جستجو سرچ مي كنيم از Like استفاده مي كنيم. حالا اگه بخوايم در جستجوي ما اون كلمه نباشه بايد چيكار كنيم. يعني در جستجوي ما عبارتي كه ما در فيلد جستجو هست، نباشه!!!
موفق باشين
باي

F A R H A D
22-11-2007, 17:09
مثل این که آقا فرهاد خسته شده !

در ضمن اگر این مطالب را به صورت Pdf در بیاری و آپلود کنی خیلی بهتره خواهد بود اگر هم وقت نداری اجازه بده من چنین کاری کنم( یعنی تمام گفته های شما را به صورت Pdf در بیارم و آپلود کنم )

نه دوست عزیز خسته نشدم. تنها دلیلش مشغله زیاد در این روزها هست. (اگر به کسی نمیگید طراحی یک وب سایت برای یک ارگان دولتی :5: )
اگر دوستان لطف کنند و به صورت pdf در بیارند، ممنون میشم.

F A R H A D
22-11-2007, 18:16
يه سوال رو يادم رفت بپرسم:
فرهاد جان براي اينكه بخوايم در جستجوي ما كلمه اي باشه كه ما در فيلد جستجو سرچ مي كنيم از Like استفاده مي كنيم. حالا اگه بخوايم در جستجوي ما اون كلمه نباشه بايد چيكار كنيم. يعني در جستجوي ما عبارتي كه ما در فيلد جستجو هست، نباشه!!!
موفق باشين
باي

مثال رو با همون جدول inventory معروف میزنم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشی

romixery
27-11-2007, 10:57
سلام فرهاد جان
يه مشكل بسيار عجيب دارم. من 6 تا فيلد دارم از نوع Text در پايگاه داده اكسس
سه تا از اونا براي نگه داري تاريخ به صورت Merge شده (بدون مميز) و سه تا ديگه از اونا هم براي شماره نامه.
من با مثلا قطعه كد زير مي تونم به طور كاملا دقيق سه تا فيلد مربوط به تاريخ رو ***** كنم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس تا اينجا مشكلي نيست. ولي وقتي به فيلد شماره ها مي رسم و مي خوام با دستور Between ، باقطعه كد زير:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اونا رو **** كنم. كار مهمي نمي كنه. مي گم كار مهم نمي كنه چون مثلا سه ركورد با مقادير زير براي شماره نامه داريم (125,123,1236) . حالا وقتي مي خوام مقادير بين مثلا 123 تا 130 رو برام بياره، 1236 رو هم مياره. (مثل اينكه از خاصيت شباهت استفاده مي كنه). هر كار كردم نشد.
بايد بگم كه STRtemp رشتة SQL ما هست كه با تركيب چند پارامتر به رشتة نهايي تبديل ميشه.
حالا بگين اشكال از كجاست.
موفق باشين
باي

F A R H A D
27-11-2007, 13:14
اگر فیلد های شماره عدد هست نباید بین " " قرار بگیره. اگر هم اینجوری درست نشد مقدار نهایی STRtemp رو بنویس. اینجوری نمیشه کاری کرد

romixery
27-11-2007, 19:35
سلام
فرهاد جان فيلد از نوع رشته هستش. چرا نميشه اينجوري كاري كرد؟
به هر كي گفتم تا حالا به اين مشكل بر نخورده بود.
شما راه حلي ندارين؟
ممنون
باي

F A R H A D
28-11-2007, 07:36
سلام
فرهاد جان فيلد از نوع رشته هستش. چرا نميشه اينجوري كاري كرد؟
به هر كي گفتم تا حالا به اين مشكل بر نخورده بود.
شما راه حلي ندارين؟
ممنون
باي


اگر هم اینجوری درست نشد مقدار نهایی STRtemp رو بنویس. اینجوری نمیشه کاری کرد
به پست توجه نکردید!

as13851365
30-11-2007, 08:37
امیدوارم که حال دوستان خوب باشه
فرهاد جان می دونم اگر کسی سوالی نداشته باشه آدم کم کم سرد می شه .
اما امیدوارم که شما همچنان موفق باشید در ضمن من یک برنامه را شروع کردم که می خوام در این برنامه فقط از دستورات Sql استفاده کنم یعنی تا جائی که شما و دوستان آموزش دادید من از دستورات Sql استفاده خواهم کرد
امیدوارم که همه موفق باشن و ما هم اگر مشکلی داشتیم بتونیم در انجا مطرح کنیم و به جواب برسیم.

romixery
30-11-2007, 14:04
من داغش مي كنم.
فرهاد جان اين كاري كه من گفتم درست نشدا چيكار كنم. از Setrange كه نمي تونم استفاده كنم چون اصلا نداره.

F A R H A D
30-11-2007, 19:44
امیدوارم که حال دوستان خوب باشه
فرهاد جان می دونم اگر کسی سوالی نداشته باشه آدم کم کم سرد می شه .
اما امیدوارم که شما همچنان موفق باشید در ضمن من یک برنامه را شروع کردم که می خوام در این برنامه فقط از دستورات Sql استفاده کنم یعنی تا جائی که شما و دوستان آموزش دادید من از دستورات Sql استفاده خواهم کرد
امیدوارم که همه موفق باشن و ما هم اگر مشکلی داشتیم بتونیم در انجا مطرح کنیم و به جواب برسیم.


من داغش مي كنم.

دوستان عزیز باز هم که زود قضاوت کردید!
اصلا بحث سرد شدن من یا داغ شدن تاپیک در بین نیست. من این آموزشها رو فقط بنا به درخواست چند تا از دوستان عزیزم در همین فروم که از طریق پیغام خصوصی مطرح شد، شروع کردم. و مطمئنم که تاپیک جالبی بوده. چرا؟ کافیه به آمار بازدید تاپیک بعد از ارسال آموزشهای جدید دقت کنید.
حالا ممکنه مشکلی برای دوستان پیش نیومده باشه و مطرح نکرده باشند.
این که دیگه دستورات رو ادامه نمیدم فقط به خاطر مشغله ای هست که در پست 84# هم مطرح کردم و دلیل دوم واصلی این هست که دستورات مربوط به ذخیره و بازیابی داده ها - DML - تقریبا به صورت کامل گفته شده و فقط دستورات ساختن اشیا در پایگاه داده و تنظیم ویژگی ها و خصوصیات پایگاه داده - DDL - باقی مونده که میدونم گفتن تمام اونها ضرورتی نداره و اگر موردی پیش بیاد حتما گفته میشه. به هر حال ممنون که مطرح کردید

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

F A R H A D
30-11-2007, 19:47
اين كاري كه من گفتم درست نشدا چيكار كنم. از Setrange كه نمي تونم استفاده كنم چون اصلا نداره.

این برای سومین بار:

اگر هم اینجوری درست نشد مقدار نهایی STRtemp رو بنویس. اینجوری نمیشه کاری کرد

با ترکیب and و od در where هم میتونی به نتیجه برسی. اون رو هم تست کن

sp1000
01-12-2007, 06:55
سلام فرهاد جان

من در قسمت OnfilterRecord دیتابیس کد جستجو رو وارد میکنم
این کدش

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالا من مثلا وارد میکنم در ادیت ها به ترتیب
محمد ایمانی 5 جدول میره جستجو میکنه و برام میاره
محمد ایمانی 5486532 در صورتیکه من اصلا شماره 5 ندارم و لی چون اول تلفن 5 هستش داره برام میاره
حالا من میخوام فقط هر چیزی که کاربر تایپ کنه بره دقیق همون رو بیاره نه شبیه اون رو

ممنون میشم کمکم کنی بای

F A R H A D
01-12-2007, 07:24
این کاملا طبیعیه. چون شما از pos استفاده کردی. عملکرد تابع pos اینه که محل وجود رشته 1 رو در رشته 2 برمیگردونه. شما حتی اگر "محمدرضا ایمانی نژاد با شما ره تلفن 521412" رو در جدول داشته باشی و همون موارد بالا رو در edit هم وارد کنی، هم محمد رو داری هم محمدرضا!
به جای pos از strcomp استفاده کن.
راستی چرا اینجا مطرح کردی؟ اینها که sql نبودند
موفق باشی

F A R H A D
05-12-2007, 10:44
سلام. برای اینکه دوستان عزیزم مطمئن باشند که هنوز خستگی بهم غلبه نکرده! امروز یک آموزش دیگه دارم:
SELECT INTO
این دستور اغلب برای BackUp گرفتن از جدول ها مورد استفاده قرار میگیره. دقت کنید که شما با کامپوننت ها هم میتونید backup بگیرید اما از تمام دیتابیس. پس زمانی که نیازی به backup تمام دیتابیس نیست بهتره که از select into استفاده کنید.
شکل کلی دستور:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

این دستور فوق العاده انعطاف پذیر هست، چون هم میتونید پشتیبان جدولها رو در همون دیتابیس ذخیره کنید و هم میتونید به یک دیتابیس دیگه انتقال بدید.
حالت اول:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالت دوم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

حالتهای دیگر: انتخاب چند فیلد مشخص به جای استفاده از * ، به کار بردن عبارات شرطی مانند where و گرفتن پشتیبان از وضعیت جاری، پشتیبان گیری از چند جدول درون یک جدول.

موفق باشید

as13851365
05-12-2007, 22:57
دست خوش
آقا فرهاد شما هر از گاهی هم که یک پست را ارسال کنید خوبه .

as13851365
19-12-2007, 15:36
این هم مقاله
دستورات SQL را به صورت Pdf در لینک زیر قابل دانلود است

afshinaghasi
19-12-2007, 22:26
دستت درد نکنه خیلی خوب بود همشو save کردم مرسی.این بود یه چیزه به درد بخور

F A R H A D
22-12-2007, 12:02
این هم مقاله
دستورات SQL را به صورت Pdf در لینک زیر قابل دانلود است


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام. دوست عزیز جناب اصغر کوهی ( as13851365 ) نکاتی رو در این آموزشها دیدم که بهش اشاره میکنم:
- از اونجا که در 80 درصد آموزشها از مطالب این تاپیک استفاده کردید بهتره که منبع (لینک تاپیک) رو در فایل آموزشی ذکر کنید
- مواردی مثل تعریف کاربر رو که ذکر کردید مختص MS SQL هست و با استفاده از توابع از پیش تعریف شده این dbms انجام میشه. آموزشهای این تاپیک همینطور که قبلا هم گفتم مربوط به زبان Transact-sql هست و شما باید طبقه بندی موضوعات رو رعایت کنید
- در قسمتی از آموزشها هم از ClientDataSet و StoredProce ها استفاده شده که مطرح کردنش در یک صفحه باعث سردرگمی برنامه نویسان تازه کار میشه. اگر اطلاعات یا منبع کاملی دارید بهتره در یک تاپیک جداگانه مطرح بشه. من هم تا جایی که بتونم همکاری میکنم
اینها رو اولین نگاه به آموزشها دیدم و لازم دونستم عنوان کنم.
اگر دوستان PDF رو بیشتر ترجیح میدن در آینده نزدیک میتونن منتظر باشند. البته امیدوارم وقت آزاد بیشتری پیدا کنم.
موفق باشید

afshinaghasi
26-12-2007, 14:34
سلام خوبی نخسته
می گما
من یک Adoquery دارم و تو فرمم یه کلید که کدش اینه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته رکوردهارو پاک میکنه ولی قبلش یه error هم میده که حاله آدمرو میگیره اونم اینه :

adoquery1:commandtext does not return a result set:

rotbeaval
28-12-2007, 12:46
سلام من تا اینجای درس ها را خواندم...از زحمات شما در این رابطه ممنونم...
البته من واقعا تازه کارم... و حالا باید برم در اکسس امتحانشون کنم و ببینم می توانم از آنها درست استفاده کنم یا نه ...
شاد باشید

afshinaghasi
28-12-2007, 14:19
سلام نخسته.
چه جور میشه یه شرطی رو از برنامه گرفت و اونو توی دستور sql جا داد.یعنی مثلا توی یه ادیت باکس چیزی نوشت و اون بشه شرطمون واسه جلوی where
__________________:20:
البته ببخشید حتما این قبلا یه جایی مطرح شده ولی جستجو اینجا یه مقداری مشکله

F A R H A D
30-12-2007, 11:12
سلام خوبی نخسته
می گما
من یک Adoquery دارم و تو فرمم یه کلید که کدش اینه
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته رکوردهارو پاک میکنه ولی قبلش یه error هم میده که حاله آدمرو میگیره اونم اینه :

adoquery1:commandtext does not return a result set:

به جاي open از execsql استفاده كن
براي اين نوع دستورات كه recordset ي رو برنمي گردونه نميتونيد از open استفاده كنيد

F A R H A D
30-12-2007, 11:14
سلام نخسته.
چه جور میشه یه شرطی رو از برنامه گرفت و اونو توی دستور sql جا داد.یعنی مثلا توی یه ادیت باکس چیزی نوشت و اون بشه شرطمون واسه جلوی where
__________________:20:
البته ببخشید حتما این قبلا یه جایی مطرح شده ولی جستجو اینجا یه مقداری مشکله

اگر در همين تاپيك جستجو مي كرديد حتما به نتيجه مي رسيديد.

m*z
04-01-2008, 17:31
سلام آقا فرهاد. خسته نباشيد.
واقعا ممنونم . آموزشتون خيلي عالي بود. بيان خوبي داريد.(ماشاءاله. بزنم به تخته)
در مورد پست #19 يك سؤال داشتم.

حالا ما میخوایم ببینیم چه افرادی چه کالاهایی رو سفارش دادند:

کد:

with adoquery1 do beginclose;sql.Clear;sql.Add('select orders.fname, orders.lname, inventory.name from orders, inventory where inventory.no=orders.no');open;end;

نتیحه حاصل شامل نام و نام خانوادگی اشخاص از جدول orders و نام کالا از جدول inventory هست.


حالا طبق اين نتيجه اگه يه اديت داشته باشيم و بخواهيم جستجو رو بر اساس نام كالايي كه توي اديت نوشته ميشه انجام بده و در نهايت نتيجه فوق حاصل بشه چه دستوري رو بايد جايگزين كنيم.(نام و نام خانوادگي اشخاص و نام كالاي مورد نظر)

شاد باشيد.

F A R H A D
05-01-2008, 08:33
سلام دوست عزيز. خوش آمديد
قبلا توضيح دادم، بايد ازlike استفاده كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشيد

m*z
05-01-2008, 11:16
سلام.ممنونم.
آقا فرهاد همه پستها رو خوندم. ببينيد من اين كدها رو نوشتم ولي تو اجرا اشتباه جواب ميده.
توي sql مربوط به adoquery نوشتم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كه نتيجه نام و نام خانوادگي و كد كالاي خريداري شده از جدول 2 و نام كالا از جدول 1. تا اينجا درسته.
بعدش توي اديت اين كد رو نوشتم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولي تو اجرا وقتي مثلا حرف"م" رو وارد ميكنم تمام نام كالاها توي دي بي گريد رو به نام كالاهايي كه با اين حرف شروع ميشه درمياره. ضمن اينكه بقيه اطلاعات رو هم تغيير ميده
ممكنه بگيد كجا رو اشتباه كردم.

m*z
05-01-2008, 11:58
يه سؤال ديگه هم داشتم بازم مربوط به دستور Like هستش.
-دو تا اديت نام و نام خانوادگي دارم كه ميخوام با استفاده از دستور like توي هر دو تا اديت جستجو انجام بشه. يعني تا جايي كه به نام مورد نظر رسيدم توي اديت اول بنويسم و بعد از اينكه نام مورد نظر پيدا شد براي نام خانوادگي جستجو انجام بشه و درنهايت نام و نام خانوادگي موردنظر ما ليست بشه (حالا هر چند تا هست ممكنه يك ، دو و يا بيشتر باشه)
شما با يه اديت توضيح داديد. با يك اديت مشكلي ندارم ولي وقتي دوتاست error ميده.

در ضمن پست ها رو خوندم و اجرا هم كردم. باز نگيد برو اين پست رو با دقت بخون.

مرسي.شاد باشيد.

F A R H A D
05-01-2008, 15:08
سلام.ممنونم.
آقا فرهاد همه پستها رو خوندم. ببينيد من اين كدها رو نوشتم ولي تو اجرا اشتباه جواب ميده.
توي sql مربوط به adoquery نوشتم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كه نتيجه نام و نام خانوادگي و كد كالاي خريداري شده از جدول 2 و نام كالا از جدول 1. تا اينجا درسته.
بعدش توي اديت اين كد رو نوشتم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
ولي تو اجرا وقتي مثلا حرف"م" رو وارد ميكنم تمام نام كالاها توي دي بي گريد رو به نام كالاهايي كه با اين حرف شروع ميشه درمياره. ضمن اينكه بقيه اطلاعات رو هم تغيير ميده
ممكنه بگيد كجا رو اشتباه كردم.

مشخص كنيد از كدوم جدول اطلاعات رو بخونه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


ضمن اينكه بقيه اطلاعات رو هم تغيير ميده
دستور select چيزي رو تغيير نميده. منظورتو دقيق تر بگو

F A R H A D
05-01-2008, 16:09
يه سؤال ديگه هم داشتم بازم مربوط به دستور Like هستش.
-دو تا اديت نام و نام خانوادگي دارم كه ميخوام با استفاده از دستور like توي هر دو تا اديت جستجو انجام بشه. يعني تا جايي كه به نام مورد نظر رسيدم توي اديت اول بنويسم و بعد از اينكه نام مورد نظر پيدا شد براي نام خانوادگي جستجو انجام بشه و درنهايت نام و نام خانوادگي موردنظر ما ليست بشه (حالا هر چند تا هست ممكنه يك ، دو و يا بيشتر باشه)
شما با يه اديت توضيح داديد. با يك اديت مشكلي ندارم ولي وقتي دوتاست error ميده.

در ضمن پست ها رو خوندم و اجرا هم كردم. باز نگيد برو اين پست رو با دقت بخون.

مرسي.شاد باشيد.

كدي رو كه نوشتيد اينجا قرار بديد

m*z
05-01-2008, 16:14
سلام.



مشخص كنيد از كدوم جدول اطلاعات رو بخونه:

کد:
where table1 OR table2. name like

اينكار رو هم انجام دادم ولي تاثيري روي نتيجه نداره.
ببينيد منظورم از اينكه بقيه اطلاعات تغيير ميكنه اينه :

قبل از اجرا:( اين قسمت درسته. اطلاعاتي كه ميخوام هميناست.ميخوام روي اين اطلاعات جستجو انجام بدم)

نام نام خانوادگي كد كالا نام كالا
علي علوي 1 پرينتر
حامد احمدي 2 اسكنر
مينا مددي 1 پرينتر
رضا رضايي 3 اسپيكر


درحال اجرا:(وارد كردن حرف الف در اديت)

نام نام خانوادگي كد كالا نام كالا
علي علوي 1 اسكنر
علي علوي 1 اسپيكر
علي علوي 1 اسكنر
رضا رضايي 3 اسكنر
رضا رضايي 3 اسپيكر
رضا رضايي 3 اسكنر
.
.
.

و به همين ترتيب .واسه بقيه اسامي هم اين شكلي ميشه.
سؤال دوم رو هم جواب نداديد.

شاد باشيد.

m*z
05-01-2008, 16:38
نقل قول:
نوشته شده توسط m*z [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ])
يه سؤال ديگه هم داشتم بازم مربوط به دستور Like هستش.
-دو تا اديت نام و نام خانوادگي دارم كه ميخوام با استفاده از دستور like توي هر دو تا اديت جستجو انجام بشه. يعني تا جايي كه به نام مورد نظر رسيدم توي اديت اول بنويسم و بعد از اينكه نام مورد نظر پيدا شد براي نام خانوادگي جستجو انجام بشه و درنهايت نام و نام خانوادگي موردنظر ما ليست بشه (حالا هر چند تا هست ممكنه يك ، دو و يا بيشتر باشه)
شما با يه اديت توضيح داديد. با يك اديت مشكلي ندارم ولي وقتي دوتاست error ميده.

در ضمن پست ها رو خوندم و اجرا هم كردم. باز نگيد برو اين پست رو با دقت بخون.

مرسي.شاد باشيد.

كدي رو كه نوشتيد اينجا قرار بديد


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اين رو هم امتحان كردم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

تو روخدا كد اصلاح شدش رو برام بنويس. نصف پروژه ام معطل همين دوتا سؤاله.

F A R H A D
06-01-2008, 16:07
درحال اجرا:(وارد كردن حرف الف در اديت)

نام نام خانوادگي كد كالا نام كالا
علي علوي 1 اسكنر
علي علوي 1 اسپيكر
علي علوي 1 اسكنر
رضا رضايي 3 اسكنر
رضا رضايي 3 اسپيكر
رضا رضايي 3 اسكنر

متاسفانه دلفي در دسترسم نيست كه كد كامل رو بذارم. join رو در همين تاپيك جستجو كنيد
براي سوال دومتون هم parameter رو جستجو كنيد
موفق باشيد

m*z
06-01-2008, 23:16
لازم دونستم اين پست رو حذف كنم ولي مثل اينكه امكان حذف جز براي مدير انجمن وجود نداره.

چرا عاقل كند كاري.....

F A R H A D
07-01-2008, 08:44
مرسي آقا فرهاد. ولي اگه قرار بود مشكلم با اين جوابها حل بشه لزومي نداشت اينجا بپرسم. اگه اينجا كسي سؤالي مي پرسه توقع داره يه جواب درستي هم بگيره. حالا چه از شما و چه از دوستان ديگه. خوشبختانه تعداد دوستاني كه تو اين انجمن فعاليت مي كنن كم نيست ولي........
دوست عزيز منظور شما از جواب درست چي هست، كه توقع داريد بگيريد؟ با راهنمايي هايي كه كردم مطمئنا به جواب ميرسيد اما متاسفانه ما عادت كرديم به هلوي پوست كنده! . چرا حاضر نيستيم براي خواسته هامون كمي زحمت بكشيم؟

متاسفانه دلفي در دسترسم نيست كه كد كامل رو بذارم
مطمئنا اگر دلفي داشتم كد تست شده رو ميذاشتم، اما حالا كاري رو كه قرار بود شما با جستجو انجام بدي من انجام ميدم:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شما بايد از inner join استفاده كني
در مورد parameters هم در پست 3 توضيح دادم

m*z
07-01-2008, 12:24
سلام. آقا فرهاد دلخوري پيش نياد. خواهش ميكنم از حرف من ناراحت نشيد. ولي متاسفانه من تو نوشتن دستورات sql مشكل دارم. يعني دقيقا نمي دونم كدي رو كه مورد نظرم هست كجا و چطوري بايد قرار بدم كه جواب درستي بده. شما هم نمي دونم چي در مورد من فكر كرديد كه اينقدر با اطمينان ميگيد عادت به هلوي پوست كنده دارم. من همه ي دستوراتي رو كه آموزش داديد عينا تست كردم و هيچ مشكلي هم پيش نيومد ولي وقتي مي خوام توش يه تغييراتي بدم با مشكل مواجه ميشم البته تو بعضي از كدها . من تا جاييكه بتونم خودم كدها رو تست ميكنم، جاشو تغيير ميدم ، حتي كدها رو تغيير ميدم ، كم و زيادش ميكنم و.. تا بالاخره خودم درستش كنم كه تو بعضي از كدها هم اينكارو كردم و خوشبختانه درست شد ولي اين يكي درست نشد ديگه. مطمئن باشيد همين كه يه سؤالي واسم پيش مياد نميام اينجا مطرح كنم. تا جاييكه بتونم سؤال نميكنم.

به هر حال خيلي ممنونم. زنده باشيد.

F A R H A D
07-01-2008, 16:27
سلام. آقا فرهاد دلخوري پيش نياد. خواهش ميكنم از حرف من ناراحت نشيد. ولي متاسفانه من تو نوشتن دستورات sql مشكل دارم. يعني دقيقا نمي دونم كدي رو كه مورد نظرم هست كجا و چطوري بايد قرار بدم كه جواب درستي بده. شما هم نمي دونم چي در مورد من فكر كرديد كه اينقدر با اطمينان ميگيد عادت به هلوي پوست كنده دارم. من همه ي دستوراتي رو كه آموزش داديد عينا تست كردم و هيچ مشكلي هم پيش نيومد ولي وقتي مي خوام توش يه تغييراتي بدم با مشكل مواجه ميشم البته تو بعضي از كدها . من تا جاييكه بتونم خودم كدها رو تست ميكنم، جاشو تغيير ميدم ، حتي كدها رو تغيير ميدم ، كم و زيادش ميكنم و.. تا بالاخره خودم درستش كنم كه تو بعضي از كدها هم اينكارو كردم و خوشبختانه درست شد ولي اين يكي درست نشد ديگه. مطمئن باشيد همين كه يه سؤالي واسم پيش مياد نميام اينجا مطرح كنم. تا جاييكه بتونم سؤال نميكنم.

به هر حال خيلي ممنونم. زنده باشيد.
خواهش ميكنم، چرا دلخوري پيش بياد عزيز؟ من كه عرض كردم دلفي در دسترسم نيست وگرنه كمك بيشتري ميكردم. اين كد مربوط به join هست كه از access گرفتم. بر اساس همين كد رو بنويس:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و براي دومي هم احتمالا اينطوري ميشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر جواب نداد فردا دلفي در دسترسم هست

m*z
10-01-2008, 02:57
سلام خدمت آقا فرهاد عزيز و بقيه دوستان.
من تو برنامم يه دي بي گريد دارم كه فيلدهاش رو از چند تا جدول ميگيره. توي sql مربوط به ADOQuery اين كد رو نوشتم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كه اطلاعاتي رو كه گفتم مياره تو دي بي گريد و درست نشون ميده.
و توي اديت هم اين كد رو نوشتم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولي اجرا نميشه و اين error رو ميده.

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

ممنونم.
شاد باشيد.

m*z
10-01-2008, 03:23
يه سؤال ديگه:
من تو برنامم چند تا جدول دارم كه به اين صورت هستند:
جدول هنرجو: كد ملي- نام - نام خانوادگي- كد رشته- كد نوع خط- كد دوره و...
جدول رشته: كد رشته- نام رشته
جدول نوع خط: كد نوع خط- نام نوع خط- كد رشته
جدول دوره آموزشي: كد دوره- نام دوره- كد رشته

دو تا جدول نوع خط و دوره آموزشي مخصوص رشته خوشنويسي هستش و اگه رشته اي غير از خوشنويسي داشته باشيم اين دوتا فيلد در جدول هنرجو بايد خالي بمونند.
حالا دستور sql اونو چطوري بايد بنويسم كه هم پر بودن فيلد رو درنظر بگيره و هم خالي بودنش رو.
يعني توي دي بي گريد اطلاعات (نام- نام خانوادگي- نام رشته- نام نوع خط و نام دوره آموزشي) نشون داده بشه بطوريكه اگر رشته خوشنويسي بود كه نام خط و نام دوره هم اطلاعاتش بياد ولي اگر رشته مثلا طراحي بود اين دوتا فيلد رو خالي نشون بده.
ببخشيد اگه سؤالهاي اينجوري رو مطرح ميكنم. شايد اين سؤالها براي شما خيلي پيش پا افتاده باشه ولي واسه من كه تازه كارم يه مشكل بزرگ تو برناممه.

اگه ممكنه سريعتر راهنماييم كنيد.
ممنونم. زنده باشيد.

F A R H A D
10-01-2008, 18:12
سلام خدمت آقا فرهاد عزيز و بقيه دوستان.
من تو برنامم يه دي بي گريد دارم كه فيلدهاش رو از چند تا جدول ميگيره. توي sql مربوط به ADOQuery اين كد رو نوشتم.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كه اطلاعاتي رو كه گفتم مياره تو دي بي گريد و درست نشون ميده.
و توي اديت هم اين كد رو نوشتم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

ولي اجرا نميشه و اين error رو ميده.

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

ممنونم.
شاد باشيد.

دستورات sql رو در چند خط اضافه کن (sql.add رو چند بار پشت سر هم اضافه کن)

F A R H A D
10-01-2008, 18:27
يه سؤال ديگه:
من تو برنامم چند تا جدول دارم كه به اين صورت هستند:
جدول هنرجو: كد ملي- نام - نام خانوادگي- كد رشته- كد نوع خط- كد دوره و...
جدول رشته: كد رشته- نام رشته
جدول نوع خط: كد نوع خط- نام نوع خط- كد رشته
جدول دوره آموزشي: كد دوره- نام دوره- كد رشته

دو تا جدول نوع خط و دوره آموزشي مخصوص رشته خوشنويسي هستش و اگه رشته اي غير از خوشنويسي داشته باشيم اين دوتا فيلد در جدول هنرجو بايد خالي بمونند.
حالا دستور sql اونو چطوري بايد بنويسم كه هم پر بودن فيلد رو درنظر بگيره و هم خالي بودنش رو.
يعني توي دي بي گريد اطلاعات (نام- نام خانوادگي- نام رشته- نام نوع خط و نام دوره آموزشي) نشون داده بشه بطوريكه اگر رشته خوشنويسي بود كه نام خط و نام دوره هم اطلاعاتش بياد ولي اگر رشته مثلا طراحي بود اين دوتا فيلد رو خالي نشون بده.
ببخشيد اگه سؤالهاي اينجوري رو مطرح ميكنم. شايد اين سؤالها براي شما خيلي پيش پا افتاده باشه ولي واسه من كه تازه كارم يه مشكل بزرگ تو برناممه.

اگه ممكنه سريعتر راهنماييم كنيد.
ممنونم. زنده باشيد.
پیش پا افتاده که چه عرض کنم. گیج کننده بود. 5 بار خوندمش!
بهترین گزینه برای کار شما میتونه SP (stored proc) باشه اما از اونجا که در این مورد صحبتی نشده بهتره دو دستور sql رو در قسمتی که رشته مشخص میشه بنویسید، و بعد از چک کردن شرط query مناسب رو اجرا کنید
اگر هم قراره با خود دستورات sql چک کردن رو انجام بدید باید از IS NULL استفاده کنید که قبلا توضیح دادم
موفق باشید

m*z
11-01-2008, 00:51
دستورات sql رو در چند خط اضافه کن (sql.add رو چند بار پشت سر هم اضافه کن)
سلام. مرسي از جوابت. البته من كه متوجه نشدم با اينحال چندين بار تست كردم. اگه منظورت اينه كه بقيه فيلدهارو تو select بعدي وارد كنم به اينصورت:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اين كد هم error داد. البته error قبلي از بين رفت اين يكي مربوط به اديت هستش. حالا Run ميشه ولي وقتي توي اديت يه كليد رو فشار ميدم error ميده. من دقيقا متوجه نشدم كه قسمت like '+edit.text رو تو كدوم select وارد كنم. توي هر دو هم كه باشه بازم پيغام خطا ميده.

آقا فرهاد ميشه هموني كه ميگي رو به صورت يه كد فرضي برام بنويسي. (دو تا select پشت سر هم رو) اگه نميگي عادت به هلوي پوست كنده دارم! مي خوام جاهاش رو بدونم كجاست. همون توضيحش رو هم بدي خوبه.
ممنونم از پاسخهايي كه ميدي. ولي پاسخهات خيلي مختصره. به خودت نگاه نكن كه كار كردن با اين دستورا ديگه برات مثل آب خوردن هستش. يه جوري جواب بده كه من خنگ هم متوجه بشم آخه.

زنده باشيد.

F A R H A D
11-01-2008, 09:17
اگه منظورت اينه كه بقيه فيلدهارو تو select بعدي وارد كنم
نه، منظورم این نبود. به صورت زیر بنویس:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


وقتي توي اديت يه كليد رو فشار ميدم error ميده
error رو بنویس


يه جوري جواب بده كه من خنگ هم متوجه بشم آخه
پیشنهاد: اگر مایل به پیشرفت هستی هیچ وقت فکر نکن چیزی کمتر از دیگران داری. هیچ کس از روز اول برنامه نویس به دنیا نیومده
موفق باشی

DrXoX
11-01-2008, 14:41
سلام


با اجازه آقا فرهاد گل

من دلفی دم دست ندارمم چون فعلا تهران نیستم ولی این کد دقیقا همون کاری رو می کنه که شما می خواین

من تو Sqlserver امتحانش کردم کاملا درست جواب میده دیگه وارد کردنش تو دلفی کار خیلی راحتی هستش

باز اگر مشکل بود بگید تا با دوستان راهنمایی تون کنیم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

m*z
11-01-2008, 19:15
فرهاد جان و DrXoX عزيز، ممنونم از زحمات شما. خيلي لطف كرديد.

نه، منظورم این نبود. به صورت زیر بنویس:

کد:
DataModule25.ADOQueryP.SQL.Add('select pardakht.* , honarju.hname, honarju.hfamily, honarju.hnamepedar,honarju.hshahriye, reshte.namereshte from reshte, pardakht,honarju where honarju.hcodemelli=pardakht.codehonarju and reshte.codereshte=honarju.codereshte ');به صورت زیر بنویس:DataModule25.ADOQueryP.SQL.Add('select pardakht.* , honarju.hname, honarju.hfamily, honarju.hnamepedar,honarju.hshahriye, reshte.namereshte');DataModule25.ADOQueryP.SQL.Add (' from reshte, pardakht,honarju');DataModule25.ADOQueryP.SQL.Add( ' where honarju.hcodemelli=pardakht.codehonarju and reshte.

فرهاد جان مرسي. درست شد. من اشتباه متوجه شده بودم.

DrXoX جان كدي كه گفتي رو نوشتم ولي syntax error ميده تو اين قسمت:


H.Code_reshte = R.Code_reshte LEFT OUTER JOIN
noe_khat N ON R.Code_reshte = N.Code_reshte


من فكر كردم بايد قبل از LEFT OUTER JOIN دوباره بهش بگم با جدول رشته واسه همين قبلش and reshte هم اضافه كردم ولي تاثيري نداشت بازم همين error رو ميده.
ببخشيد تو رو خدا.

ممنونم. زنده باشيد.

DrXoX
11-01-2008, 19:40
فرهاد جان و DrXoX عزيز، ممنونم از زحمات شما. خيلي لطف كرديد.

مشکل حل شد؟

خوب انشاا... پروژت زودتر تموم بشه باز اگر مشکلی بود بپرس تا با دوستان راهنمایی تون کنیم

موفق باشید

F A R H A D
12-01-2008, 08:27
بازم همين error رو ميده

براي دومين بار...

error رو بنویس

m*z
12-01-2008, 12:46
سلام

error رو بنویس

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


زنده باشيد.

F A R H A D
12-01-2008, 13:14
به صورت زير اصلاح كن:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

hp1361
12-01-2008, 20:52
سلام

آقا فرهاد عزیز سوالی دارم که ممنون می شم راهنمایی بفرمایین

من دو تا جدول دارم . میخواهم اطلاعات موجود در جدول اول رو به جدول دوم بریزم . اما بشرطی که رکورد های انتقالی در جدول دوم از قبل وجود نداشته باشه و اگه یکیش موجود بود از اون صرف نظر کنه و بقیه رو وارد کنه .

جدول اول فیلد شماره سرویس داره که بصورت Primary Key هستش. جدول دوم همین فیلد رو داره اما بهمراه Date که اونم PrimaryKey دوم هست .

طریقه استفاده از دستور Insert Into رو استفاده کردم اما از عهدش بر نیومدم

ممنون و منتظرم

afshinaghasi
12-01-2008, 21:43
سلام خوبی
من میخواستم بین چند کامپیوتر اطلاعات ارسال کنم که بچه ها گفتند باید Sql server نصب کنی من این کارو کردم ولی نمیدونم چه طوری یک فایل sql server بسازم یعنی پسوندش mdf باشه من تا حالا فقط با access کار کردم میشه راهنماییم کنید مرسی:46:

F A R H A D
13-01-2008, 08:47
سلام

آقا فرهاد عزیز سوالی دارم که ممنون می شم راهنمایی بفرمایین

من دو تا جدول دارم . میخواهم اطلاعات موجود در جدول اول رو به جدول دوم بریزم . اما بشرطی که رکورد های انتقالی در جدول دوم از قبل وجود نداشته باشه و اگه یکیش موجود بود از اون صرف نظر کنه و بقیه رو وارد کنه .

جدول اول فیلد شماره سرویس داره که بصورت Primary Key هستش. جدول دوم همین فیلد رو داره اما بهمراه Date که اونم PrimaryKey دوم هست .

طریقه استفاده از دستور Insert Into رو استفاده کردم اما از عهدش بر نیومدم

ممنون و منتظرم
اگر فرض كنيم كه فيلد no در هر دو جدول كليد باشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كد رو تست نكردم. اگر error داد با پرانتز گذاري حل ميشه

F A R H A D
13-01-2008, 08:50
سلام خوبی
من میخواستم بین چند کامپیوتر اطلاعات ارسال کنم که بچه ها گفتند باید Sql server نصب کنی من این کارو کردم ولی نمیدونم چه طوری یک فایل sql server بسازم یعنی پسوندش mdf باشه من تا حالا فقط با access کار کردم میشه راهنماییم کنید مرسی:46:
اين سوال مربوط به اينجا نيست و با عرض پوزش جواب داده نميشه

afshinaghasi
14-01-2008, 13:03
به کل پاک شد

hp1361
14-01-2008, 20:42
اگر فرض كنيم كه فيلد no در هر دو جدول كليد باشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
كد رو تست نكردم. اگر error داد با پرانتز گذاري حل ميشه

سلام مجدد .

آقا فرهاد کد رو به شکل زیر نوشتم(داخل یک Query )


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

اما ارور زیر رو میده؟


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

چیکارش کنم؟(در جدول مقصد ServiceCode , RegDate هر دو کلید هستند و در جدول مبدا ServiceCode کلید است.)

F A R H A D
15-01-2008, 08:39
اگر مقدار servicecode بابر با NULL نيست و همچنين مقدار default رو براي اون فيلد مشخص كردي و با اين error مواجه شدي يك نسخه از ديتابيس رو كه شامل اين دو جدول هست برام آپ كن (با access)

hp1361
17-01-2008, 14:37
اگر مقدار servicecode بابر با NULL نيست و همچنين مقدار default رو براي اون فيلد مشخص كردي و با اين error مواجه شدي يك نسخه از ديتابيس رو كه شامل اين دو جدول هست برام آپ كن (با access)

سلام مجدد

آقا فرهاد بانک access رو ضمیمه کردم :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یه سوال دیگه هم داشتم . من از وقتی که از بانک اکسس در برنامم استفاده کردم سرعت کار با بانک ها خیلی کم شده . (قبلا از paradox استفاده میکردم. برای مثال قبلا با زدن کلید دو تا جدول رو با دستورات While مقایسه می کردم و کپی می کردم اما الان این کار با بانک اکسس حداقل 4-5 ثانیه طول میکشه و این خیلی کاربرارو حداقل اذیت می کنه . مشکل کجاست ؟ دستورات من یا نوع بانک یا حتی سیستم ؟)

ممنون و منتظرم

NoneForce
17-01-2008, 14:51
سلام مجدد

آقا فرهاد بانک access رو ضمیمه کردم :


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

یه سوال دیگه هم داشتم . من از وقتی که از بانک اکسس در برنامم استفاده کردم سرعت کار با بانک ها خیلی کم شده . (قبلا از paradox استفاده میکردم. برای مثال قبلا با زدن کلید دو تا جدول رو با دستورات While مقایسه می کردم و کپی می کردم اما الان این کار با بانک اکسس حداقل 4-5 ثانیه طول میکشه و این خیلی کاربرارو حداقل اذیت می کنه . مشکل کجاست ؟ دستورات من یا نوع بانک یا حتی سیستم ؟)

ممنون و منتظرم

سلام
فايلي كه فرستاديد حجمش 2.6 مگابايت است.
فايل را در اكسس باز كنيد، از منوي Tools گزينه Database util و بعد Compact and Repair را انتخاب كنيد.
نتيجه : حجم ديتا بيس شما > 360 كيلوبايت

بعد فايل را فشرده كنيد ، نتيجه : حجم ديتابيس شما > 15 كيلوبايت

اين مطلب را گفتم كه هنگام ارسال فايل دقت بيشتري داشته باشيد، تا هم زمان ارسال مشكل كمتري داشته باشيد و هم دريافت آن توسط ديگران آسان تر باشد.

F A R H A D
17-01-2008, 17:20
نکته کاملا مفیدی بود. ممنون نانفرس جان
پس hp1361 عزیز منتظز فایل 15 kb هستم

hp1361
17-01-2008, 19:54
اینم فایل بعد از فشرده سازی


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

راستی قسمت دوم سوالم رو جواب ندادین؟



یه سوال دیگه هم داشتم . من از وقتی که از بانک اکسس در برنامم استفاده کردم سرعت کار با بانک ها خیلی کم شده . (قبلا از paradox استفاده میکردم. برای مثال قبلا با زدن کلید دو تا جدول رو با دستورات While مقایسه می کردم و کپی می کردم اما الان این کار با بانک اکسس حداقل 4-5 ثانیه طول میکشه و این خیلی کاربرارو حداقل اذیت می کنه . مشکل کجاست ؟ دستورات من یا نوع بانک یا حتی سیستم ؟)




در ضمن من امروز اتفاقی در کوئری که از بانکم گرفتم چند تا رکورد اضافه کردم و با کمال تعجب دیدم که به بانک اصلی اضافه شدن . مگه برای اضافه کردن رکورد به بانک با استفاده از کوئری نباید تعاریف خاصی مانند پارامتر ها رو داشته باشیم ؟


بازم ممنون و منتظرم

F A R H A D
18-01-2008, 18:43
برای اضافه کردن رکوردها به جدول با استفاده کامل از دستورات sql نتونستم مشکلتو حل کنم. اگر کسی از دوستان میدونه راهنمایی کنه
یک راه موجود اینه که رکوردها رو تک تک چک کنی و بعد از insert into استفاده کنی


یه سوال دیگه هم داشتم . من از وقتی که از بانک اکسس در برنامم استفاده کردم سرعت کار با بانک ها خیلی کم شده . (قبلا از paradox استفاده میکردم. برای مثال قبلا با زدن کلید دو تا جدول رو با دستورات While مقایسه می کردم و کپی می کردم اما الان این کار با بانک اکسس حداقل 4-5 ثانیه طول میکشه و این خیلی کاربرارو حداقل اذیت می کنه . مشکل کجاست ؟ دستورات من یا نوع بانک یا حتی سیستم ؟)
همونطور که خودت گفتی به موارد زیادی میتونه بستگی داشته باشه که من حجم دیتابیس رو بهش اضافه میکنم و نوع بانک رو که گفتی از لیست حذف میکنم. مطمئنا access و ADO بهتر از paradox هست. حتما میدونید که borland هم دیگه پارادوکس رو حمایت نمیکنه!
پس در یک تاپیک دیگه بیشتر توضیح بده تا مشکل اصلی مشخص شه


در ضمن من امروز اتفاقی در کوئری که از بانکم گرفتم چند تا رکورد اضافه کردم و با کمال تعجب دیدم که به بانک اصلی اضافه شدن . مگه برای اضافه کردن رکورد به بانک با استفاده از کوئری نباید تعاریف خاصی مانند پارامتر ها رو داشته باشیم
اگر از dbgrid استفاده کردید، با ado طبیعی هست ولی با paradox و کامپوننت query خیر

hp1361
18-01-2008, 19:35
سلام

در حال حاضر از حلقه While برای اضافه کردن رکرود استفاده میکنم که در هر دفعه حدود 4-5 ثانیه طول میکشه . دلیلش رو هم نمیدونم . حجم بانک همون 2 مگ هستش و تنها 10 رکورد داره.

اگه از دوستان دیگه بانک پیوستیمو امتحان کردن ممنون میشم نظرشون رو بدن

منتظرم

F A R H A D
23-01-2008, 11:05
در هر دفعه حدود 4-5 ثانیه طول میکشه . حجم بانک همون 2 مگ هستش و تنها 10 رکورد داره.
با پيغام خصوصي پيگيري ميكنم. اگر هم تاپيك مجزا ايجاد كني كه دوستان ديگه هم نظر بدن بهتره

afshinaghasi
23-01-2008, 12:48
چرا اینقدر حجم فایلت زیاده اونم با 10 رکورد

F A R H A D
29-01-2008, 14:13
بعد از مدتها با يك آموزش جديد:
استفاده از كاراكتر هاي خاص براي دستورات شرطي:
قبلا به همراه LIKE كاراكتر % رو به كار برده بودم. اين كاراكتر تمام فيلدهايي رو كه با شرط دستور مطابقت داشتند و داراي طول مساوي و يا بيشتر از رشته بودند رو بر مي گردوند.
امروز ميخوام در مورد كاراكتر _ و [] توضيح بدم.
فرض كنيد به دنبال فيلد هايي هستيم كه سه حرفي هستند و دو حرف اول اونها AB هست. اگر شرط رو به صورت

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بنويسيم تمام فيلدهاي abc, aba, abr, abz, … در نتيجه حاصل هست.
حالا اگر از اين كه فيلد با چه كاراكتري شروع شده اطلاعي نداشته باشيم و مجموعه اي از كاراكترهاي فيلدها رو بخوايم چي؟ از [] استفاده ميكنيم
مثال:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تمام فيلدها رو كه با حروف a,b,c,d,e,f,g شروع ميشند رو در نتيجه حاصل بر مي گردونه.
پيروز باشيد

AHT
03-02-2008, 18:43
ممنون از تاپیک عالی که زدی

من یه مشکل دارم وقتی که میخواهم بین دو تاریخ رو جستجو کنم هیچ جستجویی پیدا نمیکنه
من همین کد رو میزنم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

NoneForce
03-02-2008, 18:56
ممنون از تاپیک عالی که زدی

من یه مشکل دارم وقتی که میخواهم بین دو تاریخ رو جستجو کنم هیچ جستجویی پیدا نمیکنه
من همین کد رو میزنم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام
نوع فيلد تاريختون چيه؟ DateTime يا رشته؟ تاريخ فارسي است يا لاتين؟

AHT
03-02-2008, 20:40
نوع فیلد DateTime هست و تاریخ رو فارسی وارد کردم

F A R H A D
04-02-2008, 08:08
نوع فیلد DateTime هست و تاریخ رو فارسی وارد کردم
براي پيشگيري از مشكلات بعدي:
- نوع فيلد رو رشته اي و تاريخ رو با فرمت yy/mm/dd يا yyyy/mm/dd وارد كنيد. مثلا 9/8/86 به صورت 09/08/86 ذخيره ميشه

AHT
04-02-2008, 09:01
من هم همینجوری به صورت yyyy/mm/dd ذخیره کردم
منظورتون از رشته ای اینه که نوعش رو در Access به صورت Text ذخیره کنم؟

میخواستم بدونم چرا اصلا مقایسه ای در مورد تاریخ ها انجام نمیده؟

F A R H A D
04-02-2008, 09:49
منظورتون از رشته ای اینه که نوعش رو در Access به صورت Text ذخیره کنم؟
بله و البته متغير مربوط به تاريخ در دلفي هم بايد string باشه

میخواستم بدونم چرا اصلا مقایسه ای در مورد تاریخ ها انجام نمیده؟
از اونجا كه نوع datetime فقط براي تاريخهاي ميلادي هست، تاريخ 31/02/86 براي اين datatype قابل قبول نيست. چون ماه فوريه 29 روزه هست

AHT
04-02-2008, 11:54
آخه من مثلا از تاریخ 11/11/86 تا تاریخ 15/11/86 مقایسه انجام دادم ولی هیچ مقداری رو برای اون پیدا نکرد؟

F A R H A D
04-02-2008, 12:12
آخه من مثلا از تاریخ 11/11/86 تا تاریخ 15/11/86 مقایسه انجام دادم ولی هیچ مقداری رو برای اون پیدا نکرد؟

كد رو به صورت زير بنويس:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

AHT
04-02-2008, 12:22
دستت درد نکنه خیلی کارم راه افتاد

F A R H A D
04-02-2008, 15:55
حذف شود.................

AHT
04-02-2008, 22:23
یه سوال دیگه هم دارم
میخواستم بدونم اگه بخوام جمع رکوردهای یه فیلد رو درون یه Label ذخیره کنم باید از چه کدی استفاده کنم
نوع فیلد عددی باشه یا رشته ای؟

F A R H A D
05-02-2008, 08:06
میخواستم بدونم اگه بخوام جمع رکوردهای یه فیلد رو درون یه Label ذخیره کنم باید از چه کدی استفاده کنم
قبلا توضيح داده شده. بايد از SUM استفاده كنيد.

نوع فیلد عددی باشه یا رشته ای؟
فرقي نداره

AHT
05-02-2008, 09:37
من اون Sum رو دیده بودم ولی هر چی میخوام مثلا مقدارش رو توی یه Label ذخیره کنم نمیتونم و کار نمیکنه

F A R H A D
05-02-2008, 09:54
من اون Sum رو دیده بودم ولی هر چی میخوام مثلا مقدارش رو توی یه Label ذخیره کنم نمیتونم و کار نمیکنه

-كدي رو كه نوشتي به صورت كامل بذار
-اگر پيغام خطا ميگيري هم بنويس

AHT
05-02-2008, 10:37
فهمیدم اشکالش چی بود
به خاطر این خطا میداد که من فکر میکردم خروجی ADOQuery1.Fields[0].Value به صورت عدد هست و من از تابع IntToStr استفاده می کردم
الآن به خوبی کار میکنه

باز هم از شما تشکر میکنم

AHT
05-02-2008, 20:11
یه سوال دیگه هم داشتم
شما Inner Join و Left و Right Join رو گفتید ولی من یه جور دیگه میخوام Join انجام بدم به این صورت

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

میخواستم بدونم از چه کدی استفاده کنم

خیلی ممنون

F A R H A D
06-02-2008, 13:43
اگر در هر دو جدول فيلدهاي يكسان داريد از union استفاده كنيد

AHT
06-02-2008, 17:14
این هم مثالی برای Union

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


خیلی ممنون

m*z
09-02-2008, 01:01
سلام.
آقا فرهاد من يه فرم ثبت نام دارم كه روي اين فرم يك dbtext گذاشتم كه با استفاده از count تعداد ركوردها رو بدست بياره و نشون بده ولي فقط در اولين اجرا تعداد رو درست نشون ميده يعني ميخوام هر موقع مشخصات يه نفر ديگه وارد و دكمه ثبت زده شد يكي به اون count اضافه بشه ولي در همون لحظه اضافه نميكنه بايد از اجرا خارج بشم و وقتي دوباره اجرا ميكنم تعداد رو درست نشون ميده.
ميشه بگيد چيكار كنم تا درست بشه

مرسي.

F A R H A D
09-02-2008, 08:38
این هم مثالی برای Union

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


خیلی ممنون
ضمن تشكر از شما دوست عزيز كه راه حل مشكلتون رو در اينجا قرار ميديد. قبلا در همين تاپيك هم توضيح داده شده بود:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
09-02-2008, 08:41
سلام.
آقا فرهاد من يه فرم ثبت نام دارم كه روي اين فرم يك dbtext گذاشتم كه با استفاده از count تعداد ركوردها رو بدست بياره و نشون بده ولي فقط در اولين اجرا تعداد رو درست نشون ميده يعني ميخوام هر موقع مشخصات يه نفر ديگه وارد و دكمه ثبت زده شد يكي به اون count اضافه بشه ولي در همون لحظه اضافه نميكنه بايد از اجرا خارج بشم و وقتي دوباره اجرا ميكنم تعداد رو درست نشون ميده.
ميشه بگيد چيكار كنم تا درست بشه

مرسي.

چرا dbtext?
شما ميتوني تعداد رو در يك متغير public ذخيره كني و عمليات مورد نظر رو با اون متغير انجام بدي

m*z
09-02-2008, 09:00
مگه اشكالي داره از dbtext استفاده كنم؟
دقيقا همون عملياتش رو نمي دونم چطوري بايد بنويسم. توي onclick دكمه ثبت بايد بنويسم ديگه، آره؟

ممكنه بگيد چي بايد بنويسم؟

romixery
12-02-2008, 11:52
حذف شود ....

F A R H A D
24-03-2008, 14:17
بعد از غيبت طولاني در اين تاپيك يك آموزش جديد:
همونطور كه قبلا گفته بودم دستورات ساختن اشیا در پایگاه داده و تنظیم ویژگی ها و خصوصیات پایگاه داده (DDL) رو بنا به نياز دوستان ميگم.
دوست عزيزي در تاپيك زير در مورد اضافه كردن فيلد در زمان اجرا پرسيده بودند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

براي اين كار بايد از ALTER TABLE استفاده كنيم:
شكل كلي دستور:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

table_name: نام جدول
column_name: نام فيلد
datatype: نوع فيلد

فرض كنيد ميخوايم فيلد MyField رو با طول 50 كاراكتر به جدول inventory اضافه كنيم:


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

موفق باشيد

sampro
25-03-2008, 09:42
سلام دوستان
یه سوال .
من سه تا فیلد دارم که می خوام در خروجی (که می تونه یه DBGrid باشه) با هم نشون داده بشن . مثلا فرض کنید سه فیلد روز , ماه و سال که طبیعتا در خروجی باید به شکل ستون تاریخ (استفاده از همون AS) نمایش داده بشن و در ضمن باید بین اون ها کااکتر اسلش (/) قرار داده بشه یه چیزی مثل این :
1387/02/01

با برنامه نویسی این کار به راحتی انجام می شه با + به هم متصلشون می کنی و یک اسلش هم بینشون می زاری.
ولی این رو می خواستم با استفاده از یک کوئری اس کیو ال انجامش بدم . (خروجی تو دی بی گرید)
حالا کوئری رو چه طوری بنویسمش .

sampro
25-03-2008, 09:45
سلام دوستان.
مجددا مزاحم می شم

من سوالی در مورد دستورات خود SQL داشتم .
من یه جدول دارم که سه فیلد سال , ماه و روز داره . همچنین یه فیلد شماره فایل (پرونده) .

این جا یه ادارس (این برنامه) . با شروع سال جدید شماره ی فایل های اون ها از یک آغاز می شه . (جاهای دیگه این جوری نیس)

خوب من برای اینکه این کار رو بتونم در برنامم انجام بدم , تصمیم گرفتم که تاریخ آخرین رکورد رو بگیرم (یعنی بزرگترین تاریخ رو) بعد به اپراتور که با برنامم کار می کنه پیشنهاد کنم و اگه اون دید که سال جدید شده خودش شماره رو از یک بزنه و در غیر این صورت همون رو وارد کنه . اگه ما می خواستیم فقط مکس بزرگترین شماره فایل رو برگردونیم همیشه یک عدد بزرگی برمیگردون بنابراین مکس تاریخ رو هم به هش اضافه کردیم .

حالا تو کئری که این کار رو انجام بده موندم. می خوام که فقط تو یک کوئری انجام بشه . همون طور که گفتم برنامه باید مکس سه فیلد رو پیدا کنه همچنین باید مکس شماره ی پرونده رو هم داشته باشیم تا یکی به هش اضافه کنیم و به کاربر پیشنهاد کنیم .

این کوئری خطا داره ولی می تونه منظوره منو برسونه . پیشنهاد شما چیه؟



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
26-03-2008, 08:23
سلام دوستان
یه سوال .
من سه تا فیلد دارم که می خوام در خروجی (که می تونه یه DBGrid باشه) با هم نشون داده بشن . مثلا فرض کنید سه فیلد روز , ماه و سال که طبیعتا در خروجی باید به شکل ستون تاریخ (استفاده از همون AS) نمایش داده بشن و در ضمن باید بین اون ها کااکتر اسلش (/) قرار داده بشه یه چیزی مثل این :
1387/02/01

با برنامه نویسی این کار به راحتی انجام می شه با + به هم متصلشون می کنی و یک اسلش هم بینشون می زاری.
ولی این رو می خواستم با استفاده از یک کوئری اس کیو ال انجامش بدم . (خروجی تو دی بی گرید)
حالا کوئری رو چه طوری بنویسمش .


با دستورات sql هم تقريبا به همون سادگي انجام ميشه:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
year: فيلد سال
month: فيلد ماه
day: فيلد روز

F A R H A D
26-03-2008, 08:31
سلام دوستان.
مجددا مزاحم می شم

من سوالی در مورد دستورات خود SQL داشتم .
من یه جدول دارم که سه فیلد سال , ماه و روز داره . همچنین یه فیلد شماره فایل (پرونده) .

این جا یه ادارس (این برنامه) . با شروع سال جدید شماره ی فایل های اون ها از یک آغاز می شه . (جاهای دیگه این جوری نیس)

خوب من برای اینکه این کار رو بتونم در برنامم انجام بدم , تصمیم گرفتم که تاریخ آخرین رکورد رو بگیرم (یعنی بزرگترین تاریخ رو) بعد به اپراتور که با برنامم کار می کنه پیشنهاد کنم و اگه اون دید که سال جدید شده خودش شماره رو از یک بزنه و در غیر این صورت همون رو وارد کنه . اگه ما می خواستیم فقط مکس بزرگترین شماره فایل رو برگردونیم همیشه یک عدد بزرگی برمیگردون بنابراین مکس تاریخ رو هم به هش اضافه کردیم .

حالا تو کئری که این کار رو انجام بده موندم. می خوام که فقط تو یک کوئری انجام بشه . همون طور که گفتم برنامه باید مکس سه فیلد رو پیدا کنه همچنین باید مکس شماره ی پرونده رو هم داشته باشیم تا یکی به هش اضافه کنیم و به کاربر پیشنهاد کنیم .

این کوئری خطا داره ولی می تونه منظوره منو برسونه . پیشنهاد شما چیه؟



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

يك راه حل ميتونه اين باشه:
- تاريخ جاري سيستم رو بگيري
- قسمتي رو كه مربوط به سال ميشه درون جدول جستجو كني
- اگر مورد مشابهي بود، يعني اينكه قبلا براي سال جديد تاريخ و شماره پرونده وارد شده -> پس يك واحد به شماره پرونده اضافه ميكنيد
- در صورتي كه مورد مشابهي نبود شماره پرونده از ابتدا شروع ميشه

اين راه حل با يك query ساده و كمي كدنويسي انجام شدني هست.

meghdad23
04-04-2008, 22:37
سلام
آقا فرهاد اگه ممکنه در مورد stored procedure در sql و نحوه استفاده از اونا توی دلفی توضیح بدید هرجا رفتم نتیجه ای حاصل نشده

F A R H A D
05-04-2008, 10:55
سلام
آقا فرهاد اگه ممکنه در مورد stored procedure در sql و نحوه استفاده از اونا توی دلفی توضیح بدید هرجا رفتم نتیجه ای حاصل نشده

اين تاپيك مختص دستورات زبان Transact SQL هست و ارتباطي با نرم افزار مديريت پايگاه داده SQL server نداره. از اونجا كه بحث sp ها (stored procedure) مربوط به sql server هست، لطفا تاپيك جداگانه ايجاد كنيد.

F A R H A D
26-04-2008, 08:21
به دليل درخواست هاي دوستان عزيز برنامه نويس، اين آموزشها تا پست #170 به صورت مقاله تهيه شد

اميدوارم مورد توجه و استفاده عزيزان قرار بگيره

لينك مقاله در پست اول قرار داده شد

پيروز باشيد

as13851365
30-04-2008, 15:54
پاک شود ...

F A R H A D
30-04-2008, 17:24
..............................................

as13851365
01-05-2008, 10:26
پاک شود ...

camelia_f
02-05-2008, 14:57
سلام مرسی که وقت میذارید و پیغاممو میخونید
من چجوری میتونم مقدار وارد شده در edit با مقادیر یک table در sql مقایسه کنم؟!
یه برنامه با دلفی دارم که هنگام ورود از کاربر شماره کاربری و رمز عبور میخواد من میخوام تو setting برنامم بتونم با دادن شماره کاربری و رمز عبور فعلی و رمز جدید , رمز قبلیو عوض کنم.
برای اینکار نیاز به مقایسه و پیدا کردن ادرس رکورد مورد نظر دارم .. میشه کمکم کنید؟

F A R H A D
03-05-2008, 12:06
حذف شود ...............................................

F A R H A D
03-05-2008, 12:24
سلام مرسی که وقت میذارید و پیغاممو میخونید
من چجوری میتونم مقدار وارد شده در edit با مقادیر یک table در sql مقایسه کنم؟!
یه برنامه با دلفی دارم که هنگام ورود از کاربر شماره کاربری و رمز عبور میخواد من میخوام تو setting برنامم بتونم با دادن شماره کاربری و رمز عبور فعلی و رمز جدید , رمز قبلیو عوض کنم.
برای اینکار نیاز به مقایسه و پیدا کردن ادرس رکورد مورد نظر دارم .. میشه کمکم کنید؟

سلام. خوش آمديد. يك كنترل query يا adoquery روي فرم بگذاريد و دستورات زير رو در رويداد كليك مربوط به button بنويسيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستورات بالا در صورتي كه هر دو مورد صحيح باشند نام كاربري و پسورد مربوط به مقداري كه درون edit ها وارد مي كنيد رو بر ميگردونه و شما ميتونيد پسورد رو با مقدار جديد ويرايش كنيد.
موفق باشيد

camelia_f
03-05-2008, 12:53
سلام. خوش آمديد. يك كنترل query يا adoquery روي فرم بگذاريد و دستورات زير رو در رويداد كليك مربوط به button بنويسيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دستورات بالا در صورتي كه هر دو مورد صحيح باشند نام كاربري و پسورد مربوط به مقداري كه درون edit ها وارد مي كنيد رو بر ميگردونه و شما ميتونيد پسورد رو با مقدار جديد ويرايش كنيد.
موفق باشيد

مرسی اما...
من کدی که فرمودین اینجوری نوشتم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بعد از ورود اطلاعات وقتی ثبت رو میزنم این error رو میده

Quser: parameter 'User_Name' not found

چیکار کنم؟! :"(

as13851365
03-05-2008, 13:54
فكر مي كردم خودتون كشف خواهيد كرد! acrobat reader>document>file attachement (عرض كردم كه فقط براي افراد خاص هست!)

مشکل :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

F A R H A D
04-05-2008, 07:45
مشکل :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

export رو كه انتخاب كنيد مشكلي نداره. اما براي بسته شدن مبحث attachment هاي اين pdf ، كتابها رو هم جداگانه در لينك زير گذاشتم (نمي خواستم به اين زودي فاش بشه اما شد!):

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

F A R H A D
04-05-2008, 07:55
مرسی اما...
من کدی که فرمودین اینجوری نوشتم


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

بعد از ورود اطلاعات وقتی ثبت رو میزنم این error رو میده

Quser: parameter 'User_Name' not found

چیکار کنم؟! :"(

خوب حق داره كه اين error رو بده. اگر شما با دقت آموزشها رو بخونيد متوجه خواهيد شد كه user_name=:'+E_Karbari.Text و سپس استفاده از ParamValues['user_name']:=E_Karbari.Text صحيح نيست.
كد رو به همون صورتي كه نوشتم بنويسيد. يعني بعد از " = " علامت " : " بگذاريد و بعد نام پارامتر رو بنويسيد.
اگر باز هم به مشكل برخورديد پست جديد بديد، پست قبلي رو ويرايش نكنيد. اين يكي رو هم كه ويرايش كرديد اتفاقي ديدم.
موفق باشيد

camelia_f
06-05-2008, 16:49
یه عالمه مرسی مشکلم حل شد..ایشالا بری بهشت آقا فرهاد :)

همگی برام دعا کنید سر دفاع سوالای چرت و پرت نپرسن ازم!!! :s

camelia_f
06-05-2008, 17:31
راستی میشه یه مقاله یکی 2 صفحه ای از sql بهم بدین به عنوان مقدمه واسه پروژم میخوام..مرسی :)

F A R H A D
07-05-2008, 07:25
خواهش مي كنم. در صفحه اول همين تاپيك دلايل استفاده از sql و همچنين مقدمه مورد نظر شما گفته شده.
موفق باشيد

emdad
19-05-2008, 17:27
سلام
من در حال نوشتن یه برنامه هستم که 160 رکورد را باید از طریق کوئری به دیتابیس منتقل کنم ولی اررور

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید میده
من تا حالا هیچ وقت برام لازم نبوده این همه رکورد را یکباره به دیتابیس منتقل کنم
پیشنهاد لازم دارم و ببینید که خط فرمانهام درسته یا نه .
لطفاً فوری :: کمک فوری تا نیم ساعت دیگه لازم دارم
کمک
کمک
کمک


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



اگر تو خط فرمان و یا جایی دیگه از برنامه اشکال هست لطفاً بگید

F A R H A D
21-05-2008, 10:20
سلام. ظاهرا كه مشكل حل شد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

khoshkhahi
14-07-2008, 14:55
آقا دستت در نكن عالي بود خيلي ممنون:10::40:

mshojan
12-08-2008, 11:55
آيا ميشه جمع يكي ازستون هاي dbgrid رو حساب كرد يا dbgrid فقط براي نمايش اطلاعات است؟

F A R H A D
12-08-2008, 12:28
خوش آمديد. اگر با دستورات sql ميخوايد، group by رو جستجو كنيد

alî
13-08-2008, 07:23
با سلام خدمت همه دوستان مخصوصا farhad عزیز
مشکل من!
وقتی در sql از case استفاده می کنم، دیگه نمی تونم اون فیلدی رو که در اون از case استفاده کردم رو با نام دیگه ای نمایش بدم( یعنی از as استفاده کنم).
امیدوارم منظورم رو متوجه شده باشید.
دقیقا اینجوری:

select importance = CASE importance WHEN 1 THEN 'is1' WHEN 2 THEN 'is2' as newcaptionعبارت case به تنهایی جواب می ده اما وقتی as رو اضافه می کنم از as خطا می گیره.
همه جور پرانتز گذاری رو هم امتحان کردم ولی فایده نداره که نداره.

F A R H A D
13-08-2008, 08:29
سلام دوست عزيز. به شكل زير استفاده كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

fat64
13-08-2008, 10:26
سلام
یکی دیگه از دستوراتی که زمان جستجو خیلی کارآمد هست، دستور LIKE هست که به همراه where استفاده میشه. این دستور برای زمانی هست که ما به دنبال تمام مقادیری هستیم که با یک یا چند حرف مشخص شروع میشه و یا تمام میشه، و یا حتی این چند حرف میتونه جزیی از نتیجه باشه.

شکل کلی دستور:





برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در قسمت pattern مشخص میکنیم که نتیجه حاصل بر چه اساسی باشه.
به مثال توجه کنید:





برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید



فرض میکنیم که مقادیر فیلد name قطعات سخت افزاری هستند. در مثال بالا اگر در edit1 مقدار "مانیتور" وارد شه، تمام مقادیری که با "مانیتور" شروع شده مثل "مانیتور Samsung، مانیتور LG ، مانیتور BenQ و ..." به نمایش در میاد.
با کمی خلاقیت اگر این کد رو در رویداد OnChange یک ادیت قرار بدیم با تایپ اولین حرف مثلا "م" تمام مقادیر "مانیتور، ماوس، مادر بورد" و بقیه مقادیری که با "م" شروع میشه به نمایش در میاد.


اگر به محل کاربرد "%" دقت کنید، خودتون میتونید شرط هایی که با نیاز شما سازگارتر هستند بنویسید.


پیروز باشید.



من خواستم بر اساس چند فيلد filter كنم مثلا اگر هر كدام از فيلدها را بلد بود در edit مربوط به آن وارد كند و بر اساس آن qurey بگيرم براي اين مورد كد زير را وارد كردم ولي با وارد كردن يكي از فيلها كل جدول را نمايش مي دهد مثل اينكه اصلا filter نمي كند :


DataModule11.adoquery1.sql.add('select onvan_ketab,code_onvan , shomare_sabt_ketab from book where onvan_ketab like :p or onvan_ketab like :p2 or nevisandeh like :p1 or mozoe like :p4 or nasher like :p3');

DataModule11.adoquery1.parameters.paramvalues['p']:=Edit2.Text ;

DataModule11.adoquery1.parameters.paramvalues['p1']:=Edit1.Text ;
Datamodule11.adoquery1.parameters.paramvalues['p2']:='%'+Edit5.text+'%';
DataModule11.adoquery1.parameters.paramvalues['p3']:=Edit3.Text;
DataModule11.adoquery1.parameters.paramvalues['p4']:=Edit4.Text;
چه اشتباهي كردم؟

fat64
13-08-2008, 11:34
سلام دوست عزيز. به شكل زير استفاده كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
لطفا ميشود كامل ترتوضيح دهيد.(fat64)

F A R H A D
13-08-2008, 13:03
من خواستم بر اساس چند فيلد filter كنم مثلا اگر هر كدام از فيلدها را بلد بود در edit مربوط به آن وارد كند و بر اساس آن qurey بگيرم براي اين مورد كد زير را وارد كردم ولي با وارد كردن يكي از فيلها كل جدول را نمايش مي دهد مثل اينكه اصلا filter نمي كند :


DataModule11.adoquery1.sql.add('select onvan_ketab,code_onvan , shomare_sabt_ketab from book where onvan_ketab like :p or onvan_ketab like :p2 or nevisandeh like :p1 or mozoe like :p4 or nasher like :p3');

DataModule11.adoquery1.parameters.paramvalues['p']:=Edit2.Text ;

DataModule11.adoquery1.parameters.paramvalues['p1']:=Edit1.Text ;
Datamodule11.adoquery1.parameters.paramvalues['p2']:='%'+Edit5.text+'%';
DataModule11.adoquery1.parameters.paramvalues['p3']:=Edit3.Text;
DataModule11.adoquery1.parameters.paramvalues['p4']:=Edit4.Text;
چه اشتباهي كردم؟





اين كد جوابگوي شما نيست. بايد كد رو طوري بنويسيد كه فيلدهايي كه وارد نشدند و خالي هستند وارد query شما نشه. يعني دستور sql رو با يك case ساده بسازيد و بعد به كوئري اضافه كنيد. مثلا با يك دستور case فيلدهاي خالي رو چك كنيد و فقط فيلدهايي رو كه داراي مقدار هستند به ابزار query بفرستيد. در تالار نمونه هايي وجود داره.

F A R H A D
13-08-2008, 13:04
لطفا ميشود كامل ترتوضيح دهيد.(fat64)

با چه قسمتي از كد مشكل داريد؟

alî
13-08-2008, 15:59
سلام دوست عزيز. به شكل زير استفاده كنيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام خیلی ممنون از راهنمایی شما ولی اون importance اولی اضافیه یعنی به این صورت
select case when importance='1' then 'is1' when importance='2' then 'is2' end as newcaption

fat64
14-08-2008, 08:50
لطفا ميشود كامل ترتوضيح دهيد.(fat64)
من تا به حال از اين دستور استفاده نكرده ام مي شود يك مثال بزنيد چون نمي دانم بجاي كدام عبارت بايد مقادير خودم را بگذارم و چي رو بايد از قبل تعريف كنم ؟

fat64
14-08-2008, 08:52
با چه قسمتي از كد مشكل داريد؟
من تا به حال از اين دستور استفاده نكرده ام مي شود يك مثال بزنيد چون نمي دانم بجاي كدام عبارت بايد مقادير خودم را بگذارم و چي رو بايد از قبل تعريف كنم ؟

fat64
14-08-2008, 10:31
اين كد جوابگوي شما نيست. بايد كد رو طوري بنويسيد كه فيلدهايي كه وارد نشدند و خالي هستند وارد query شما نشه. يعني دستور sql رو با يك case ساده بسازيد و بعد به كوئري اضافه كنيد. مثلا با يك دستور case فيلدهاي خالي رو چك كنيد و فقط فيلدهايي رو كه داراي مقدار هستند به ابزار query بفرستيد. در تالار نمونه هايي وجود داره.

در تالار جستجو كردم ولي چيزي كه مي خواستم نبود مي شود خودتان مثال بياوريد ممنون من همزمان با گرفتن پاسخ سوالهايم در دلفي تست مي كنم مي شود جواب دهيد ممنون؟

F A R H A D
14-08-2008, 20:43
سلام خیلی ممنون از راهنمایی شما ولی اون importance اولی اضافیه یعنی به این صورت
select case when importance='1' then 'is1' when importance='2' then 'is2' end as newcaption

importance اولی برای زمانی هست که میخواید محتویات اصلی فیلد رو هم در نتیجه حاصل داشته باشید.


من تا به حال از اين دستور استفاده نكرده ام مي شود يك مثال بزنيد چون نمي دانم بجاي كدام عبارت بايد مقادير خودم را بگذارم و چي رو بايد از قبل تعريف كنم ؟

بگید دقیقا چه هدفی دارید


در تالار جستجو كردم ولي چيزي كه مي خواستم نبود مي شود خودتان مثال بياوريد ممنون من همزمان با گرفتن پاسخ سوالهايم در دلفي تست مي كنم مي شود جواب دهيد ممنون؟
از اونجا که مستقیما به sql مربوط نمیشه در تاپیک جدید مطرح کنید، من یا دوستان دیگر جواب خواهیم داد.

fat64
15-08-2008, 23:49
importance اولی برای زمانی هست که میخواید محتویات اصلی فیلد رو هم در نتیجه حاصل داشته باشید.



بگید دقیقا چه هدفی دارید


از اونجا که مستقیما به sql مربوط نمیشه در تاپیک جدید مطرح کنید، من یا دوستان دیگر جواب خواهیم داد.

من 5 تاedit دارم که کاربر پر میکند و براساس هر کدام که پر باشد باید در جدول جستجو کند ولی چون ممکن است بعضی از این edit ها خالی باشد کل جدول را می آورد ......من مدت زیادی که روی این موضوع موندم .هر کمکی می تونید بکنید

satin
31-08-2008, 09:51
سلام
لطفا در مورد سینتکس دستور Insert into توضیح بدین و 1 مثال بزنین
ممنون

F A R H A D
31-08-2008, 10:16
سلام
لطفا در مورد سینتکس دستور Insert into توضیح بدین و 1 مثال بزنین
ممنون

سلام. لطفا قبلش جستجو كنين و يعد پست بدين!

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

NoneForce
31-08-2008, 10:26
من 5 تاedit دارم که کاربر پر میکند و براساس هر کدام که پر باشد باید در جدول جستجو کند ولی چون ممکن است بعضی از این edit ها خالی باشد کل جدول را می آورد ......من مدت زیادی که روی این موضوع موندم .هر کمکی می تونید بکنید

------------- حذف شود -------------------

as13851365
02-09-2008, 09:08
من وقتی که مقدار select * into را در سایت جستجو می کنم پیغام زیر را نشان می ده
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 35 bytes) in /home/p30world/public_html/forum/search.php on line 956

در ضمن اگه می شه کمی درباره کاربرد select * into اون هم برای استفاده در بانک دیگر توضیح بدید


ado1.SQL.Add('select * into table1 in bookk.db from table1');

من برای بانکم پسورد گزاشتم و وقتی که از دستور بالا استفاده می کنم پیغام خطا می ده که پسورد خالی است

F A R H A D
02-09-2008, 09:23
من وقتی که مقدار select * into را در سایت جستجو می کنم پیغام زیر را نشان می ده
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 35 bytes) in /home/p30world/public_html/forum/search.php on line 956

در ضمن اگه می شه کمی درباره کاربرد select * into اون هم برای استفاده در بانک دیگر توضیح بدید


برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


من برای بانکم پسورد گزاشتم و وقتی که از دستور بالا استفاده می کنم پیغام خطا می ده که پسورد خالی است
از اونجا كه احتمالا از paradox استفاده ميكنيد، قبل از اجراي كوئري session.addpassword رو امتحان كنيد

as13851365
04-09-2008, 07:10
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


از اونجا كه احتمالا از paradox استفاده ميكنيد، قبل از اجراي كوئري session.addpassword رو امتحان كنيد


داداش فرهاد از این که دیر جواب شما را دادم خیلی عزر می خوام

بانک من اکسس است و پسورد دارد !
در کل می خوام تمام جدول های بانکم در یک بانک با نام دیگر داشته باشم (قبلا از دستور Copy استفاده می کردم ولی ... ) از وقتی که دستور select * into رو دیدم حالا می خوام از این دستور استفاده کنم !

درباره لینکی هم که گذاشتید ممنون ولی من تا اینجای کار رو از شما یاد گرفته بودم

در کل من از بانک اکسس استفاده می کنم (bank1.db که در واقع بانک اکسس است پسوندش را تغییر دادم) که داخلش 4 تا جدول با نام های (table1 - table2-table3 - table4) وجود دارد !

حالا می خوام یک بانکی با نام (bank0.db) داشته باشم که تمام جدول ها رو توش داشته باشم ! (نگید از دستور کپی استفاده کن ها !!! می خوام اگه امکانش باشه بنابه دلایلی از دستور Select * into ) و یا یه چیزی تو این مایه ها استفاده کنم !

پیشاپیش از جوابی که می دهید تشکر می کنم

as13851365
05-09-2008, 09:12
یه سوال دیگه :
چطوری می تونم اطلاعات تکراری یک جدول رو نشون بدم ؟

من جستجو کردم با Not distinct مواجه شدم ولی نتونستم ازش استفاده کنم !

نمایش داده های تکراری جدول به کمک دستورات sql !

F A R H A D
06-09-2008, 08:27
داداش فرهاد از این که دیر جواب شما را دادم خیلی عزر می خوام
عذر! :46:


بانک من اکسس است و پسورد دارد !
از اونجا كه پسوند فايل شما db بود گفتم كه شايد از پارادوكس استفاده كرده باشيد. اما براي access بايد در connection string مربوط پسورد رو هم قرار بديد. قبلا در تاپيك حاي ديگه گفته شده


در کل من از بانک اکسس استفاده می کنم (bank1.db که در واقع بانک اکسس است پسوندش را تغییر دادم) که داخلش 4 تا جدول با نام های (table1 - table2-table3 - table4) وجود دارد !

حالا می خوام یک بانکی با نام (bank0.db) داشته باشم که تمام جدول ها رو توش داشته باشم ! (نگید از دستور کپی استفاده کن ها !!! می خوام اگه امکانش باشه بنابه دلایلی از دستور Select * into ) و یا یه چیزی تو این مایه ها استفاده کنم !
كافيه كه از 4 دستور select into طبق آموزشي كه گذاشته شده براي 4 جدول استفاده كنيد


یه سوال دیگه :
چطوری می تونم اطلاعات تکراری یک جدول رو نشون بدم ؟

من جستجو کردم با Not distinct مواجه شدم ولی نتونستم ازش استفاده کنم !

نمایش داده های تکراری جدول به کمک دستورات sql !
در حالت عادي بدون استفاده از distinct شما تمام ركورد ها رو داريد. ركورد هاي بدون تكرار و يا تكراري.
اگر ميخواهيد فقط ركوردهاي با تكرار 2 يا بيشتر رو داشته باشيد، اول با يك كوئري count رو از جدول بگيريد و بعد از يك join استفاده كنيد.

siavash1352
18-09-2008, 11:18
باسلام و خسته نباشید
در قسمت آموزش دستور where که به صورت ذیل الذکر بیان شده بود وقتی از دستورات بیان شده استفاده می کنم با پیغام خطای
ADOQuery1:parameter 'param' not found روبرو می شوم . خواهشمندم طریقه تعریف parameter و حل خطای مذکور را بیان نمایید
متشکرم
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from inventory where name=:param');
ADOQuery1.Parameters.ParamValues['param']:=Edit1.Text;
ADOQuery1.Open;

F A R H A D
20-09-2008, 16:07
سلام .خوش آمدید
کدی که شما نوشتید مشکلی نداره. اگر در زمان طراحی پارامتری رو ساختید، بعد از adoquery.close از ADOQuery1.Parameters.Clear استفاده کنید

siavash1352
21-09-2008, 09:24
سلام فرهاد جان مشکل حل شد ممنونم
به علت اینکه من تازه آموزش شما را شروع کردم زیاد مزاحم شما خواهم شد بایستی ببخشید
در قسمت آموزش like من دستور گفته شده را استفاده نمودم ولی با پیغام خطای '%Invalid column name 'aaa مواجه شدم
خواهشمندم راهنمائی نمایید
sql.Add('select * from inventory where name like "'+Edit6.Text+'%"'); like دستور

meghdad23
22-09-2008, 13:23
سلام فرهاد جان
می خواستم ببینم اگه ممکنه در مورد sp ها در اس کیو ال و کاربرد و نحوه استفاده از اونا در دلفی توضیح بدید
در ضمن من stored را در تاپیک سرچ کردم ولی چیزی پیدا نکرد
ممنون

F A R H A D
23-09-2008, 12:17
سلام فرهاد جان مشکل حل شد ممنونم
به علت اینکه من تازه آموزش شما را شروع کردم زیاد مزاحم شما خواهم شد بایستی ببخشید
در قسمت آموزش like من دستور گفته شده را استفاده نمودم ولی با پیغام خطای '%Invalid column name 'aaa مواجه شدم
خواهشمندم راهنمائی نمایید
sql.Add('select * from inventory where name like "'+Edit6.Text+'%"'); like دستور

خواهش ميكنم دوست عزيز
اين دستور هم مثل قبلي مشكلي نداره. اشكال در جاي ديگه هست
براي like هم از parameters استفاده كنيد و نتيجه رو بگيد

F A R H A D
23-09-2008, 12:30
سلام فرهاد جان
می خواستم ببینم اگه ممکنه در مورد sp ها در اس کیو ال و کاربرد و نحوه استفاده از اونا در دلفی توضیح بدید
در ضمن من stored را در تاپیک سرچ کردم ولی چیزی پیدا نکرد
ممنون

سلام. فكر كنم قبلا هم اين درخواست رو كرده بوديد. درسته؟ اينجا فقط براي دستورات T-SQL هست و از اونجا كه sp مختص sql server هست در موردش چيزي ننوشتم اما از اونجا كه خواهان داره بخشي از فوايدشو مينويسم:

1. دستورات StoredProcedure در بانک اطلاعاتی SqlServer هستند و موقع ایجادشون Parse می شوند به این معنا که شما خیالتون از بابت Syntax راحته.
2. به جهت اینکه Stored Procedure ها در بانک اطلاعاتی Compile می شوند سرعت اجراشون بیشتره.
3. احتمال سوء استفاده از دستورات SqlServer یا اصطلاحا Sql Injection رو به حداقل می رسونن.

یه خوبی دیگه که به نطر من SP ها دارن اینکه شما از یه DB با همون SP ها می تونید برای چندین application استفاده کنید. مثلاً فرض کنید برای یک DB متعلق به کتابخونه چند تا application هست، یکی برای manager یکی برای user و .... و هر کدوم از این application ها رو یه company مجزا نوشتن. و DB Manager برای بالا بردن امنیت به این دو شرکت فقط از طریق SP هایی که خودش تعریف می کنه سطح دسترسی می ده. اینجوری هم امنیت و صحت اطلاعات DB بالا می ره هم از دوباره کاری کاسته می شه، چون خیلی از Query ها مشترکند.

یه ویژیگی دیگش اینکه مجموعه ای از کارها با DB رو روی خود DB server انجام می ده. یه مثاله سادش اینکه فرض کند می خواهید روی یک query یک Query دیگه بگیرید، اگه همه این کارها رو سمت application server انجام بدبد، ممکنه به چندبار ارتباط با حجم انتقال زیاد با DB Server نیاز باشه، اما با SP همه عملیات میانی سمت DB انجام می شه و از اتلاف پهنای باند بیهوده و سربار زیاد سمت Application جلوگيري ميشه
و ...

براي نحوه نوشتنش هم ميتونيد به sp هاي ديتابيس master كه تعدادشون هم كم نيست مراجعه كنيد
موفق باشيد

siavash1352
25-09-2008, 09:43
فرهاد جان سلام از اینکه وقت میگذارید و به سؤالات جواب میدهید ممنونم
در مورد دستور Like اگر به جای " " از quotedstr استفاده کنیم مشکل حل میشود
با عرض معذرت چند سؤال دیگر داشتم خواهشمندم در صورت امکان جواب دهید
1- آیا برای نمایش خروجی دستورات SQL بایستی از DBGRID استفاده نماییم ؟
2- در مثال مطرح شده در قسمت محاسبات ریاضی وقتی cost را با 2000 جمع میکنیم و میخواهیم در ستون جدید new_cost
نمایش دهیم در DBgrid فقط مقادیر فیلد name نمایش داده میشود و ستون بقیه فیلدها خالی نمایش داده میشود و در ضمن
ستون جدید نیز ایجاد نمیشود . علت چیست ؟
3- اگر بخواهیم نتیجه محاسبات ، به عنوان مثال مجموع مقادیر فیلد (SUM) را در یک متغیر ذخیره کنیم به چه صورت عمل نماییم ؟
با تشکر و معذرت بابت طولانی شدن سؤالم . آن را پای مبتدی بودن من بگذارید

F A R H A D
26-09-2008, 12:54
در مورد دستور Like اگر به جای " " از quotedstr استفاده کنیم مشکل حل میشود
متوجه نشدم سوال بود یا به راه حل اشاره کردید؟


- آیا برای نمایش خروجی دستورات SQL بایستی از DBGRID استفاده نماییم ؟
الزامی وجود نداره اما روش معمول و ساده همین هست


2- در مثال مطرح شده در قسمت محاسبات ریاضی وقتی cost را با 2000 جمع میکنیم و میخواهیم در ستون جدید new_cost
نمایش دهیم در DBgrid فقط مقادیر فیلد name نمایش داده میشود و ستون بقیه فیلدها خالی نمایش داده میشود و در ضمن
ستون جدید نیز ایجاد نمیشود . علت چیست ؟
در زمان طراحی فیلد هایی را به dbgrid اضافه کردید که باید همه را حذف کنید


3- اگر بخواهیم نتیجه محاسبات ، به عنوان مثال مجموع مقادیر فیلد (SUM) را در یک متغیر ذخیره کنیم به چه صورت عمل نماییم ؟
دقیقا مثل خواندن مقدار یک فیلد از جدول. فکر میکنم دوست عزیزم مرد مباح هم چنین سوالی رو مطرح کرده بودند که بعد از آموزش همون قسمت جواب رو گذاشتم

موفق باشید

siavash1352
28-09-2008, 12:10
فرهاد جان سلام از راهنمائی هایت ممنونم
اگر بخواهیم در خود برنامه چک شود اگر فایل Sql موجود نیست ، فایلsql مربوطه به وسیله دستورات ساخته شود بایستی چگونه عمل شود ؟
متشکرم

F A R H A D
28-09-2008, 13:01
فرهاد جان سلام از راهنمائی هایت ممنونم
اگر بخواهیم در خود برنامه چک شود اگر فایل Sql موجود نیست ، فایلsql مربوطه به وسیله دستورات ساخته شود بایستی چگونه عمل شود ؟
متشکرم

اگر از ديتابيس sql server استفاده ميكنيد با استفاده از ديتابيس master و دستور زير ميتونيد وجود ديتابيس رو تشخيص بديد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

siavash1352
29-09-2008, 09:39
فرهاد جان خسته نباشید
منظور من این بود که اگر فایل موجود نیست با استفاده از کد نویسی در خود برنامه فایل sql server ساخته شود .
آیا بایستی از دستور create table استفاده کنیم ؟
با تشکر

F A R H A D
29-09-2008, 10:01
فرهاد جان خسته نباشید
منظور من این بود که اگر فایل موجود نیست با استفاده از کد نویسی در خود برنامه فایل sql server ساخته شود .
آیا بایستی از دستور create table استفاده کنیم ؟
با تشکر

ابتدا create database و بعد create table
اما وجود ديتابيس (يا به قول شما فايل) رو با همون دستوري كه در بالا گفتم بايد چك كنيد

siavash1352
04-10-2008, 08:26
سلام فرهاد جان از اینکه با حوصله جوابگوی سؤالات اینجانب هستید متشکرم طبق معمول سؤالاتی داشتم که خواهشمندم در صورت امکان پاسخ دهید :
1- در دستور ذیل الذکر ، چگونه بفهمیم database وجود دارد ؟ آیا این دستوری است که مقداری بر میگرداند ؟
2- اگر من بخواهم table هائی که استفاده میکنم سال به سال باشد مانند table86 یا table87 و این سال را ابتدا از یک ورودی مانند Edit گرفته و سپس در صورت عدم وجود ، آن را بسازم .چگونه بایستی table'+Edit.Text' را در دستور Create Table استفاده کنم ؟
SELECT name FROM sysdatabases WHERE name = "dbName"

F A R H A D
04-10-2008, 09:34
سلام فرهاد جان از اینکه با حوصله جوابگوی سؤالات اینجانب هستید متشکرم طبق معمول سؤالاتی داشتم که خواهشمندم در صورت امکان پاسخ دهید :
1- در دستور ذیل الذکر ، چگونه بفهمیم database وجود دارد ؟ آیا این دستوری است که مقداری بر میگرداند ؟
2- اگر من بخواهم table هائی که استفاده میکنم سال به سال باشد مانند table86 یا table87 و این سال را ابتدا از یک ورودی مانند Edit گرفته و سپس در صورت عدم وجود ، آن را بسازم .چگونه بایستی table'+Edit.Text' را در دستور Create Table استفاده کنم ؟
SELECT name FROM sysdatabases WHERE name = "dbName"

خواهش ميكنم
1- اگر تست كرده بوديد متوجه ميشديد در صورت وجود ديتابيس ركورد مربوط به نام ديتابيس رو برميگردونه
2-
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

MAR_Programmer
04-10-2008, 10:26
سلام
من چند تا از صفحات رو جستجو کردم چیزی در این مورد ندیدم می خواستم بدونم دستور Except ( در عبارت جبری به عنوان دستور تفاضل r-s می شناسند) وجود داره یا نه؟؟
من هر بار که از این دستور استفاده می کنم برنامه دچار خطا میشه. لطفا در مورد Syntax و مابقی جزئیات این دستور توضیح دهید.

F A R H A D
04-10-2008, 11:23
سلام
من چند تا از صفحات رو جستجو کردم چیزی در این مورد ندیدم می خواستم بدونم دستور Except ( در عبارت جبری به عنوان دستور تفاضل r-s می شناسند) وجود داره یا نه؟؟
من هر بار که از این دستور استفاده می کنم برنامه دچار خطا میشه. لطفا در مورد Syntax و مابقی جزئیات این دستور توضیح دهید.

سلام. بله دوست عزيز except وجود داره. اما اگر اشتباه نكنم از sql server 2005 پشتيباني شده. شما از چه ديتابيسي استفاده ميكنيد؟
اين دستور نتايج دو query رو مقايسه ميكنه و ركورد هايي رو كه در اولي هست و در دومي نيست برميگردونه
اين هم syntax:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشيد

MAR_Programmer
04-10-2008, 15:20
سلام. بله دوست عزيز except وجود داره. اما اگر اشتباه نكنم از sql server 2005 پشتيباني شده. شما از چه ديتابيسي استفاده ميكنيد؟
اين دستور نتايج دو query رو مقايسه ميكنه و ركورد هايي رو كه در اولي هست و در دومي نيست برميگردونه
اين هم syntax:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق باشيد

اما من در نسخه های قبلی در راهنمای برنامه توضیحاتی در مورد این دستور دیده بودم!!! در ضمن اگر من نسخه 2000 را نصب کرده باشم بسته آپدیتی برای ارتقاع وجود داره یا نه چونکه نمی دونم به این مشکل خوردید یا نه اگر Sql Server نصب کنی بعد آنرا حذف کنی تا یه سیستم عامل جدید نصب نشه نمی شه حتی همون نخسه قبلی رو نصب کرد چه به رسه به نسخه جدید لطفا در این مورد مرا راهنمایی کنید.

F A R H A D
04-10-2008, 16:24
اما من در نسخه های قبلی در راهنمای برنامه توضیحاتی در مورد این دستور دیده بودم!!! در ضمن اگر من نسخه 2000 را نصب کرده باشم بسته آپدیتی برای ارتقاع وجود داره یا نه چونکه نمی دونم به این مشکل خوردید یا نه اگر Sql Server نصب کنی بعد آنرا حذف کنی تا یه سیستم عامل جدید نصب نشه نمی شه حتی همون نخسه قبلی رو نصب کرد چه به رسه به نسخه جدید لطفا در این مورد مرا راهنمایی کنید.

الان books online مربوط به sql server 2000 رو نگاه ميكردم. except رو نديدم
براي sql server 2000 سرويس پك هاي زيادي هست اما فكر نميكنم به مشكل شما ارتباطي داشته باشه. تا حالا چنين مشكلي نداشتم

siavash1352
05-10-2008, 11:38
سلام خسته نباشید فرهاد جان از راهنمائی قبلی متشکرم
من وقتی دستور CREATE TABLE را به صورت
...) create table if not exists
استفاده میکنم با پیغام خطای incorrect syntax near the keyword 'IF مواجه میشوم خواهشمندم مانند همیشه راهنمائی نمایید

F A R H A D
06-10-2008, 10:39
create table رو بايد كامل بنويسيد(نام جدول و فيلدها)
كد رو كامل بگذاريد

mohamad5228
16-10-2008, 00:17
با سلام
چطوری میتونم رکوردی رو که با sql استخراج کردم به یک متغیر نسبت بدم؟
مثلا
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدمقداری را که در dbgrid دارم بهیک متغیر بدهم.
در ضمن آیا میشه از if , for در sql استفاده کرد؟

F A R H A D
18-10-2008, 09:03
سلام. خوش آمديد

چطوری میتونم رکوردی رو که با sql استخراج کردم به یک متغیر نسبت بدم؟
اينطوري:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


در ضمن آیا میشه از if , for در sql استفاده کرد؟
بله. البته براي حلقه هاي تكرار بايد از while استفاده كنيد

موفق باشيد

nell
19-10-2008, 23:54
فقط ميتونم بگم عالي بود آقا فرهاد يه عالمه دستت درد نكنه من خيلي وقته كه دنبال اين مطالبم

siavash1352
23-10-2008, 12:40
سلام فرهاد جان خسته نباشید من با راهنمائی های شما برنامه ای نوشته ام که در آن بعنوان مثال دو فیلد f1 و f2 تعریف شده است که هر دو varchar هستند . در صورتیکه مقدار f2 برابر null باشد چگونه با استفاده از دستور locate میتوان آن را جستجو کرد من از دستور ذیل استفاده میکنم ولی جواب نمی دهد.
locate('f1;f2',vararrayof([Edit1.text,'']),[lopartialkey]) l
در ضمن وقتی بجای اینکه در f2 مقدار null ذخیره شود مقدار '' را قرار دهیم دستور جواب میدهد.
خواهشمندم در صورت امکان راهنمائی نمائید

ntlog
23-10-2008, 22:32
تا حالا شده نیاز باشه از دو تا Table استفاده کنید ؟ مخصوصا لازم باشه که این 2 تا Table با هم در ارتباط باشند.

مثلاً یه برنامه داشته باشید.
1- قسمت ثبت مشخصات مشتری داره
2- یه فرم ( مثل فرم مشاور املاک برای فروش یا اجاره دادن خانه یا هر چیز دیگر ) که برای هر مشتری هر چند تا که دلمون خواست بتونیم وارد کنید
توضیح ساده تر
در جدول اولی اسم و نام و یک سری مشخصات درباره مشتریمون ، یعنی برای هر مشتری یک رکورد
در جدول دومی بی نهایت فرم برای هر مشتری
---------------------------------------------------------------
اگه از هر کسی بپرسن چطوری این 2 تا جدول رو به هم مرتبط می کنی ؟
در جواب میگه : شماره رکورد جدول اول رو تو یه فیلد در جدول دوم ذخیره مینکم

این کار خوبیه ، اما !!
اگه از جدول اول خواستیم یک رکورد را حذف کنیم ( یک مشتری را حذف کنید ) کنترل برنامه به هم می خوره

راه حل خوب برای حل این مشکل چیه ؟
منتظرم .

F A R H A D
26-10-2008, 11:59
سلام فرهاد جان خسته نباشید من با راهنمائی های شما برنامه ای نوشته ام که در آن بعنوان مثال دو فیلد f1 و f2 تعریف شده است که هر دو varchar هستند . در صورتیکه مقدار f2 برابر null باشد چگونه با استفاده از دستور locate میتوان آن را جستجو کرد من از دستور ذیل استفاده میکنم ولی جواب نمی دهد.
locate('f1;f2',vararrayof([Edit1.text,'']),[lopartialkey]) l
در ضمن وقتی بجای اینکه در f2 مقدار null ذخیره شود مقدار '' را قرار دهیم دستور جواب میدهد.
خواهشمندم در صورت امکان راهنمائی نمائید

با سلام و احترام به شما دوست عزيز متاسفانه در اين قسمت اين امكان وجود ندارد. locate و sql دو مقوله كاملا جدا هستند.

F A R H A D
26-10-2008, 12:09
تا حالا شده نیاز باشه از دو تا Table استفاده کنید ؟ مخصوصا لازم باشه که این 2 تا Table با هم در ارتباط باشند.
بسيار زياد! join رو جستجو كنيد

اگه از هر کسی بپرسن چطوری این 2 تا جدول رو به هم مرتبط می کنی ؟
در جواب میگه : شماره رکورد جدول اول رو تو یه فیلد در جدول دوم ذخیره مینکم
شخصي كه ازش سوال پرسيدين جواب جالبي نداده ها!

راه حل خوب برای حل این مشکل چیه ؟
در جدول اول فيلدي رو اضافه كنيد كه يه شمارنده باشه و اتوماتيك افزايش پيدا كنه
در جدول دوم اين شماره رو ذخيره كنيد. شماره ركورد اصلا راه حل مناسبي نيست
اگر ادامه سوالات هم به موضوع اين تاپيك مربوط نميشه لطفا در جاي ديگري مطرح كنيد، من يا ديگر دوستانم جواب خواهيم داد
موفق باشيد

siavash1352
11-11-2008, 09:30
فرهاد جان سلام خسته نباشید سؤالاتی داشتم خواهشمندم جواب دهید

1- در درسهای ارائه شده در خصوص SQL در قسمتی ذکر نمودید در هنگام استفاده از Insert یا Update یا delete بهتر است بجای ADOQuery از ADOCommand استفاده شود علت چیست ؟

2- در خصوص restore database من بعضی وقتها چه از طریق کد نویسی و چه از طریق خود SQL از این دستور استفاده میکنم با پیغام خطای ذیل مواجه میشوم . چگونه میشود آن را حل نمود ؟ وقتی در داخل برنامه و هنگامی که فایل باز است میخواهیم این دستور را اجرا نماییم آیا امکان پذیر است ؟

Exclusive access could not be obtained because the database is in use
RESTORE DATABASE is terminating abnormally

F A R H A D
12-11-2008, 08:59
سلام

1- در درسهای ارائه شده در خصوص SQL در قسمتی ذکر نمودید در هنگام استفاده از Insert یا Update یا delete بهتر است بجای ADOQuery از ADOCommand استفاده شود علت چیست ؟
به نقل از codegear:

At times I have used a TADOQuery to execute SQL that does not return data, such as running an Update SQL command. If you end up doing this rather than using a TADOCommand, please set Property ExecuteOptions.eoExecuteNoRecords to True first.

If this is allowed to be False, a Recordset is built in the background which is "costly" and not required. You only need the Recordset when you are returning data. The effect of this setting is most noticeable (I have had improvements approaching ten-fold) when performing updates that apply to many rows, but really this setting should be set to True for any Update, Insert, or Delete SQL.

Of course you can avoid this altogether by using a TADOCommand instead of a TADOQuery.
به بيان ساده تر و خلاصه تر براي زماني كه recordsetي توسط دستورات بازگردنده نميشه، بهتره كه از adocommand استفاده كنيد


2- در خصوص restore database من بعضی وقتها چه از طریق کد نویسی و چه از طریق خود SQL از این دستور استفاده میکنم با پیغام خطای ذیل مواجه میشوم . چگونه میشود آن را حل نمود ؟ وقتی در داخل برنامه و هنگامی که فایل باز است میخواهیم این دستور را اجرا نماییم آیا امکان پذیر است ؟

Exclusive access could not be obtained because the database is in use
RESTORE DATABASE is terminating abnormally
از پيغام خطا مشخصه كه چون در حال استفاده از ديتابيس هستيد نميتونيد جايگزينش كنيد. يك adoconnection ديگه روي فرم بذاريد و به ديتابيس master متصل كنيد و بعد restore كنيد. ضمن اينكه adoconnection مربوط به ديتابيس مورد نظر رو غير فعال كنيد

siavash1352
13-11-2008, 10:00
با سلام خدمت شما از اینکه وقت میگذارید و به سؤالات اینجانب پاسخ میدهید خیلی متشکرم . دو سؤال داشتم اگر مقدور است پلسخ دهید

1- چگونه میشود مانند دستور row_naumber در sql2005 در sql2000 نیز استفاده کرد؟
2- من اطلاعات خود را در سالهای مختلف ذخیره میکنم و برای نمایش کلیه اطلاعات مربوط به یک فیلد خاص در این سالها از یک حلقه for و دستور union all استفاده میکنم . اگر سالها پشت سر هم باشند مشکلی ندارم ولی اگر در این حلقه یک سال موجود نباشد با خطای invalid object name mytable مواجه میشوم . حال سؤال من اینست که آیا میشود در ضمن عملیات حلقه و عدم وجود بانک مربوط به یک سال از این خطا عبور کرد یا بایستی قبل از ورود به حلقه ، بانکهای سالها چک شوند تا از موجود بودن آنها مطمئن شوم؟

F A R H A D
13-11-2008, 13:53
1- چگونه میشود مانند دستور row_naumber در sql2005 در sql2000 نیز استفاده کرد؟
اطلاع ندارم. شکل دستور رو بنویسید

2- من اطلاعات خود را در سالهای مختلف ذخیره میکنم و برای نمایش کلیه اطلاعات مربوط به یک فیلد خاص در این سالها از یک حلقه for و دستور union all استفاده میکنم . اگر سالها پشت سر هم باشند مشکلی ندارم ولی اگر در این حلقه یک سال موجود نباشد با خطای invalid object name mytable مواجه میشوم . حال سؤال من اینست که آیا میشود در ضمن عملیات حلقه و عدم وجود بانک مربوط به یک سال از این خطا عبور کرد یا بایستی قبل از ورود به حلقه ، بانکهای سالها چک شوند تا از موجود بودن آنها مطمئن شوم؟
بله. با دستور زیر از وجود جداول مطمئن بشید:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

siavash1352
15-11-2008, 10:47
فرهاد جان سلام از اینکه زیاد سؤال میکنم معذرت می خواهم . بذار به پای مبتدی بودنم .
تا آنجا که من فهمیدم دستور EXEC SP_Tables کلیه table های database را نشان میدهد اما من می خواهم در حلقه اگر table موجود نبود دستور select اجرا نشود مانند استفاده از شرط if

با تشکر

F A R H A D
18-11-2008, 00:45
فرهاد جان سلام از اینکه زیاد سؤال میکنم معذرت می خواهم . بذار به پای مبتدی بودنم .
تا آنجا که من فهمیدم دستور EXEC SP_Tables کلیه table های database را نشان میدهد اما من می خواهم در حلقه اگر table موجود نبود دستور select اجرا نشود مانند استفاده از شرط if

با تشکر

شما یک query با این دستور بگیرید. بعد برای اجرای select یک if بنویسید که اگر نام جدول مورد نظر شما در رکوردهای یافته شده توسط query بود، دستور select هم اجرا بشه

siavash1352
24-11-2008, 08:55
سلام فرهاد جان خسته نباشید
من در database خود بعنوان مثال دو table به نامهای tab1 و tab2 دارم . از database خود backup میگیرم در هنگام restore کردن چگونه میشود فقط یکی از این table ها مثلأ tab1 را restore کرد و table دیگر مثلأ tab2 بدون تغییر بماند

F A R H A D
25-11-2008, 08:35
سلام فرهاد جان خسته نباشید
من در database خود بعنوان مثال دو table به نامهای tab1 و tab2 دارم . از database خود backup میگیرم در هنگام restore کردن چگونه میشود فقط یکی از این table ها مثلأ tab1 را restore کرد و table دیگر مثلأ tab2 بدون تغییر بماند

شما زماني كه از تمام ديتابيس backup ميگيريد طبيعتا تمام جدول ها رو هم شامل ميشه. براي كار شما فكر ميكنم بهتره قبل از restore كردن محتويات جدولي رو كه قرار هست بدون تغيير بمونه در شيئي مانند clientdataset بريزيد و پس از restore ركوردها رو باز نويسي كنيد. اين راه حلي هست كه به ذهن من رسيد (لطفا اين سوالات رو در تاپيك هاي ديگر مطرح كنيد)