PDA

View Full Version : سوال: درج آدرس دیتابیسی که جداول دیتابیس فعلی به آن لینک است



abas1388
جمعه 06 آذر 1388, 11:19 صبح
با سلام و عرض تبریک عید سعید قربان
میخواهم آدرس دیتابیسی که که جدول یا جداول دیتابیس جاری به آن لینک شده را در یک تکست باکس فرم درج نمایم . البته ممکن است دیتابیسی که که جدول یا جداول دیتابیس جاری به آن لینک شده بر روی سیستم(کامپیوتر) کاربر باشد و یا ممکن است این دیتابیس در شبکه باشد .
با تشکر

مجتبی جوادی
یک شنبه 08 آذر 1388, 14:04 عصر
کد زیر جواب مشکلت:


SELECT Database FROM MSysObjects WHERE Type=6;

abas1388
دوشنبه 09 آذر 1388, 09:00 صبح
کد زیر جواب مشکلت:



SELECT Database FROM MSysObjects WHERE Type=6;

با سلام خدمت آقاي مجتبي جوادي
آيا ممكن است يك توضيح مختصر در خصوص اين كد بدهيد و بفرمائيد كه آدرس چگونه در يك تكست باكس وارد ميشود ؟ و آيا آدرسي كه با اين كد بدست مي آيد هم شامل آدرس ديتابيس شبكه وهم آدرس ديتابيس كامپيوتر كاربر است ؟
با تشكر

مهدی قربانی
دوشنبه 09 آذر 1388, 09:42 صبح
سلام
كدي كه ايشون گذاشتن كد SQL‌ هست ، شما اگر اين كد رو در يك كوئري جديد در نماي SQL‌وارد كنيد بعد به نماي Design‌سوئيچ كنيد دقيقاً ساختار يك كوئري رو مي بينيد ، با اين كد فيلد Database‌كه در جدول MSysObjects‌ قرار داره و اگر فيلد Type هر ركورد در جدول مذكور برابر با 6 باشه حاوي آدرس بانك اصلي خواهد بود و معنيش اينه كه اين Object‌ ( جدول )‌لينك شده هست ، جالب اينجاست كه اگر فيلد Connect همين جدول رو ببينيد در صورتي كه بانك مبدا داراي پسورد باشه در اين فيلد قابل مشاهده خواهد بود.
شما از 2 روش زير مي تونيد براي نمايش آدرس ديتابيس مبدا استفاده كنيد :
1 . كد فوق رو در Record Source‌ فرم وارد كنيد و Contorl Source تكست باكسي كه به منظور نمايش آدرس ميذاريد فيلد Database كنيد تا آدرس نمايش داده بشه .
2 . در رخداد Load فرم كدهاي زير رو بنويسيد :


Dim strSQL As String
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("SELECT Database FROM MSysObjects WHERE Type=6;")
Me.Text1 = rst.Fields("Database")
rst.Close
Set rst = Nothing

مجتبی جوادی
دوشنبه 09 آذر 1388, 12:24 عصر
یک راه دیگر هم وجود داره . در Contorl Source یک تکست باکس کد زیر را بنویس :


Dlookup("Database";"MSysObjects";"Type=" & 6)

abas1388
دوشنبه 09 آذر 1388, 14:43 عصر
یک راه دیگر هم وجود داره . در Contorl Source یک تکست باکس کد زیر را بنویس :



Dlookup("Database";"MSysObjects";"Type=" & 6)

با سلام مجدد
اگر بعضي از جدولها از ديتابيس شبكه و بعضي ديگر از ديتابيس رايانه كاربر لينك شده باشند و بخواهيم آدرس جدول هاي كه به ديتابيس شبكه لينك هستند در يك تكست باكس و آدرس جدول هايي كه به ديتابيس رايانه كاربر لينك هستند در يك تكست باكس ديگر درج نمائيم از چه كدي بايد استفاده كرد؟
با تشكر

مجتبی جوادی
دوشنبه 09 آذر 1388, 15:02 عصر
در دیتابیس لینک همان کد ذکر شده و در خود برنامه :


Dlookup("Database";"MSysObjects";"Type=" & 6 & " And Flags=" 0)

abas1388
دوشنبه 09 آذر 1388, 16:12 عصر
در دیتابیس لینک همان کد ذکر شده و در خود برنامه :



Dlookup("Database";"MSysObjects";"Type=" & 6 & " And Flags=" 0)

آقاي جوادي ببخشيد !
اينجارو متوجه نشدم.با توجه به راهكار جناب آقاي قرباني اين كد را در كدام رويداد فرم يا تكست باكس بايد وارد كنم ؟
با تشكر

mj_bayati
دوشنبه 08 اسفند 1390, 14:52 عصر
با سلام خدمت اساتید

من دقیقاً همین آدرس رو میخوام ولی بدون اسم دیتابیس

مثل نتیجه این کد که در مورد فایل جاری جواب میده:
CurrentProject.Path
که مثلاً این میشه:
D:\Access

