PDA

View Full Version : مشکل Table Name در لود کردن بانک اطلاعاتی با Common Dialog



kitcat_m18
سه شنبه 27 مهر 1389, 04:29 صبح
با عرض سلام مجدد خدمت مدیران گرامی و دوستان برنامه نویس خوبم در بخش VB:لبخندساده:

چند وقتیه که سوالی ذهن منو به خودش مشغول کرده...
من می خوام به وسیله Common Dialog دیتابیس ها رو تو برنامم باز کنم،(نمی خوام از یه بانک با یه مسیر ثابت و یه نام جدول"Table name" ثابت استفاده کنم)
من در حال حاضر برای لود کردن بانک ها از ADODC استفاده می کنم همونطور که مستحضر هستید ADODC نیاز به یه ConectionString داره که به صورت مثال اینطوری تعریف میشه:

Data.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CommonDialog1.FileName & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"حالا نیاز به Select زدن رو دیتا بیس داریم که به این صورت انجام میشه:

Data.CommandType = adCmdUnknown
Data.RecordSource = "select * From Table Name"دقیقا مشکل همینجاست!!!
هر بانک اطلاعاتی دارای یک یا چند جدول با نام های مختلفه ولی کدی که من نوشتم فقط می تونه بانک هایی رو باز کنه که نام جدولش رو از قبل بدونیم و تو برنامه براش Select زده باشیم

من نمونه برنامه هایی زیادی رو به زبانهایی مثل پاسکال (برنامه Data manager) دیدم که تو همین سایت قرار دارن و می تونن بدون اینکه هیچ اطلاعاتی در رابطه با نام جدول موجود در بانک داشته باشن اونو لود کنن.

آیا تو ویزوال بیسیک امکان باز کردن بانک ها به این انعطاف پذیری که من می خوام وجود داره؟؟؟

با تشکر از مجدد از اساتید بزرگوار.

butterfly8528
سه شنبه 27 مهر 1389, 17:47 عصر
سلام دوست عزیز .

سورس کد های ضمیمه شده انجام این کار رو به شما آموزش خواهد داد .

موفق باشید .

kitcat_m18
جمعه 30 مهر 1389, 18:12 عصر
butterfly8528 (http://www.barnamenevis.org/forum/member.php?u=75627) عزیز سلام،
ضمن تشکر از پاسخ بسیار خوب و مفیدتون می خواستم در رابطه ADOX, ADODB & ADODC توضیحاتی بدید تا بیشتر با آنها آشنا بشم.

در مورد این قطعه کدی که ADOX رهبری آن را به عهده داره:

Dim Con As ADOX.Catalog
Dim Jadval As ADOX.Table

lstTables.Clear
CommonDialog1.ShowOpen

Set Con = New ADOX.Catalog

Con.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
CommonDialog1.FileName & ";Mode=ReadWrite|Share Deny None;Persist Security Info=False"

For Each Jadval In Con.Tables
If Jadval.Name <> "VIEW" Then
If Left(Jadval.Name, 4) <> "MSys" Then lstTables.AddItem Jadval.Name
End If
Next

Set Con = Nothingقسمت For Each Jadval In Con.Tables چه جور حلقه ای است؟؟؟ می خوام مفهوم دقیق کاری که داره انجام میده رو بدونم.

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

butterfly8528
یک شنبه 02 آبان 1389, 04:45 صبح
سلام دوست عزیز .


ضمن تشکر از پاسخ بسیار خوب و مفیدتون می خواستم در رابطه ADOX, ADODB & ADODC توضیحاتی بدید تا بیشتر با آنها آشنا بشم.در مورد تفاوت Adodb و Adodc

ADODB یک کتابخانه برای اتصال و ویرایش بانک های اتطلاعاتی است.
ADODC یک کنترل یا اکتیوکس برای استفاده از کتابخانه ADODB است. (در واقع بعضی از تنظیمات بصورت پیش فرض در این کنترل تعریف شده و شما تنها باید ConnectionString رو تعریف کنید.)

شما با تعریف متغیرهایی از نوع کلاس های ADODB هم میتونید از این کتابخانه استفاده و از ADODC بی نیاز بشید.

این لینک (http://www.barnamenevis.org/forum/search.php?searchid=3032971) هم میتونه کمکتون کنه .

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


و در مورد AdoX :

در مورد AdoX یا به عبارتی MicroSoft Ado Ext اطلاع چندانی ندارم، اما ظاهرا کتابخانه ای برای کار با قسمت های مختلف یک DataBase و به دست آوردن اطلاعاتی مانند نام و نوع اجزاء DataBase مثل جدول ها و ... هست .


سمت For Each Jadval In Con.Tables چه جور حلقه ای است؟؟؟ می خوام مفهوم دقیق کاری که داره انجام میده رو بدونم.این حلقه معمولا برای انجام فرایندی بر روی اشیاء همجنس به کار میره .


For Each Jadval In Con.Tables
If Jadval.Name <> "VIEW" Then
If Left(Jadval.Name, 4) <> "MSys" Then lstTables.AddItem Jadval.Name
End If
Next
در این حلقه تمام جداول موجود در Con.Tables بررسی می شوند .

If Jadval.Name <> "VIEW" Then در این خط نام جدول بررسی میشه که اگه VIEW نبود کامپایلر به خط بعدی بره .

If Left(Jadval.Name, 4) <> "MSys" Then lstTables.AddItem Jadval.Name و در این خط بررسی میشه که اگه 4 کاراکتر اول نام جدول MSys نبود اون رو به لیست lstTables اضافه کنه .

موفق باشید .

kitcat_m18
یک شنبه 02 آبان 1389, 20:16 عصر
سلام

باز هم از جواب خوبتون ممنونم راهنماییهاتون عالی بود :قلب: