PDA

View Full Version : یه جستجوی خفن روی یک بانک ضایع



blueskyz805
یک شنبه 12 آذر 1385, 23:08 عصر
دوستان سلام
من می خوام روی دیتا بیس NTTAC که شاید خیلیها دیده باشند یه جستجو صورت بدم جدول مورد نظر من 3 تا فیلد داره به نامهای TAC_ID و TAC_Attr و TAC_Val که فید اول شماره یوزر نیم و فیلد دوم مواردی مانند عنوان مدت اعتبار و باقیمانده کارت اینترنت و شماره سریال و ... را نگه می دارد و فیلد سوم ارزش فیلد دوم را نگه می دارد:گیج:


حال من می خوام مقدار وارد شده در یک تکست باکس را روی این بانک جستجو کنم این مقدار شماره سریال است که درGlobal]Comment(فیلد دوم) نگه داری می شود (فیلد دوم برای این یوزر )سپس بعد از جستجوی این اگر معتبر بود و ÷یدا کردن ای دی مورد نظر مدت اعتبار را از [Credits]TimeLeft استخراج کنم(در این حالت باید در فیلد دوم دنبال این عبارت که ذکر شد برای یوزری که بدست آورده ایم گشت)
[نکنه اینکه بانک اطلاعاتی من یه بانک وابسته به سیستم عامل است یعنی یه بانک اکسس ساده نیست بلکه من باید از
[ODBC استفاده کنم ولی هر کار کردم نشد من از دستورات زیر استفاده کردم

Private Sub Form_Load()


With Adodc1
.CommandType = adCmdText
.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Data Source=NTTacDB"
.CommandType = adCmdText
.RecordSource = "select * from TAC_USR"
.Refresh
'MsgBox Err.Number & Err.Description
End With

جستجو


[With Adodc1.Recordset


Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "select * from TAC_USR where TAC_Attr='[Global]Comment' and TAC_Val ='" & Text1.Text & "'
Adodc1.Refresh
جواب نمی ده که نمی ده تو رو خدا تو این جستجو کمکم کنید:متفکر:

sjj
دوشنبه 13 آذر 1385, 00:42 صبح
من که چیزی سر در نیاوردم .لطفا قالب نوشته تون رو اصلاح کنید.

blueskyz805
دوشنبه 13 آذر 1385, 22:36 عصر
من که چیزی سر در نیاوردم .لطفا قالب نوشته تون رو اصلاح کنید.

چشم اصلاح شد حالا کمک کنید:عصبانی++:

a_mohammadi_m
چهارشنبه 15 آذر 1385, 09:33 صبح
با سلام
اولا آیا ارتیاط شما با بانک برقرار می شود؟ ( به نظر من که نمی شود )
ADODC را با یک Data Grid مرتبط کرده و لیست اطلاعات را مشاهده کنید.
ثانیا رشته SQL شما درست به نظر نمی رسد ( پارامتر رد شده [Global]Commemt داخل کوتیشن درست به نظر نمی رسد.
معمولا اینجوری است
"SQL Statment where Param='+YourParameter(as any variable)+' +other statment"
یعنی متغیر شما داخل رشته جمع رشته ای می شود نه اینکه مستقیما در داخل رشته نوشته شود ( چون آنرا نوشته در نظر می گیرد نه متغیر )
امیدوارم مفید باشد
همچنین جمله اول With adodc.recordset اینجا بی مورد به نظر می رسد
With برای وقتی است که جملات بعدی تکراری از کارها بر روی همان مورد معین شده باشد
شما که در سطرهای بعدی با Recordset کاری نکرده اید که بخواهید تکرارها را حذف کنید

a_mohammadi_m
دوشنبه 20 آذر 1385, 08:47 صبح
با سلام
چی شد ؟
کاری کردید؟

blueskyz805
سه شنبه 21 آذر 1385, 22:54 عصر
دوست عزیز ممنون ببخشید چند روزی نبودم کسالت داشتم
اولا مطمئنا رابطه با بانک اطلاعاتی برقرار می شه چون در جواب جستجو همیشه رکورد اول بانک را به من می ده

ثانیه اسم فیلدهای من همینطور که مشاهده می کنید دو قسمتی است مه قسمت دوم داخل کروشه است و کل این عبارت اسم فیلد را تشکیل می دهد لطفا با دستورات sql اشتباه نشود

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

باز هم ممنون

blueskyz805
جمعه 24 آذر 1385, 20:02 عصر
تازه داشتیم گرم می شدیم پس چی شد
کجاست ملت دیتا بیس دون:متفکر:

a_mohammadi_m
شنبه 25 آذر 1385, 08:41 صبح
با سلام
از اینکه چند روزی نبودم معذرت می خواهم
قبل از بحث چند نکته عرض کنم
اولا بانک شما SQL Server است که نیازی به ODBC ندارد چون ADODC امکانات زیادی برای کار با آن دارد
ثانیا اگر ارتباط شما با بانک درست برقرار می شود نباید فقط یک رکورد نمایش یابد بنابراین می توان نتیجه گرفت که شرط شما در Record Source درست نیست و اتفاقا با یک رکورد خاص تطابق می یابد ( مگر در شرایطی که شما ServicePack 6 را برای VB نصب نکرده باشید ، چون مرا هم چند سال پیش دو ماهی سر کار گذاشت )
ثالثا چیزی که شما در داخل کروشه می نویسید کل نام فیلد باید باشد نه قسمتی از آن چون طبق استاندارد دستورات SQL اشتباه در نظر گرفته می شود

حالا اصل بحث

آیا از M_Dac نسخه 2 استفاده می کنید ( همان که با خود VB نصب مشود ؟ )
اگر بله نسخه 2.5 یا بالاتر را استفاده نمایید ( البته با ServicePack 6 خودش نصب می شود )
تا v 2.8 sp1 هم وجود دارد
جهت فهمیدن این موضوع در منوی Project به قسمت Component مراجعه کرده و در لیست به دنبال Microsoft Data Access Control بگردید. با شماره نسخه را در جلو اسم آن ببینید

در ضمن من بانک اطلاعاتی NTTac خودمان را نگاه کردم فیلدی با مقدار '[Global]Comment' ندیدم
توجه نمایید که این رشته ، مقدار ذخیره شده در فیلد TAC_Attr است نه نام فیلد

***** خیلی طولانی شد باز ادامه می دهم ******

a_mohammadi_m
شنبه 25 آذر 1385, 08:57 صبح
******** ادامه ***********
من برای بازیابی کاربرانی که هنور اعتبار آنها تمام نشده دستور زیر را برای Record Source بکار بردم و لیست تمام کاربران مورد نظر را دیدم
Select * form TAC_Usr
where TAC_Attr='[Credits]TimeLet'
And Tac_Val<>'0'
البته دقت نمایید که علامت ' در ابتدا و انتهای مقدار فیلد قرار دارد من درست تایپ کردم اینجا درست نشان نمی دهد

a_mohammadi_m
شنبه 25 آذر 1385, 09:02 صبح
******* ادامه *********
همانطور که ممکن است خودتان هم دیده باشید در بانک Tac_Usr برای راحتی کار برنامه NTTac ساختار دیتابیس خیلی استاندارد طراحی نشده و عوض قرار دادن فیلدی با عنوان Credits یا چیزهای دیگر ، فقط یک فیلد با نام Tac_Attr و با مقادیر مختلف برای مقاصد مختلف در نظر گرفته شده است و مقادیر مربوطه هم در همان رکورد در فیلد Tac_Val ذخیره گردیده است
( این فقط برای راحتی طراحی و راحتی کار برنامه نویس NTTAc بوده و برای من و شما شاید مزیتی نداشته باشد )

فعلا خداحافظ

blueskyz805
شنبه 25 آذر 1385, 21:25 عصر
دوست عزیز دستت درد نکنی و خوشحالم که خودت هم این بانک ضایع را دیدیه بودی

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

a_mohammadi_m
یک شنبه 26 آذر 1385, 08:08 صبح
من این تاپیک را به لیست Favorites خودم اضافه کردم
موفق باشید

a_mohammadi_m
سه شنبه 12 دی 1385, 07:23 صبح
چی شد بزودی بر نگشتی

a_mohammadi_m
سه شنبه 14 فروردین 1386, 13:49 عصر
من که دیگه اینجا رو نگاه نمی کنم
مشکلت حل شد دیگه سر هم نمیزنی