امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشكل با يك دستور SQL
نویسنده پیام
siamak-s آفلاین
كاربر دو ستاره
**

ارسال‌ها: 127
موضوع‌ها: 29
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 4 تشکر در 4 ارسال )
ارسال: #1
مشكل با يك دستور SQL
سلام دوستان ديتا بيس !
من اين سوال رو در بخش برنامه نويسي وي بي پرسيد گفتند بيام اينجا شايد شما بتونيد اين سوال رو جواب بديد
گفتند كه ممكن اين كد SQL من مورد داشته باشه حالا اين ريش اينم قيچي شما ببينيد مشكل از كجاست!
Private Sub Form_Load()
Dim strSQL As String
strSQL = "SELECT * From tblOnvan " & " WHERE Last Name =" & strBookmark
Adodc1.RecordSource = strSQL
Adodc1.Refresh
End Sub
زمان اجرا
وقتي كه مي خوام متود Refresh ر و از ADO Data Control اجرا كنم با اين ارور ها مواجه ميشم
Syntax Error in FROM Clause
و بعد يه ارور ديگه اي
Run time Error -2147217900(80040e14)
Method Refresh of Object 'IAdodc failed.

و بعد به اين سطر از برنامه مياد
Adodc1.Refresh

فكر مي كنيد مشكل ازكجاست دوستان
فقط اگر راهي به نظرتون ميرسه يه جوري توضيح بديد كه ماهم بفهميم
با تشكر
سيامك

تا شقايق هست زندگي بايد كرد
۱۸-دى-۱۳۸۴, ۱۲:۲۴:۵۴
ارسال‌ها
پاسخ
mostafa_mohammadi آفلاین
تازه وارد

ارسال‌ها: 7
موضوع‌ها: 5
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #2
 
سيامك جان سلام
من خيلي دوست دارم كه كمكت كنم بخاطر همين هر چي مي دونم در اختيارت مي گذارم :idea:
تا اونجايي كه من با SQL كار كردم فكر مي كنم نحوه نوشتن شما اشتباه باشه من تو دلفي اينطوري مي نويسم::::
AdoCommand1.Sql.Add:='select * from tblonvan where lastname= '+strbookmark

البته من با فرض اينكه اين strbookmark يك variable هستش اين كد رو برات نوشتم
لازم به ذكر كه شما فقط قطعه كد اس.كيو.ال اين رو احتياج داري پس اميدوارم كه به دردت بخوره.
اگر درست يا اشتباه بود به من پيام بده تا با هم يه جوري رفعش كنيم. Biggrin :wink:
۱۸-دى-۱۳۸۴, ۱۶:۲۶:۵۶
ارسال‌ها
پاسخ
Soheilvb آفلاین
کاربر با تجربه
****

ارسال‌ها: 513
موضوع‌ها: 49
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 0
( 129 تشکر در 46 ارسال )
ارسال: #3
سلام
سلام
مشخصه كه با SQL زياد كار نكردي
توي دستور مشكل است شما بعد از مساوي بايد علامت ' و همچنين بعد از نام هم اين علامت را قرار دهيد يعني بنويسيد:
"Where LastName='" & strBookmark & "'"
اگه مشكلي بود باز بگو
۱۸-دى-۱۳۸۴, ۲۰:۲۶:۴۲
وب سایت ارسال‌ها
پاسخ
siamak-s آفلاین
كاربر دو ستاره
**

ارسال‌ها: 127
موضوع‌ها: 29
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 4 تشکر در 4 ارسال )
ارسال: #4
thnx All
سلام دوستان

از جواب هاي شما بسيار ممنونم و مشكلم حل شد
در ضمن آقا سهيل فكر كنم شما strBookMark رو يك رشته در نظر گرفتي نه Variable
البته يك نكته ميگم تا شايد افراد مبتدي مثل ما هم بتونن از اون استفاده كنن
مشكل كار از اينجا بود كه هر موقع از دستور Select بخواي استفاده كني نمي توني از ADO Properties يك جدول رو انتخاب كني و بايد حتما اونو با يك دستور SQL معرفي كني
البته شايد نكته اي ساده بود اما ممكن بعضي مثل من در بدر اين مشكل بشن!
دوستان يك سوال ديگه دارم ( از اونجايي كه من SQL وارد نيستم)
چه جوري ميتونم چند تا دستور WHERE داشته باشم
مثلا مي خوام بگم فلان فيلد مقدارش برابر باشه با فلان تكست باكس در حالي كه فلان فيلد مقدارش برابر باشه با فلان تكست باكسو ...
در حالي كه اگر يكي از تكست باكس ها خالي بود اون دستور WHERE رو اصلا در نظر نگيره
اگه ميشه به سورسي يا يه نمونه اي براي من بنويسيد

با تشكر
سيامك

تا شقايق هست زندگي بايد كرد
۱۹-دى-۱۳۸۴, ۱۴:۴۰:۰۸
ارسال‌ها
پاسخ
Soheilvb آفلاین
کاربر با تجربه
****

ارسال‌ها: 513
موضوع‌ها: 49
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 0
( 129 تشکر در 46 ارسال )
ارسال: #5
سلام
درسته
اين مطلب را بخوانيد توش Where را كامل با تركيبش نوشتم
دستورات SQL(قسمت اول)
SQL چيست؟
SQL مخفف زبان جستجوي ساخت يافته (Structured Query Language) است. كه در دهه 1970 توسط IBM به منظور استاندارد كردن روش هاي استخراج داده از پايگاه هاي داده مختلف» توسعه داده شده است.هدف از اختراع اين زبان ارايه وسيله اي مستقل از برگه اي برنامه نويسي بود.
دستورات SQL چيزي نيست جز دستورات ساده!اين دسترات را مي توان روي تمام اشيا پايگاه داده اجرا كرد.اكثر دستورات SQL تعدادي ركورد بر مي گردانند » كه معمولا به اين مجموعه نما(View) مي گويند.تمام برنامه هايي كه به نوعي با پايگا ه هاي داده رابطه اي سروكار دارند از SQL استفاده مي كنند.
شما براي امتحان دستورات SQL خود مي توانيد از برنامه Visdata استفاده كنيد كه در منوي Add-Ins است.شما براي ديدن نتيجه دستور بايد دستور را در قسمت SQLStatement بنويسيد و بر دكمه ي Execute كليك كنيد.و در پيغامي كه ظاهر مي شود بر روي No كليك كنيد.و بعد از آن نتيجه كار را مي بينيد.
در ويژال بيسيك هم مي توانيد براي ديدن و كار كردن روي نتايج خاصيت RecordSource كنترل خود را(براي مثال RecordSource) به دستور مورد نظر ست كنيد و دستور Refresh آن را اجرا كنيد تا دستور اجرا شود و براي ديدن نتيجه بهتر مي توانيد آن را به جدولي متصل كنيد(مثلا DataGrid).(كه در آخر مثالي را بيان مي كنم.)براي مثال:
Form1.Data1.RecordSource = "Select Name,Family From Moshakhasat"
Form1.Data1.Refresh
در زير براي كار با اين توابع مثالي را بيان مي كنيم:
ابتدا يك TextBox و يك CommandButtonو همچنين يك كنترل داده با نام هاي Text1,Command1,data1 به برنامه اضافه كنيد سپس با استفاده از برنامه Visdata پايگاه داده زير را درست كنيد.
نام جدول:Kharidaran
فيلدها:
نام نوع اندازه
Name Text 50
Family Text 50
Product Text 50
Phone Text 50
Date Date/Time 8
نام جدول : ProductSales
فيلدها:
نام نوع اندازه
Product Text 50
Price Currency 8
Tedad Double 8
Date Date/Time 8
و اين پايگاه داده را در جايي ذخيره كنيد.
سپس در ويژال بيسيك از منوي Project\Components گزينه Microsoft Data Bound Grid Control 5.0 را فعال كنيد. و آن را به فرم اضافه كنيد.سپس خاصيت DatabaseName
كنترل داده را به آدرسي كه پايگاه داده را ذخيره كرديد ست و خاصيت RecordSource به يك جدول ست كنيد و همچنين خاصيت DataSource كنترل را به Data1 ست كنيد.سپس در قسمت Command1_Click بنويسيد.
Private Sub Command1_Click()
Data1.RecordSource = Text1.Text
Data1.Refresh
End Sub
حالا براي اجراي دستورات Sql مي توانيد دستور را در Text1 نوشته و بر Command1 كليك كنيد مي بينيد كه نتيجه دستورات در جدول منعكس مي شود.و شما مي توانيد براي امتحان مثال ها از اين برنامه استفاده كنيد.
دستورات SQL
دستور SELECT_FROM
مهمترين و پركاربردترين دستور SQL است.با اين دستور مي توانيد ركوردهاي موردنظر را از يك يا چند جدول استخراج كنيد.
دستور SELECT_FROM در ساده ترين شكل خود دو قسمت دارد:
1.يك يا چند فيلد كه بايد از جدول خوانده شود.
2.يك يا چند جدول كه داده ها از آن ها خوانده مي شود.
براي مثال اگر شما يك جدول به نام Kharidaran داشته باشيد كه داراي فيلدهاي Name,Family,Product,Phone,Date باشد شما براي ديدن فقط فيلدهاي Name,Family مي توانيد از دستور زير استفاده كنيد.
Select Name,Family From Kharidaran


با دستور SELECT_FROM شما مي توانيد همه فيلدهاي يك جدول را برگردانيد،براي اين كار كافيست ليستي از همه فيلدها را در اين دستور قيد كنيد ولي اگر تعداد فيلدها زياد باشد اين كار خسته كننده مي شود براي اين كار مي توانيد به جاي نوشتن نام همه فيلدها از كاراكتر * استفاده كنيد.براي مثال
Select * From Kharidaran
كه تمام فيلدهاي جدول خريداران را نشان مي دهد.
شايد شما بخواهيد اسم فيلدهايي را كه نمايش داده مي شوند تغيير دهيد براي مثال در جدول Kharidaran به جاي نام Name و در جدول Nam بنويسد براي اينكار بايد از As استفاده كرد.براي مثال:
Select Name As Nam,Family As Namkhanevadegi From Kharidaran
كه در آن به جاي نام Name در جدول Nam و به جاي Family در جدول NamKhanevadegi نشان داده مي شود.
اين عبارات مي توانند فارسي باشند.
شرط ORDER By
وقتي از دستور SELECT_FROM استفاده مي كنيد . ركوردها به همان ترتيبي كه در جدول اصلي قرار گرفته اند برگردانده مي شوند.اما مي توان با استفاده از شرط ORDER BY ركوردها را به گونهاي دلخواه مرتب كرد.صعودي ونزولي مرتب كردن را مي توانيد با استفاده از شرطهاي ASC(صعودي) و DESC(نزولي) مشخص كرد.براي مثال به دستور زير توجه كنيد.
SELECT * FROM Kharidaran ORDER BY Name ASC
با اين دستور تمام فيلدهاي جدول Kharidaran به صورت مرتب شده براساس Name و به صورت صعودي نمايش داده مي شوند.
شرط ORDER By مي تواند چند فيلد بگيرد و مرتب سازي را براساس چند فيلد انجام دهد.براي مثال:
Select * From Kharidaran Order By Name,Family Desc
كه در آن اگر دو اسم يكسان وجود داشته باشد براساس فاميلي مرتب مي شوند.(به صورت نزولي)
شرط Where
يكي از قويترين جنبه هاي دستور SELECT_FROM توانايي آن در كنترل تعداد ركوردهاي برگشتي است كه با شرط Where انجام مي شود.از شرط Where به دو روش مي توان استفاده كرد.
1.محدود كردن ركوردها در يك جستجو.
2.لينك كردن دو يا چند جدول در يك نما.
1.استفاده از WHERE براي محدود كردن جستجو
شرط Where اجازه مي دهد تا روي فيلدها مقايسه هاي منطقي انجام دهيد.ساده ترين شكل اين شرط چنين است:
Where column = value
كه در آن column نام فيلد و Value مقداري است كه اين فيلد بايد داشته باشد تا جز ركوردهاي خروجي قرار گيرد.مثلا به دستور زير توجه كنيد.
Select Name,Family,Phone From Kharidaran Where Name= 'Ali'
با اين دستور ركوردهايي كه فيلد Name آن ها ali است نمايش داده مي شوند.
در اين دستور مي توان با استفاده از AND و OR چند شرط را با هم تركيب كرد.براي مثال:
Select * From Kharidaran Where Name='ali' OR Family='Ghasemi'
با اين دستور دستور ركوردهايي كه فيلد Name آن ها Ali يا فيلد Family آن ها Ghasemi باشند نمايش داده مي شوند.
توجه:شما براي اينكه كاراكترهاي متني را جستجو كنيد بايد كاراكتر را بين دو تا علامت نقل تكي (') قرار دهيد ولي براي فيلدهايي كه عدد هستند لازم به استفاده از آن نيست.براي مثال براي فيلد قيمت فقط مي توانيد عبارت زير را بنويسيد.
Select Product,Price,Tedad,Date From ProductSales Where Price=2000
كه برگشتي تمام محصولاتي را كه قيمت آن ها 2000 است نمايش مي دهد.
شما مي توانيد همچنين از عملگرهاي مقايسه اي(از قبيل =,<,>,<>,<=,>=) و همچنين از عملگرهاي BETWEEN_AND,IN,LIKE هم استفاده كنيد.
مثال1: در دستور زير از عملگر BETWEEN_AND استفاده كرده ايم.
SELECT Product,Price,Tedad,Date From ProductSales WHERE Price BETWEEN 2000 And 20000
كه خروجي فقط ركوردهايي است كه قيمت آن ها بين 2000و 20000 باشد.
مثال2:در دستور زير از عملگرIN استفاده كردم:
Select Name,Family,Phone,Product From Kharidaran Where Name IN('ali','soheil','mogtaba')
با اين دستور تمام ركوردهايي كه فيلد Name يكي از 3 اسم ali,Soheil,mogtaba باشد نمايش داده مي شود.
مثال 3: در دستور زير از عملگر Like استفاده كردم:
Select Name,Family,Phone from Kharidaran Where Name Like '*a*'
با اين دستور تمام ركوردهايي كه فيلد Name آن ها حرف a داشته باشد نمايش داده مي شود.
توجه: كاراكتر * به جاي كاراكترهاي ننوشته است.
استفاده از Where براي لينك كردن دو يا چند جدول
با استفاده از Where حتي مي توانيد فيلدهاي چند جدول را به يكديگر لينك كنيد روش كار چنين است:
Select table1.columnA,table2.ColumnA From table1,table2 Where table1.columnA=table2.ColumnA
براي مثال:
Select Kharidaran.Name,Kharidaran.Family,Kharidaran.Product,ProductSales.Price From Kharidaran,ProductSales Where Kharidaran.Product=ProductSales.Product
كه خروجي اين دستور تمامي خريداران با كالا خريداري شده و قيمت آن است كه در آن كالا ها فيلد مشترك است.
نمايي كه با شرط Where ايجاد مي شود قابل دستكاري نيست.اگر مي خواهيد كه دو جدول را تركيب كنيد و در ضمن توانايي دستكاري در آن ها را حفظ كنيد»بايد از شرط JOIN استفاده كنيد.(در اين باره بعدا توضيح مي دهيم)
با شرط Where مي توانيد بيش از دو جدول را با هم لينك كنيدو نيازي نيست فيلد ارتباط جدول هاي table1 و table2 با فيلد ارتباط جدول هاي table2 و table3 يكي باشد. فقط لازم است كه فيلدي از table1 با فيلدي از table2 و يك فيلد ديگر از table2 با يك فيلد از table3 برابر باشد.
توابع مجموع در SQL
توابع مجموع موتور Microsoft Jet عبارتند از:
AVG : كه متوسط مقادير يك ستون را بر مي گرداند.
COUNT : كه تعداد فيلد ها را بر مي گرداند و معمولا از آن براي شمارش ركوردها استفاده مي شود.
SUM : كه مجموع مقادير يك ستون را بر مي گرداند.
MAX : كه بيشترين مقدار يك ستون را برمي گرداند.
MIN : كه كمترين مقدار يك ستون را برمي گرداند.
در دستور زير از چند دستور استفاده شده است:
Select Count(Product) As CountProducts,Avg(Price) as AveragePrices,Sum(Tedad) as SumTedad From ProductSales
با اين دستور جدول خروجي تعداد كالاهاي فروخته شده و ميانگين قيمت كالاهاو همچنين مجموع كالاهاي خريداري شده را نشان مي دهد.شما مي توانيد در اين دستور ها براي اينكه ميانگين فيلدهاي خاصي را بيابيد از شرط Where استفاده كنيد.
توابع ويژال بيسيك در دستور Select
وقتي در يك برنامه ويژال بيسيك از موتور Microsoft Jet استفاده مي كنيد» مي توانيد از توابع ويژال بيسيك در دستورهاي SQL سود برد.در مثال زير با استفاده از دستور Left$ مي توانيم سه حرف اول فيلد Name را استخراج كنيم.
Select Left$(Name,3),Name From Kharidaran
همچنين مي توانيد با استفاده از اين دستورها فيلدهاي جدول را با هم تركيب كرد.در مثال زير نمونه اي مي بينيد:
Select Left$(Name,3) + "," + Left$(Family,3) As Shenaseh From Kharidaran
در اين دستور 3 حرف اول نام به علاوه سه حرف اول فاميلي را نشان مي دهد.
از اين دستورات مي توان در شرط Where بهره برد.
Select Name From Kharidaran Where Left(Name,1)="s"
با اين دستور تمام نام هايي كه حرف اول آن ها s باشد نمايش داده مي شوند.
توجه=تركيب دستورات ويژال بيسيك و Sql چند جنبه مخفي دارد.كه مهمترين آن ها » اختصاصي شدن اين قبيل دستورات است.اين قبيل دستورات در موتورهاي غيرقابل Jet قابل استفاده نيستند.
استفاده وسيع از توابع ويژال بيسيك در دستورات Sql سرعت اجراي آن را كاهش مي دهد.
۱۹-دى-۱۳۸۴, ۱۵:۵۵:۲۹
وب سایت ارسال‌ها
پاسخ
siamak-s آفلاین
كاربر دو ستاره
**

ارسال‌ها: 127
موضوع‌ها: 29
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 4 تشکر در 4 ارسال )
ارسال: #6
 
سلام آقا سهيل از مطلبت ممنونم
چيزاي خيلي مفيدي داشت كه قبلا بلد نبودم
اما من نتونستم به جواب سوال ام برسم من مي خوام چند تا دستور WHERE توي يك جدول داشته باشم و در صورتي كه مقدار يكي از WHERE ها خالي گذاشته بشه اون دستور WHERE كار نكنه و چيزي رو اصلا فيلتر نكنه از عملگر AND هم استفاده كردم اما اينجوري عمل مي كنه كه مقدارWHERE اين باشه و اين
مي توني يه مثال در اين مورد براي من بنويسي ايم جوري منم بهتر متوجه ميشم
ممنون
سيامك

تا شقايق هست زندگي بايد كرد
۲۰-دى-۱۳۸۴, ۱۵:۰۹:۱۴
ارسال‌ها
پاسخ
Soheilvb آفلاین
کاربر با تجربه
****

ارسال‌ها: 513
موضوع‌ها: 49
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 0
( 129 تشکر در 46 ارسال )
ارسال: #7
سلام
خوب بايد شرط بگذاري كه اگر خالي نبود اون رو به حساب بياره سعي مي كنم يه برنامه نمونه برات بفرستم
۲۰-دى-۱۳۸۴, ۱۶:۳۲:۳۵
وب سایت ارسال‌ها
پاسخ
siamak-s آفلاین
كاربر دو ستاره
**

ارسال‌ها: 127
موضوع‌ها: 29
تاریخ عضویت: دى ۱۳۸۴

تشکرها : 6
( 4 تشکر در 4 ارسال )
ارسال: #8
 
سهيل جان ممنون ميشم اگر زود تر بزاري يه نمونه ساده هم كافيه و يا حتي همين جا توي تاپيك بنويسي ممنون ميشم
آخه كار ما اورژانسي
ممنون
سيامك

تا شقايق هست زندگي بايد كرد
۲۱-دى-۱۳۸۴, ۱۹:۴۵:۴۳
ارسال‌ها
پاسخ
Soheilvb آفلاین
کاربر با تجربه
****

ارسال‌ها: 513
موضوع‌ها: 49
تاریخ عضویت: مرداد ۱۳۸۴

تشکرها : 0
( 129 تشکر در 46 ارسال )
ارسال: #9
چشم
باشه سريع مي دم
۲۲-دى-۱۳۸۴, ۱۵:۳۱:۵۱
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [فوری] کمک برای دستور select Mrirani 1 975 ۰۵-مرداد-۱۳۹۸, ۰۲:۵۳:۳۲
آخرین ارسال: far_222000
  اجرای چند دستور همزمان Ghoghnus 1 2,533 ۱۶-تير-۱۳۹۳, ۰۲:۴۰:۵۱