من میخوام دقیقاً همین پاسخ رو از فایل دیتابیس بگیرم
یعنی میخوام ببینم فایل دیتابیس کجای عالمه؟!

مثلاً کدی که جواب بده:
D:\Access\DB

در راهکار بیان شده آدرس و عنوان فایل دیتابیس باهم در فیلد Database نمایش داده میشه
یعنی اینجوری:
D:\Access\DB\Database1.accdb

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

Abbas Amiri
دوشنبه 08 اسفند 1390, 18:53 عصر
از خصوصیت Connect شی tabledef استفاده کنید البته بایستی قسمت Path آنرا با توابع رشته ای واکشی کنید.
drive:\path\filename

mj_bayati
دوشنبه 08 اسفند 1390, 19:40 عصر
میشه بیشتر توضیح بدین؟

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

ببخشیدا ما یه خورده گاگول میزنیم :گیج:
آماتوری توضیح بدین

تشکر از قبول زحمتتون

Abbas Amiri
دوشنبه 08 اسفند 1390, 20:10 عصر
در Immediate window تایپ کنید:
?currentdb.TableDefs ("YourLinkedTableName").Connect

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

mj_bayati
دوشنبه 08 اسفند 1390, 22:31 عصر
دوست عزیز جناب امیری
باتشکر از صبر وحوصله شما


سابقه و اطلاعات وسیع شما مرا به خلاصه گویی واداشت .نفرمایید... این حرفا کدومه؟؟؟!!!! :کف:
ما چیزی بلد نیستیم برادر! والا ازین سؤالا نمی پرسیدیم...

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

دستور SQLای که جناب جوادی فرموده بودند دقیقاً آدرس و نام دیتابیس رو میداد
من میخواستم فقط آدرس دیتابیس رو ازش جدا کنم
حتی شاید اون دستور پاسخ راحتتری برای جداکردن بده (البته جسارت نباشه خدمت شما،من عرض کردم شاید نفهمیده باشم)

من بلد نیستم چطور فقط آدرس رو جدا کنم با این شرایط که: اولاً ممکنه دیتابیس روی شبکه باشه وثانیاً اسم اون اصلاً ثابت نیست که بخواهیم از انتهای رشته ببریمش..
فک کردم باید از دستور Split استفاده کرد که اونم چون باهاش کار نکردم دردسر شد

میخوام فقط آدرس رو بهم بده یعنی اینجوری: D:\Access\DB نه اینکه الآن بدست میاد: D:\Access\DB\Database1.accdb


مطمئناً راههای راحت تر هم وجود داره
اگه شما و دیگر اساتید کمک کنن

ندید مخلصیم!!!
:چشمک:

Abbas Amiri
دوشنبه 08 اسفند 1390, 22:52 عصر
پس تابع زیر رو که خودم نوشتم در یک ماجول کپی کن خیلی جاها بدرد میخوره . با ارسال Path فایل به آن میتوانید هر کدام از قسمتهای آدرس اعم از مسیر ، نام فایل ، Extention و یا فایل و نوع فایل را داشته باشید. (لازم بذکراست که باتوابع API هم میشود) بعلاوه تغییر نام فایل.


Public Enum FilePathPart
PathOnly = 1
NameOnly
ExtentionOnly
NameAndExtention
ChangeName
End Enum


Function GetFilePathPart(strPath, SetionOfPath As FilePathPart, Optional NewName As String)
Dim k As Integer, j As Integer
Dim sPath As String, sName As String, SExtention As String
k = InStrRev(strPath, "\") + 1
j = InStrRev(strPath, ".")
sPath = Left(strPath, k - 1)
SExtention = Right(strPath, Len(strPath) - j)

Select Case SetionOfPath
Case PathOnly
GetFilePathPart = sPath
Case NameOnly
GetFilePathPart = Mid(strPath, k, (j - k))
Case ExtentionOnly
GetFilePathPart = SExtention
Case NameAndExtention
GetFilePathPart = Right(strPath, Len(strPath) - k + 1)
Case ChangeName
GetFilePathPart = sPath & NewName & "." & SExtention

End Select
End Function


مثال



? GetFilePathPart ("D:\Abbas\Myfile.mdb",NameOnly )
Myfile

ARData
سه شنبه 09 اسفند 1390, 18:16 عصر
با تشکر از سوال و جواب هاي عزيزان :
سوال اينه که آيا امکان تغيير اين آدرس ها وجود داره ؟ يعني بشه با ماژول يا کد نويسي آدرس لينک يک جدول رو تغيير داد ؟

Abbas Amiri
سه شنبه 09 اسفند 1390, 19:03 عصر
بله . یک متغیر TableDef تعریف کنید ودر یک حلقه خصوصیت Connect تمام table ها را به مقدار جدید نسبت دهید . ازتابع موجود درلینک زیر باکمی تغییر خودم استفاده میکنم ، بدلیل اینکه فایلم را Split کرده ام ، چنانچه فولدر آن را تغییر می دادم برنامه ایراد درلینک میگرفت.

http://access.mvps.org/access/tables/tbl0009.htm