PDA

View Full Version : راهنمایی درباره ADO و استفاده از کاراکترهای جانشینی * و ?



shademan
پنج شنبه 24 خرداد 1386, 16:38 عصر
من با استفاده از ADO و دستورات SQL و بکار بردن کاراکترهای جانشینی * و ? یکسری رکوردها را با شرایط خاص میخوام از بانک استخراج کنم. ولی متاسفانه هیچ رکوردستی برگردانده نمیشه (یعنی صفر به عنوان تعداد رکوردها برگشت داده میشه). در صورتی که وقتی همون عبارات رو بدون * و ? بکار میبرم نتیجه کاملا صحیح و درسته. توجه داشته باشید که فقط در صورت استفاده کردن از کاراکترهای * و ? این مشکل بوجود میاد.
درضمن موقعی هم که از کاراکترهای * و ? در DAO استفاده میکنم باز هم نتیجه کاملا صحیح و درسته.نمونه کد رو در زیر گذاشتم . میخوام بدونم که آیا ADO و یا ارائه کننده OLE DB با این کاراکترهای جانشینی مشکل داره و یا ایراد جای دیگه هست؟

Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim ConnectionString As String
Dim SQLString As String


"ConnectionString = " Provider=Microsoft.JET.OLEDB.4.0;Data Source= c:\data.mdb
" '*SQLString = " SELECT * FROM Bank WHERE SampleField LIKE 'am
cnn.Open ConnectionString
rst.Open SQLString, cnn, adOpenKeyset, adLockOptimistic, adCmdText
Print rst.RecordCount

حامد مصافی
پنج شنبه 24 خرداد 1386, 19:46 عصر
به جای ؟ از _ (Undescore)
و به جای * از % (Percent Mark) استفاده کن

shademan
جمعه 25 خرداد 1386, 09:44 صبح
Black Dal عزیز از راهنماییت در مورد بالا خیلی ممنونم. مشکلم حل شد. 2 سوال دیگه دارم:
1- اگر ممکنه میشه دلیلش رو هم بگی که چرا از * و ? نمیشه اسففاده کرد.
2- الان یه مشکل جدید در Query های داخل دیتابیس دارم که اجرا نمیشه. یعنی عدد 1- برگشت داده میشه. Query داخل دیتابیس هم کاملا صحیحه . مشکل کد زیر کجاست؟


Dim cnn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
Dim ConnectionString As String


"ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DATA.mdb


cnn.Open ConnectionString


cmd.ActiveConnection = cnn
" cmd.CommandText = " qryInDatabase
cmd.CommandType = adCmdStoredProc


Set rst = cmd.Execute


Print rst.RecordCount

حامد مصافی
جمعه 25 خرداد 1386, 13:19 عصر
1- سینتکس SQL اینه و این کاراکتر ها در دستورات sql کاربرد ندارد، به همین سادگی!
2- در Access چیزی به نام رویه های ذخیره شده (Stored Procedures) نداریم. عنایت داشته باشید Query به این معنی نیست!

shademan
جمعه 25 خرداد 1386, 16:13 عصر
پس چرا وقتی که دستورات SQL رو با همین کاراکترهای * و ? در DAO مینویسم بدون هیچ مشکلی اجرا میشن؟ من فقط در ADO با این کاراکترها مشکل داشتم.

حامد مصافی
جمعه 25 خرداد 1386, 21:56 عصر
در چه محیطی؟؟؟

shademan
جمعه 25 خرداد 1386, 22:42 عصر
منظورت از محیط چیه ؟
در کل من از WInXP و VB6 و استفاده از کنترل DATA و همچنین DAO Object با این کاراکترها هیچ مشکلی نداشتم . ولی تا حالا از این کاراکترها در ADO استفاده نکرده بودم. چند روز پیش یه برنامه قدیمی داشتم که توش از DAO استفاده کرده بودم. وقتی که خواستم تغییرش بدم و با ADO برنامه رو Update کنم ، تمام بخشهای دیگه به درستی کار میکردند. فقط این بخشی که دارای این کاراکترها بود ، کار نمیکرد و هیچ رکوردستی برگشت داده نمیشد. بعد که با توجه به فرمایش شما از % و _ استفاده کردم . کاملا صحیح شد. حتی تو یه کتابی هم که در مورد SQL دارم مثالهای توی کتاب از عملگر LIKE به همراه * و ? استفاده کرده.

حامد مصافی
جمعه 25 خرداد 1386, 23:18 عصر
ببخشید، شرمنده من دفعه پیش کلمه DAO رو در پست شما ندیدم.
در DAO شما محدود به استفاده از jet 3.5 بودید که شامل نسخه های اکسس 97 و قبل از آن بود. اما در ADO همانگونه که از کد شما پیداست از نسخه 4.0 استفاده کردید یعنی نسخه 2000 یا بالاتر. در این نسخه مایکروسافت سعی در استاندارد کردن سینتکس SQL موجود در موتور jet کرده است. بدانید که در سیستم های مدیریتی پایگاه داده (DBMS) های اینترپرایز معمول (مثل MS SQL Server یا MySQL یا Oracle از کاراکتر های % و _ که جز سینتکس استاندارد SQL هستند استفاده می شود)