آخرین ارسال: far_222000
  دستور DELETE aleas 1 2,567 ۲۶-خرداد-۱۳۹۳, ۱۵:۴۳:۴۲
آخرین ارسال: babyy
  مشكل عجيب كاهش سرعت در SQL 2008 R2 Di Di 2 2,660 ۱۴-آبان-۱۳۹۱, ۱۵:۰۰:۰۷
آخرین ارسال: Di Di
  دستور SELECT با WHERE تر كيبي! Mohandese_Javan 5 6,644 ۲۷-تير-۱۳۹۱, ۰۸:۵۸:۲۱
آخرین ارسال: Di Di
  دستور sql stringf 1 2,893 ۱۲-تير-۱۳۹۱, ۲۱:۲۵:۰۳
آخرین ارسال: lord_viper
Question مشكل با sql server _Lotus_ 2 3,639 ۱۶-دى-۱۳۹۰, ۱۷:۲۴:۱۱
آخرین ارسال: parviz2012
  مشکل عجیب در اجرای دستور Like در SQL sepahbod 0 2,950 ۱۷-آذر-۱۳۹۰, ۱۹:۴۲:۳۰
آخرین ارسال: sepahbod
  ارسال دستور به کلاینت Payman62 13 10,530 ۱۱-شهریور-۱۳۸۸, ۱۸:۰۷:۵۹
آخرین ارسال: Payman62
Question ذخیره نتیجه یک دستور سلکت در داخل یک تیبل saeed_vbvb 1 3,565 ۲۴-اسفند-۱۳۸۵, ۲۰:۵۱:۰۰
آخرین ارسال: esmaeily-hosein

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS