صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 51

نام تاپیک: یادگیری SQL استاندارد با استفاده از SQLite

  1. #1

    یادگیری SQL استاندارد با استفاده از SQLite

    سلام

    آیا مایلید با هم SQL استاندارد را بیاموزیم؟

    اگر مایل باشید بحثی مانند MySQL می توانیم با هم داشته باشیم و تمام دستورات و توابع و پروسیجرهای SQL را و یا حتی زبان P-SQL را با هم بررسی کنیم؟

    آیا از قبل با SQLite که اینروزها دارد جای زیادی باز میکند آشنا بوده اید؟
    به نظر شما وقت آن نیست که فراگیری SQL را به طور جدی دنبال کنید؟

    خب برای شروع کار ODBC را از http://www.ch-werner.de/sqliteodbc/ دانلود کرده و در صورتیکه یک محیط گرافیکی برای کار می خواهید از اینجا یک GUI گرافیکی دریافت کنید:
    http://sqliteadmin.orbmu2k.de/

    بعد از دریافت آنها را نصب کنید.

    و منتظر پست بعدی باشید.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  2. #2
    ابتدا خاطر نشان کنم که هدف من یاد دادن استاندارد SQL92 از طریق SQLite است.

    یعنی اینکه این مقاله کلی است و برای هر دیتابیس دارای استاندارد فوق معتبر است فقط تغییرات کمی باید بدهید.

    مرجع SQL92 : http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt


    خب سایت اصلی http://www.sqlite.org/ است که از http://www.sqlite.org/docs.html برای راهنمایی می توانید استفاده کنید.


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


    خب ابتدا در هر بانک اطلاعاتی که کار میکنید باید دو مورد را به خاطر بسپارید:
    ۱ - مجوز دسترسی داشته باشید مانند MySQL و SQL Server که کاربر تعریف میکنید اما بانک مورد بحث ما نیاز ندارد.
    ۲ - یک بانک اطلاعاتی از قبل تعریف شده باشد (جداول نیاز نیست فقط بانک) مثلا شما در mysql همیشه بانک mysql را دارید. خب برای این مورد باید فقط یک فایل خالی ایجاد کنیم. با هر روشی یک فایل خالی در هر جایی خواستید ایجاد کنید. یکی از این روشها در foxpro مانند زیر است:

    FUNCTION CreateSQLiteDatabase
    LPARAMETERS lcDatabaseName
    LOCAL lnFileHandle
    lnFileHandle = FCREATE(lcDatabaseName)
    IF lnFileHandle > 0
    FCLOSE(lnFileHandle)
    RETURN .T.
    ELSE
    RETURN .F.
    ENDIF
    ENDFUNC

    خب با فرستادن نام به این تابع یک فایل خالی ساخته میشود اگر بازگشت .t. بود فایل ساخته شده در غیر اینصورت خیر. مهم نیست پسوند چه چیزی باشد.

    با این تابع یک فایل خالی به اسم c:\db1.db می سازیم.

    حال یک ارتباط بین بانک و فاکس می سازیم:

    FUNCTION CreateConnectionSQLite
    LPARAMETERS lcDatabaseName
    RETURN SQLSTRINGCONNECT("DSN=SQLite3 Datasource;Database="+lcDatabaseName+;
    ";StepAPI=0;SyncPragma=NORMAL;NoTXN=0;Timeout=1000 00;ShortNames=0;LongNames=0;NoCreat=0;NoWCHAR=0;Lo adExt=;")
    ENDFUNC

    کار تمام است. حال تک تک دستورات SQL را با هم تست میکنیم:

    اولین دستور ساخت جدول است مانند فاکس پرو دستور ساخت به قرار زیر است:
    http://www.sqlite.org/lang_createtable.html
    توجه کنید هر دیتابیسی انواع مختلفی از داده را پشتیبانی میکند و نوع داده در دیتابیس مشخص است.
    آخرین ویرایش به وسیله rezaTavak : شنبه 01 دی 1386 در 08:33 صبح
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  3. #3
    متاسفانه FOXPRO در ارتباط با بانکهای اطلاعاتی به خوبی عمل نمی کند.

    چون تمام کارهایی که در یک بانک قابل انجام است را من توسط جاوا به راحتی انجام می دهم.

    بنابراین برای ساخت بانک اطلاعاتی و جداول اطلاعاتی بهتر است از درون خود نرم افزار مدیریت بانک اینکار را انجام دهیم.

    اگر کسی راه بهتری دارد در اینجا عنوان کند.

    چون SQLite خط دستوری است کار از طریق FOXPRO با فرمان RUN به راحتی قابل انجام است. همچنین در حین نصب ODBC یک شاخه در Program file\SQLite ODBC Driver\ ساخته می شود. که دارای فایلهایی است. مثلا sqlite.exe که مدیریت این نوع دیتابیس است.

    آنرا در فاکس پرو با فرمان زیر اجرا کنید:

    RUN /n "D:\Program Files\SQLite ODBC Driver\sqlite.exe" "d:\db1.db" "create table tbl1 (cName varchar(20), iId integer);"
    پارامتر اول نام فایل اجرایی است که آنرا بسته به مسیر عوض کنید.
    پارامتر دوم هم نام بانک اطلاعاتی است که با آن کار میکنید اگر بانک وجود نداشته باشد ساخته خواهد شد.
    پارامتر سوم هم دستور SQL است که باید انجام شود.

    با این دستور یک جدول اطلاعاتی از داخل فاکس ساخته اید. البته می توانید SQLite را اجرا و از داخل آن نیز بانک را بسازید. اما اینجا هدف من آموزش است و نیازی به ورود به این محیط نمی بینم.

    خب دستور اصلی که امروز بررسی کردیم Create Table است اما راجع به آن بیشتر بدانیم.

    این دستور برای ساخت جدول بکار می رود و دارای پارامترهایی است که یک جدول قدرتمند رابرای شما به ارمغان می آورد.

    من بقیه دستور را با توجه به توضیحات فوق ادامه می دهم یعنی اینکه فقط روی این دستور مانور می دهیم.

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

    یعنی :

    create table tbl1 (cname varchar(20));
    حال ممکن است بخواهیم که فیلد تهی نباشد:

    create table tbl1 (cname varchar(20) not null);
    حال ممکن است بخواهیم که بین فاکس و SQLite ارتباط بر قرار کرده و بانکها را به روز کنیم باید یک فیلد PRIMARY داشته باشیم گرچه خود SQLite همیشه یکی می سازد اما شما نیز میتوانید اینکار را انجام دهید.

    create table tbl1 (cname varchar(20) ,id integer primary key);
    یا ممکن است بخواهید یک فیلد اتوماتیک اضافه شود:

    create table tbl1 (cname varchar(20) ,id integer autoincrement);
    توجه در فاکس پرو برای بروز رسانی جدوال باید حتما یک فیلد Primary key unique وجود داشته باشد. )منحصر به فرد(


    create table tbl1 (cname varchar(20) ,id integer primary key unique);
    توجه توجه: فقط یک فیلد باید primary key باشد.



    اما انواع داده در SQLite:

    انواع عددی:
    Integer, Float, Real, Numbric
    بسته به چیزی که ذخیره می کنید طول متفاوت است.

    انواع کاراکتری:
    varchar,nvarchar
    که در آنها طول نیز باید مشخص باشد مثلا cName varchar(20) طول را 20 عنوان میکنید.

    انواع متنی بلند:
    Text مانند Memo در فاکس پرو است.

    انواع زمان:
    time,date,timestamp که خود گویای چیزی که در آن ذخیره میکند می باشد.

    نوع برای Object:
    BLOB که مانند general در فاکس پرو است.

    نوع منطقی:
    Boolean که مانند logical در فاکس پرو است.




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






    این دستور میتواند یک جدول موقت هم بسازد با CREATE [TEMP | TEMPORARY] TABLE که فقط برای کسی که با آن Connection کار میکند قابل نمایش است و به محض بسته شدن connection آن جدول هم از بین می رود. مانند view یا query.



    همچنین می توانید از خروجی یک جدول جدول جدید با دستور select بسازید.
    آخرین ویرایش به وسیله rezaTavak : یک شنبه 02 دی 1386 در 13:04 عصر
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  4. #4
    آیا می دانید varchar چه تفاوتی با nvarchar دارد؟

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

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    mashhad
    پست
    336
    اقای توکل ممنون از لطف شما
    لطفا ادامه دهید این موضوع را و اگر لطف کنید این بانک را با فاکس مقایسه فرمائید (از لحاظ امنیت سرعت و مخصوصا برای استفاده کنندگان نیاز به نصب چه امکاناتی میباشد)

  6. #6
    چشم حتما اما هدف من SQL-92 است نه SQLite چون باید کم کم دیگه دستورات قدیمی را فراموش کنیم.
    در مورد SQLite این را بدانیم که یک چیزی در حد فایلهای MDB فقط جدول اطلاعاتی دارد. و چیزی بزرگی مانند MySQL نیست بنابراین با نصب ODBC به تنهایی در فاکس پرو نیاز به چیزی دیگر ندارد.
    این روزها بذل توجه بسیاری از برنامه نویسان است بخصوص python که کار را در این زبان اسکریپتی راحت کرده است.


    راستی یادم رفته بگم که SQL یک استاندارد ISO هم هست:
    ISO/IEC 9075:1992
    شماره استانداردی است که من از آن بحث میکنم.



    خب ادامه بحث:






    بعد از ساخت جدول شما به راحتی می توانید به اطلاعات آن دسترسی داشته باشید.

    دو گزینه در فاکس پرو داریم:
    ۱ - اضافه کردن به یک دیتابیس فاکس و ساختن ویوی راه دور به طور ویژوال که مانند یک جدول فاکس پرو خواهد شد.
    ۲ - استفاده محض از دستورات SQL

    هدف من دومی است چراکه اولی را قبلا در MySQL توضیح داده ام.


    خب برای ارتباط با یک جدول:
    ابتدا یک Connection باید ساخته شود.
    سپس یک ویو ساخته شود.
    FUNCTION CreateConnectionSQLite
    در پستهای قبلی اینکار را انجام خواهد داد. ویک عدد بر می گرداند این عدد دو حالت دارد:
    بالاتر از صفر یعنی ارتباط انجام شده و شماره ارتباط که این شماره برای موارد بعدی کاربرد دارد.
    منهای یک یعنی به عللی خطا رخ داده است.


    و برای ساخت ویو دستور SQLEXEC بکار می رود. که شکل آن اینگونه است:

    a=CreateConnectionSQLite("d:\db1.db")
    ?SQLEXEC(a,"Select ABS(10);")


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

    اگر نتیجه عدد بود یعنی اینکه SQLEXEC به درستی انجام شده است و یک cursor ساخته خواهد شد.


    SQLEXEC(a,"select * from tbl1","tbl1")


    در اینجا یک cursor با نام tbl1 ساخته می شود.
    آخرین ویرایش به وسیله rezaTavak : پنج شنبه 06 دی 1386 در 09:02 صبح
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  7. #7
    تذکر نکته ای که اکنون به آن رسیدم این است که اگر با SQLiteAdmin بسازید در فاکس خطا ندارید اما از طریق خود sqlite خطا دارید!
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  8. #8
    شما می توانید این مباحث را در MDB هم دنبال کنید پس یک فایل mdb هر جایی که راحتید بسازید. و هر جدولی که خواستید در آن تعریف کنید.

    توجه: فیلد primary key باید داشته باشد.

    با تابع زیر با بانک ارتباط بر قرار کنید:

    FUNCTION CreateConnectionMdb
    LPARAMETERS lcDatabaseName
    RETURN SQLSTRINGCONNECT("DSN=mdb;DBQ="+lcDatabaseName+;
    ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=a;UID= admin;")
    ENDFUNC



    البته هر طور که خواستید بقیه پارامترها را نیز تنظیم کنید. من فقط دیتابیس را تنظیم می کنم.

    و به طریقه زیر مثلا فایل d:\db1.mdb را فرا می خوانم:

    a=CreateConnectionMdb("d:\db1.mdb")

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

  9. #9
    خب حالا فرض کنیم connection ایجاد شده با نام a طبق توابع فوق. اول تست کنید که a یک عدد بزرگتر از صفر باشد. (به ازای ساخت هر کانکشن یک عدد اختصاص می یابد. که از یک شروع می شود.)

    حالا دستور امروز:

    برای اینکه در یک بانک اطلاعاتی اطلاعات وارد شود و مانند append در فاکس از دستور insert into استفاده می شود. که دقت کنید جدول بانکی قابل insert است که دارای فیلد primary باشد.

    نمونه اول تمام فیلدها بروز شوند:
    فرض کنید دو فیلد id,cName وجود دارد


    ?SQLEXEC(a,"insert into tbl1 values (1,'k')")

    نمونه دوم:
    فقط یک فیلد تعیین شود:



    ?SQLEXEC(a,"insert into tbl1 (cname) values ('k')")








    **** میتوانید جداول MDB را هم از داخل فاکس پرو درست کنید همان دستور create table

    مثال:

    ?SQLEXEC(a,"create table tbl2 ( a TEXT(30))")
    علامت ? در دستورات فوق بدین معنی است که اگر عدد منهای یک بود خطا رخ داده در غیر اینصورت خطا رخ نداده است.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  10. #10
    کاربر دائمی
    تاریخ عضویت
    دی 1382
    محل زندگی
    mashhad
    پست
    336
    جناب اقای توکل با سلام و تشکر
    شما فرمودید که فاکس در ارتباط با بانکهای اطلاعاتی به خوبی عمل نمی کند منظورتان چیست
    و میخوام بدانم که بین Access و SQLite کدام بهتر است از لحاظ سرعت و امنیت و حجم اطلاعات و شبکه و .....
    و چگونه میشود همانند بانکهای خود فاکس use و brow و ... در command فاکس برای اینگونه بانکها انجام داد

  11. #11
    کاربر دائمی آواتار javad_1349
    تاریخ عضویت
    آذر 1385
    محل زندگی
    سرزمین خدا
    پست
    167

    Exclamation

    **** میتوانید جداول MDB را هم از داخل فاکس پرو درست کنید همان دستور create table

    ضمن تشکر از آقای توکل
    برای ایجاد بانک اطلاعاتی درون اکسس پیغام ذیل ظاهر میگردد
    Connection handle is invalid
    می دهد
    اگر میشود طریقه فراخوانی table را از دورن database اکسس توضیح دهید آیا مثل visual پس از فراخوانی میشود use کرد یا نه
    لطفا راهنمایی فرمایید

  12. #12
    نقل قول نوشته شده توسط naderigh مشاهده تاپیک
    جناب اقای توکل با سلام و تشکر
    شما فرمودید که فاکس در ارتباط با بانکهای اطلاعاتی به خوبی عمل نمی کند منظورتان چیست
    و میخوام بدانم که بین Access و SQLite کدام بهتر است از لحاظ سرعت و امنیت و حجم اطلاعات و شبکه و .....
    و چگونه میشود همانند بانکهای خود فاکس use و brow و ... در command فاکس برای اینگونه بانکها انجام داد
    دلیل این است که خود فاکس پرو در اصل برای کار با بانک خارجی طراحی نشده بود. و این امکان بعدا اضافه شد.

    من در جاوا به راحتی همه کار میکنم اما در فاکس خیلی اذیت میکنه.

    Access یک دیتابیس سبک است و قابلیت رمز گذاری و... دارد. ساختار پیچیده ای دارد.

    (یعنی مانند dbf ساده نیست.) سرعتش در بانک بزرگ کم است. و امنیتش هم خوب نیست.

    همینطور دیگر مدلهای مانند paradox,SQLite و...

    برای امنیت و سرعت از بانکهای بزرگ استفاده کنید مانند:
    MySQL,PostgreSQL,M$SQLServer,Db2,Sybase,Oracle و...


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


    می توانید از browse استفاده کنید بعد از فرمان SQLEXEC یک جدول یا بهتر بگوییم یک query مانند خود فاکس بر می گرداند. اما برای update باید از دستوراتی مانند INSERT INTO,UPDATE و... توسط تابع SQLEXEC به بانک داده شود.

    use نمیتوانید استفاده کنید چون باید اول Connection ساخته شود و بعد ...
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  13. #13
    نقل قول نوشته شده توسط javad_1349 مشاهده تاپیک
    **** میتوانید جداول MDB را هم از داخل فاکس پرو درست کنید همان دستور create table

    ضمن تشکر از آقای توکل
    برای ایجاد بانک اطلاعاتی درون اکسس پیغام ذیل ظاهر میگردد
    Connection handle is invalid
    می دهد
    اگر میشود طریقه فراخوانی table را از دورن database اکسس توضیح دهید آیا مثل visual پس از فراخوانی میشود use کرد یا نه
    لطفا راهنمایی فرمایید

    خب شما باید از ایجاد شدن کانکشن مطمئن شوید یعنی باید حتما عدد a را مثلا در مثال تست کنید بزرگتر از ۰ با شد.

    بعد از کانکت هر کاری می توانید بکنید. مثلا با SQLEXEC می توانید یک کوئری بسازید و اطلاعات را مشاهده کنید. یا ...

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

  14. #14
    اما دستور امروز:

    ساده است برای حذف یک جدول از بانک:


    DROP TABLE tbl1





    اما یک چیز کلی هم بدانید بد نیست.



    در SQL Server می‌توانید چندین بانک داشته باشید که بعد از ایجاد کانکشن به یک بانک می توانید (اگر حق دسترسی داشتید.) به بانکهای دیگر هم دسترسی داشته باشید. در این صورت این قانون کلی را به خاطر بسپارید:
    برای دسترسی به یک جدول از بانک ابتدا نام بانک و سپس نام جدول را ذکر کنید.
    یعنی برای حذف یک جدول در بانکی به نام Personal و جدول
    tbl1 مانند زیر باید عمل شود:

    DROP TABLE Personal.tbl1


    یا برای اضافه کردن رکورد قبل از نام جدول نام بانک را ذکر کنید.






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

    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  15. #15
    راستی یادم رفت اما از این به بعد تمام دستورات به صورت زیر در فاکس پرو بکار ببرید:


    ?SQLEXEC(nConnectionNumber,"STATEMENT")


    که در آن STATEMENT دستورات SQL است و nConnectionNumber شماره کانکشن ساخته شده.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  16. #16
    دوستانی که مباحث را در MS Access دنبال می کنند می توانند از راهنمای D:\Program Files\Microsoft Office\OFFICE11\1033\acmain11.chm

    استفاده کنند. البته مشخص است که من Office را در مسیر
    D:\Program Files\Microsoft Office\OFFICE11\

    نصب کرده ام. شما مسیر خودتان را بدهید.


    اما برای رفتن به یک صفحه در chm ابتدا Internet Explorer را باز کنید و مثلا آدرس زیر را بزنید:

    mk:@MSITStore:D:\Program%20Files\Microsoft%20Offic e\OFFICE11\1033\acmain11.chm::/html/dasqlcreatetable.htm
    البته باز هم متذکر می شوم مسیر فایل را درست بدهید و فقط از Internet Explorer استفاده کنید.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  17. #17
    دستور امروز :

    شما با دستور replace در فاکس پرو محتویات جداول را عوض می کنید در SQL این دستور به شکل

    UPDATE table SET fields WHERE condition
    مثلا فرض کنید که شما می خواهید محتویات یک رکورد را عوض کنید:

    UPDATE tbl1 SET cName="reza" WHERE "id=4"
    اگر چند فیلد بود بین هر کدام ویرگول بگذارید.

    UPDATE tbl1 SET cName="reza",cFamily="tavakol" WHERE "id=4"
    شرط WHERE را هر طور صلاح دیدید بگذارید. در اینجا where مانند FOR در دستور REPLACE است. و متاسفانه معادلی برای WHERE,REST هم نداریم. برای ALL هم می توانید از شرط همیشه درست استفاده کنید یا شرط نگذارید.

    مثالهایی هم در راهنمای فاکس پرو وجود دارد.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  18. #18
    چون من همیشه DNS می سازم یادم نبود که نام DNS را ذکر نکنم. برای ارتباط با mdb تابع را به صورت زیر اصلاح کنید:


    FUNCTION CreateConnectionMdb
    LPARAMETERS lcDatabaseName
    RETURN SQLSTRINGCONNECT("Driver={Microsoft Access Driver (*.mdb)};DBQ="+lcDatabaseName+;
    ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;PWD=a;UID= admin;")
    ENDFUNC


    برای SQLite


    FUNCTION CreateConnectionSQLite
    LPARAMETERS lcDatabaseName
    RETURN SQLSTRINGCONNECT("Driver={SQLite ODBC (UTF-8) Driver};Database="+lcDatabaseName+;
    ";StepAPI=0;SyncPragma=NORMAL;NoTXN=0;Timeout=1000 00;ShortNames=0;LongNames=0;NoCreat=0;NoWCHAR=0;Lo adExt=;")
    ENDFUNC




    همینطور برای SQL server


    DRIVER=SQL Server;SERVER=ُServerName;APP=Microsoft Visual FoxPro;WSID=SRV2;DATABASE=DatabaseName;Trusted_Con nection=Yes


    و...
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  19. #19
    دستور امروز ساده است. برای حذف یک یا چند رکورد :


    DELETE FROM [database-name .]table-name[WHERE expr]

    که ذر آن رکوردهای حایز شرط پاک خواهند شد. اگر هم شرطی نباشد همه رکوردها پاک خواهند شد.

    مثال:
    حذف تمام رکوردهای یک جدول:

    DELETE FROM tbl1


    حذف تمام کسانی که نام آنها علی است:


    DELETE FROM tbl1WHERE cName='ali'
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  20. #20
    امروز پر استفاده ترین دستور Sql را با هم مرور می کنیم یعنی SELECT که از قبل هم کلی با آن کار کرده اید.

    در ساده ترین حالت ممکن:

    SELECT * FROM tbl1

    تمام رکوردهای یک جدول را بر می گرداند. میدانید * معنی کل فیلدها را میدهد. اما ممکن است بانکی مانند SQLite که محدودیتی در تعداد فیلد در هر رکورد ندارد در FOXPRO ایجاد خطا کند. چراکه فاکس پرو فقط ۲۵۴ فیلد در هر رکورد می تواند داشته باشد.

    مثال دوم:

    فقط فیلدهایی که مشخص میکنیم:


    SELECT cName,cFamily FROM tbl1


    فقط فیلدهای cName,cFamily برگشت داده می شود.

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

  21. #21
    نامهای alias یا مستعار:

    برای دو جدول می توانیم دستوری مانند زیر داشته باشیم:

    SELECT a.cName,b.Salary FROM tbl1 AS a, tbl2 AS b
    در اینجا نامهای a به tbl1 و b به tbl2 اشاره می کند. که با کلمه کلید AS نام مستعار تعریف می شود. همینطور در مورد فیلدها هم نام مستعار داریم:

    SELECT a.cName AS 'Nam',b.Salary AS 'Hoghoogh' FROM tbl1 AS a, tbl2 AS b
    پس از ساخت Query نام فیلدها Nam و Hoghoogh خواهد بود. اما این بیشتر به این درد می خود که ممکن است شما در پرس و جو فیلد محاسبات داشته باشید:

    SELECT a.cName AS 'Nam',b.Salary-b.Tax AS 'PureSalary' FROM tbl1 AS a, tbl2 AS b
    پس نکته دیگر هم اینکه محاسبات فیلدها هم در این دستور جایز است.



    اما دقت کنید دستور فوق اگر در جدول اول ۲۰۰ رکورد و دومی ۱۰۰ رکورد باشد ۲۰۰۰۰ رکورد نتیجه آن خواهد بود. و به ازای هر ردیف جدول اول تمامی ردیفهای جدول دوم برگردانیده می شود.



    محاسبات:

    برخی از بانکها به شما اجازه میدهند توابع محاسباتی هم در این دستور انجام دهید. مثلا :

    SELECT SIN(2)
    که سینوس زاویه ۲ رادیان را بر می گرداند. (در SQL Server محاز است) اما در SQLite این توابع مجاز هستند:
    http://sqlite.org/lang_expr.html

    در اکسل:
    mk:@MSITStore:D:\Program%20Files\Microsoft%20Offic e\OFFICE11\1033\acmain11.chm::/html/FunctionsAvailableInAPageOrInPivotta.htm
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  22. #22
    چیزی که مهم است این است که جداول در بانک رابطه داشته باشند. و چنین مدیری را RDBM می گویند.

    فرض کنید مشخصات پرسنل در یک جدول به نام preson و حقوق آنها در salary است و فیلد رابطه‌ای آنها nRelate است برای لیست حقوقی بر اساس نام دستور زیر را بکار می بریم:

    SELECT a.cName , b.nPay FROM Person AS a LEFT JOIN Salary AS b ON a.nRelate=b.nRelate


    خب دیدید که برای ارتباط از JOIN استفاده کردیم و شرط را با On نوشتیم. اما ارتباط از چند نوع است:
    [NATURAL][LEFT | RIGHT | FULL][OUTER | INNER | CROSS] JOIN


    Left در جدول اول وجود دارد مهم نیست جدول دوم وجود داشته باشد اگر باشد که مقدار مناسب اگر نباشد NULL
    Right برعکس بالاست.
    FULL باید در هر دو جدول وجود داشته باشد.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  23. #23
    همیشه این مشکلو داشتم با این select که فوق رکوردهایی رو نمایش می داد که در هردو تا وجود
    داشته باشد اما مطلب فوق شما مشکل منو حل کرد
    من با این کد کار می کردم

    select a.per,b.fname from a,b where a.per=b.per

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

    select cod,sharh,(select sum(mab) from table2 where table1.cod=table2.cod) from table1

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

    select cod,sharh,cod as mab from table1
    go top
    do whil.not.eof()
    _cod=cod
    select sum(mab) as a1 from table2 were cod=_cod
    select table1
    repl mab with table2.a1
    skip
    enddo

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

  24. #24
    خب ما هنوز وارد بحث GROUP BY نشدیم. sum,count,avg و... نیاز به GROUP BY دارد که در دستورات شما نیست. اجازه بدهید بحث دنبال شود و ببینید با GROUP BY مشکل شما حل می‌شود؟

    یعنی من کد اول را به صورت زیر اصلاح می کنم:


    SELECT a.cod,a.Sharh,SUM(b.mab) AS mab;
    FROM Table1 AS a INNER JOIN Table2 ON a.cod = b.cod;
    GROUP BY a.cod,a.Sharh
    البته تست کنید ببینید درست نوشتم؟
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  25. #25
    خب داشتم دستور Join را توضیح میدادم سرویسمان داشت می رفت نیمه کاره رها شد اما بهتر است مطلب را با مثال بیان کنم:
    http://en.wikipedia.org/wiki/Join_(sql)

    توضیح کاملی در این خصوص داده که آنرا پی می گیرم.

    Department Table DepartmentID DepartmentName
    31 Sales
    33 Engineering
    34 Clerical
    35 Marketing

    Employee Table LastName DepartmentID
    Rafferty 31
    Jones 33
    Steinberg 33
    Robinson 34
    Smith 34
    Jasper 36
    جداول مثال است که با هم بررسی میکنیم:
    ۱ - INNER JOIN
    مفهوم کلی آن این است که رکوردهایی که در جدول یک است باید در جدول دوم هم نظیر داشته باشد یعنی اینکه اگر در جدول اول رکوردی بود اما در دومی نبود یا برعکس در این پرس و جو نمایش داده نخواهد شد به مثال توجه کنید:

    Example of an explicit inner join:
    SELECT *
    FROM employee
    INNER JOIN department
    ON employee.DepartmentID = department.DepartmentID

    Example of an implicit inner join:
    SELECT *
    FROM employee, department
    WHERE employee.DepartmentID = department.DepartmentID

    Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
    Smith 34 Clerical 34
    Jones 33 Engineering 33
    Robinson 34 Clerical 34
    Steinberg 33 Engineering 33
    Rafferty 31 Sales 31


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

    اما دو نوع INNER داریم یکی
    Equi-join


    و دیگری

    Natural join


    این دو تقریبا یکی است با این تفاوت که دومی فیلد مشترک را یکبار در گزارش بدون نام جدول می آورد اما اولی نام تمام جدوال و تمام فیلدها حتی مشترکها را نیز بر میگرداند.
    آخرین ویرایش به وسیله rezaTavak : سه شنبه 25 دی 1386 در 11:48 صبح
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  26. #26
    Cross join

    این مانند این است که به ازای هر رکورد در جدول اول جدول دوم هر قرار گیرد. و مانند این است که اصلا اینطور دستور را صادر کنیم:

    SELECT * FROM employee, department


    معادل است با :

    SELECT * FROM employee CROSS JOIN department


    یعنی تعداد رکوردی که بر می‌گردد مساوی تعداد رکورد جدول اول در تعداد رکورد جدول دوم.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  27. #27
    مفهوم کلی آن این است که رکوردهایی که در جدول یک است باید در جدول دوم هم نظیر داشته باشد یعنی اینکه اگر در جدول اول رکوردی بود اما در دومی نبود یا برعکس در این پرس و جو نمایش داده نخواهد شد
    اگر بخواهم عکس اینعمل را انجام دهم باید چگونه این دستور را بنویسم
    برای توضیح بیشتر , دو جدول با یک فیلد مشترک ولی در جدول اول تنها رکوردهایی را میخوام که در جدول دومی وجود نداشته باشد.!!

  28. #28
    Outer joins


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

    و به صورتهای زیر است:
    left outer joins, right outer joins, and full outer joins

    حالات ممکنLeft outer join:


    تمام رکوردهای جدول اول بر می گردد و در صورتیکه رکورد متناظر در جدول دوم باشد مقدار آن در غیر اینصورت مقدار NULL بر می گردد. به مثال توجه کنید:


    SELECT *
    FROM employee
    LEFT OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID

    Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
    Jones 33 Engineering 33
    Rafferty 31 Sales 31
    Robinson 34 Clerical 34
    Smith 34 Clerical 34
    Jasper 36 NULL NULL
    Steinberg 33 Engineering 33
    می بینید که رکوردهایی که در جدول اول بود همه انتخاب شدند اما در جدول دوم آنهایی که بودند و حائز شرط در جای مناسب قرار گرفتند و آنهایی که در جدول اول نظیر نداشتند NULL شدند.

    Right outer join

    این یکی برعکس بالایی است یعنی تمام رکوردهای جدول دوم بر میگردد و اگر رکورد منتناظری در جدول اول بود بر می‌گردد در غیر اینصورت آن فیلدها NULL خواهد بود مثال:

    SELECT *
    FROM employee
    RIGHT OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID


    Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
    Smith 34 Clerical 34
    Jones 33 Engineering 33
    Robinson 34 Clerical 34
    Steinberg 33 Engineering 33
    Rafferty 31 Sales 31
    NULL NULL Marketing 35

    Full outer join


    این یکی ترکیب حالات فوق است یعنی تمام رکوردهای جدول اول و دوم بر می گردد. اگر متناظر در جدول دیگر وجود داشت مقدار مناسب در غیر اینصورت NULL جایگزین فیلدها خواهد شد. مثال:



    SELECT *
    FROM employee
    FULL OUTER JOIN department
    ON employee.DepartmentID = department.DepartmentID



    Employee.LastName Employee.DepartmentID Department.DepartmentName Department.DepartmentID
    Smith 34 Clerical 34
    Jones 33 Engineering 33
    Robinson 34 Clerical 34
    Jasper 36 NULL NULL
    Steinberg 33 Engineering 33
    Rafferty 31 Sales 31
    NULL NULL Marketing 35

    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  29. #29
    نقل قول نوشته شده توسط rahro مشاهده تاپیک
    اگر بخواهم عکس اینعمل را انجام دهم باید چگونه این دستور را بنویسم
    برای توضیح بیشتر , دو جدول با یک فیلد مشترک ولی در جدول اول تنها رکوردهایی را میخوام که در جدول دومی وجود نداشته باشد.!!
    باید ازLEFT Outer Join استفاده کنید و شرط را بگذارید و Where که هنوز به آن نرسیدم را طوری تنظیم کنید که مقدارهای جدول دوم NULL باشد.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  30. #30
    Where

    در بیشتر دستورات SQL وجود دارد و برای محدود کردن محدوده عمل یا شرط گذاری بکار می‌رود.

    در SELECT هم همین است اگر بخواهیم رکوردهایی که نمایش داده می‌شوند محدود شوند این دستور کاربرد دارد.

    در جلوی Where باید یک عبارت منطقی باشد که همانطور که میدانید عبارت منطقی شامل مقادیری عملگرهای منطقی مانند < > = و عملگرهای رابطه‌ای مانند AND OR است.

    اما برخی از چیزهایی که ممکن است جالب باشند:
    IS NULL
    IS NOT NULLبرای بررسی خنثی بودن.expr BETWEEN min AND max
    بخواهیم فیلدی یاعبارتی بین دو مقدار باشد

    NOT

    عذم برقراری شرط

    expr IN (value,...)

    وچود یک چیز را در یک مجموعه خواستار باشیم.

    ISNULL(expr)

    عبارتی مقدار خنثی داشته باشد.

    expr LIKE pat [ESCAPE 'escape-char']

    مقدار رشته‌ای شبیه یک الگو باشد اگر در الگو % باشد میتواند هر چیزی به جای آن قرار گیرد.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  31. #31
    من مدتی با sqlite‌ کار کردم. چون thread safe ساخته نشده در محیط‌های چند ریسمانی مشکلات عدیده‌ای رو ایجاد میکنه.
    اگر برنامه شما تک ریسمانی است انتخاب خوبی خواهد بود.

  32. #32
    خب حال چند مثال از کار با دستور SELECT:

    کارهای ریاضی:
    میدانید برای محاسبات در SELECT به صورت زیر باید عمل کرد. به بقیه مثالها هم توجه کنید.:

    SELECT 1+2*3;

    SELECT (1+2)*3;

    SELECT 1 = 0;

    SELECT '.01' = 0.01;

    SELECT '.01' <> '0.01';


    SELECT 0.1 <= 2;

    SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;

    SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;

    SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;

    SELECT * FROM tbl_name WHERE auto_col IS NULL;

    SELECT 1 BETWEEN 2 AND 3;

    SELECT 'b' BETWEEN 'a' AND 'c';

    SELECT 2 BETWEEN 2 AND '3';

    SELECT 2 BETWEEN 2 AND 'x-3';

    SELECT 2 IN (0,3,5,'wefwf');

    SELECT 'wefwf' IN (0,3,5,'wefwf');

    SELECT ISNULL(1+1);

    SELECT ISNULL(1/0);

    SELECT NOT 10;

    SELECT NOT 0;

    SELECT NOT NULL;

    SELECT ! (1+1);

    SELECT ! 1+1;

    SELECT 1+"1";

    SELECT 10 LIKE '1%';

    SELECT 'David!' LIKE 'David_';

    SELECT 'David!' LIKE '%D%v%';

    SELECT 'David!' LIKE 'David\_';

    SELECT 'David_' LIKE 'David\_';

    SELECT 'David_' LIKE 'David|_' ESCAPE '|';

    SELECT 'abc' LIKE 'ABC';

    SELECT 'abc' LIKE BINARY 'ABC';

    ELECT 10 LIKE '1%';





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

  33. #33
    ممکن است بخواهیم که محاسباتی مانند مجموع، شمارش، کمینه و... داشته باشیم در اینصورت مجبوریم که GROUP BY را بکار بریم. مثلا برای محاسبه مجموع ساعات حضور یک پرسنل:


    SELECT a.cName, SUM(b.nTime) FROM PERSONAL AS a LEFT JOIN tblTime AS b GROUP BY a.cName
    ممکن است بخواهیم شرطی در موقع گروه بندی باشد از HAVING استفاده میکنیم:


    SELECT a.cName, SUM(b.nTime) FROM PERSONAL AS a LEFT JOIN tblTime AS b GROUP BY a.cName HAVING b.nTime > 0
    در اینجا مثلا فرض شده که اعداد منفی معنای خاصی دارند ونباید در محاسبات وارد شوند.

    در حقیقت این دستور برای این است که چند ردیف را یکی کند. حتی بدون استفاده از توابع محاسباتی ذیل می توانید چند رکورد یکجور را یکی کنید.

    اما نوع محاسبات:


    avg(X) Return the average value of all non-NULL X within a group. String and BLOB values that do not look like numbers are interpreted as 0. The result of avg() is always a floating point value even if all inputs are integers.
    count(X)
    count(*) The first form return a count of the number of times that X is not NULL in a group. The second form (with no argument) returns the total number of rows in the group.
    group_concat(X)
    group_concat(X,Y) The result is a string which is the concatenation of all non-NULL values of X. If parameter Y is the separator between instances of X. A comma (",") is used as the separator if Y is omitted.
    max(X) Return the maximum value of all values in the group. The usual sort order is used to determine the maximum.
    min(X) Return the minimum non-NULL value of all values in the group. The usual sort order is used to determine the minimum. NULL is only returned if all values in the group are NULL.
    sum(X)
    total(X)
    Return the numeric sum of all non-NULL values in the group. If there are no non-NULL input rows then sum() returns NULL but total() returns 0.0. NULL is not normally a helpful result for the sum of no rows but the SQL standard requires it and most other SQL database engines implement sum() that way so SQLite does it in the same way in order to be compatible. The non-standard total() function is provided as a convenient way to work around this design problem in the SQL language. The result of total() is always a floating point value. The result of sum() is an integer value if all non-NULL inputs are integers. If any input to sum() is neither an integer or a NULL then sum() returns a floating point value which might be an approximation to the true sum.
    Sum() will throw an "integer overflow" exception if all inputs are integers or NULL and an integer overflow occurs at any point during the computation. Total() never throws an exception.

    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

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



    گروه بندی خاصیتی دارد که ابتدا مرتب شده سپس بازگردانیده خواهند شد. (چون برای حذف میبایست مرتب باشند.)

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

    اما برای مرتب سازی در SELECTاز ORDER BY و ذکر فیلدها که بین آنها کاما آمده (یا ذکر عبارات) عمل کنید.

    مثال:

    SELECT * FROM Personal ORDER BY cName,cFamily
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  35. #35
    این دستور کجاش مشکل داره که بعد از EXE شدن ارور میده!!!
    N_FILE='D:\101\MKOL.DBF'    && PATH FILE
    DAT_NEW1='1386/01/01' && DATE1
    DAT_NEW2='1386/05/31' &&DATE2
    SQLRUNED=' FZ1,FZ6 FROM '+N_FILE+' WHERE FZ1 > 0 AND FZ5 > 0 AND FZ6 BETWEEN "'+DAT_NEW1+'" AND "'+DAT_NEW2+'" ORDER BY FZ1 INTO CURSOR TEMP'
    SELECT &SQLRUNED

  36. #36
    خطا چیه؟

    اگر کمپایل نشده باشه خطا ندارد؟
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  37. #37
    محدود کردن رکوردها:


    می توانید میزان رکوردی که نمایش داده می شود را محدود کنید. مثلا برای حذف رکوردهای تکراری از DISTINCT استفاده کنید:



    SELECT DISTINCT * FROM tbl1



    کد فوق ردیف به ردیف بررسی میکند و اگر هر ردیفی در تمام فیلدها تکراری بود آنرا فقط یکبار نمایش میدهد.
    دقت کنید این فرمان هم ابتدا خروجی را مرتب می‌کند.
    در برابر دستور فوق ALL وجود دارد که پیش فرض هم همین است یعنی تکراریها حذف نخواهند شد.

    در محصولات میکروسافت TOP و بعد از آن عدد تعداد رکوردی که باید ندر خروجی برگردانیده شود را نشان میدهد البته از ابتدای رکوردها حتی کلمه کلیدی Percent هم بعد از عدد برای نمایش درصد می تواند بکار رود اما دقت کنید این کلمه در محصولات میکروسافت است.
    (وجود ORDER BY فراموش نشود.)

    در عوض در دیگر بانکها کلمه کلیدی LIMIT وجود دارد که اینکار را انجام می‌دهد. دقت کنید حتما باید در انتهای دستور select قرار گیرد و اگر از کلمه کلیدی OFFSET استفاده شود از رکوری که گفته شده جداسازی انجام می‌شود. همچنین اینکار پس از ساخت پس و جو در آخر کار انجام می‌شود.

    به مثالها دقت کنید:

    SELECT * FROM tbl1 LIMIT 10


    فقط ده رکورد اول


    SELECT * FROM tbl1 LIMIT 10,20


    از رکورد ۱۰ و ۲۰ رکورد.


    SELECT * FROM tbl1 LIMIT 10 OFFSET 20


    از رکورد ۲۰ و ۱۰ رکورد.

    (تفاوت OFFSET و کاما را ببینید.)

    تفاوت در دیتابیسهای معروف:



    SELECT * FROM T LIMIT 10
    PostgreSQL, MySQL, SQLite, H2
    SELECT * from T WHERE ROWNUM <= 10 Oracle (also supports the standard, since Oracle8i)

    SELECT * FROM T FETCH FIRST 10 ROWS ONLY DB2 (also supports the standard, since DB2 v8)


    SELECT TOP 10 * FROM T
    MS SQL Server (also supports the standard, since SQL Server 2005), Sybase ASE, SQL_Anywhere, MS Access


    دقت کنید که این جزئی از استاندارد نیست.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  38. #38
    نقل قول نوشته شده توسط rezaTavak مشاهده تاپیک
    خطا چیه؟

    اگر کمپایل نشده باشه خطا ندارد؟
    خطا هستش: Feature not available
    در صورتی که بصورت App کمپایل بشه یا Fxp رو اجرا کنم ایراد نمیگیره ! این ایراد در صورتیه که پروژه Exe بشه.

  39. #39
    این خطا میگه که این syntax برای این نگارش درست نیست!

    عجیبه!
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

  40. #40
    چیزی که در ORDER BY یادم رفته بود:

    DESC و ASC برای ترتیب نزولی و صعودی است به مثال توجه کنید:


    SELECT * FROM tbl1 ORDER BY cNAME ASC, cDate DESC


    دقت کنید اولی صعودی مرتب شده و دومین فیلد نزولی.
    ____________________________
    همه چیز را همگان دانند و همگان هنوز از مادر زاده نشده اند. (بزرگمهر حکیم)

صفحه 1 از 2 12 آخرآخر

تاپیک های مشابه

  1. SQLite
    نوشته شده توسط Cheetah در بخش سایر پایگاه‌های داده
    پاسخ: 3
    آخرین پست: سه شنبه 12 اردیبهشت 1391, 21:48 عصر
  2. sqlite
    نوشته شده توسط atryass در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: سه شنبه 19 شهریور 1387, 20:37 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •