PDA

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



akbar4028
چهارشنبه 03 تیر 1394, 23:30 عصر
سلام خدمت اساتید محترم لطفا بفرمایید چطوری می تونم یه فرمی مثل linked tabel maneger داشته باشم که فایلهای اکسل لینک شده من که دوتا هستند با یه دکمه به سرعت به روز رسانی بشه لازم به ذکره که من چند تا جدول لینک شده دارم ولی فقط دوتا از اونا باید مدام به رو رسانی شه می خوام بقیه لینک ها دیده نشن؟ درصورتی که امکان پذیر نیست حداقل بفرمایید بعد از باز کردن linked tabel maneger چطوری اون دوتا فایل در حالت انتخاب باشند و لازم نباشه هر بار انتخابشون کنم و در صورت امکان بقیه لینکها رو مخفی کنیم

:گریه:

M_Man_M
پنج شنبه 04 تیر 1394, 17:03 عصر
با عرض سلام
کد زير ميتونه براي شما مفيد باشه و مشکلتون رو حل کنه :

Dim StrTblName As String
Dim StrSheetName As String
Dim BolExists As Boolean

StrTblName = "BookOne"
StrSheetName = "Sheet1"

BolExists = IsObject(CurrentDb.TableDefs(StrTblName))
If BolExists Then DoCmd.DeleteObject acTable, StrTblName
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel9, StrSheetName, "C:\Users\HOME\Desktop\Book1.xlsx", True, "A1:S65536"
DoCmd.Rename StrTblName, acTable, StrSheetName

akbar4028
پنج شنبه 04 تیر 1394, 23:39 عصر
سلام و ممنون از توجه شما لطفا می شه در مورد کد فوق توضیح بدین ضمنا این رو بگم هر بار می خوام ریلینک کنم ممکنه اسم فایل یه چیز دیگه باشه . لطفا نحوه استفاده کد فوق رو بفرمایید لطفا بفرمایید چطور میتونم وقتی فرم linkd tabel maneg رو باز می کنم محتویات اون در حالت انتخاب باشند و لازم نباشه هر بار اونا رو انتخاب کنم

M_Man_M
جمعه 05 تیر 1394, 13:33 عصر
با عرض سلام
سه خط اول که تعاريف هستش

دو خط دوم هم مقدار دهي == خط اول براي اسم جدولي است که فايل اکسل به اون نام در پايگاه داده ، لينک براش ساخته ميشه. در حقيقت نام يک جدول است
خط دومش هم نام شيتي است که داده ها در فايل اکسل ، در اون شيت قرار دارند

و اما قسمت سوم و مهمترين قسمت کد :
خط اول چک ميکنه که آيا جدولي با اين نام در پايگاه داده وجود دارد يا خير. فکر کنيد در مرحله قبل يک لينکي از فايل اکسل ساخته شده و حالا ميخواهيد اون و بروز رساني کنيد. يک روش اينه که لينکي که الان هست رو پاک کنيد و دوباره يه لينک جديد بسازيد. که ما در اينجا از همين روش استفاده مي کنيم.
خط دوم در صورتي که اين جدول موجود باشه ، جدول مربوط به لينک فبلي حذف ميشه.
خط سوم يه لينک جديد از شيت موجود در يک فايل اکسل در پايگاه داده ساخته ميشه. DoCmd.TransferSpreadsheet نام تابع مربوط به ساخت اين لينک هستش. پارامتر acLink مشخص ميکنه که ما ميخواهيم يک لينک بسازيم (ميتونيد در اين قسمت import و يا export هم انتخاب کنيد). پارامتر acSpreadsheetTypeExcel9 نوع فايل اکسل رو مشخص ميکنه که در اينجا مربوط به فايل هاي xlsx هستش. پارامتر StrSheetName که مشخصه ، نام شيت در اون قرار داره. در پارامتر بعدي آدرس فايل قرار داره. پارامتر بعدي ميگه که آيا نام ستون ها در بالاي فايل اکسل قرار دارد يا خير. و در نهايت پارامتر آخر محدوده ي ورودي را مشخص ميکند
در خط چهارم چون جدول ساخته شده به نام همون شيتي است که در فايل اکسل بوده ، اون رو به نام جدولي که دوست داريم تغيير نام مي دهيم

اگه هر بار اسم و يا حتي آدرس فايل شما تغيير ميکنه خوب مشخصه که بايد يک OpenFileDialog بسازيد و بخواهيد که کاربر فايل رو براتون مشخص کنه

با استفاده از اين کد ديگر نيازي به استفاده از Linked Table Manager نخواهيد داشت. در حقيقت در پشت زمينه ي اون فرم يه همچين کدي قرار داره که البته به جاي اينکه لينک قبلي رو حذف کنه ، هر بار يک لينک جديد ميسازه و اگر نامش تکراري باشه يک شماره به آخر اون اضافه ميکنه

نحوه ي استفاده از اون هم به اينصورت هست که در ابتداي باز کردن پايگاه داده توسط کاربر ، اين کد رو اجرا کنيد تا قبل از اينکه کاربر رکوردي اضافه کنه و يا هر عملياتي بخواد انجام بده ، اطلاعات بروز رساني شده باشه.

موفق باشيد

akbar4028
جمعه 05 تیر 1394, 15:30 عصر
باشکر از توجه شما خوشحالم که به نتیجه نزدیک می شوم با تفاصیر فوق اینطور باید بگم که بنده در یک فیلد فرم آدرس فولدر را دارم اما آدرس کامل فایل رو ندارم و به دلایلی نمی تونم داشته باشم ولی به نظر می رسه باید با OpenFileDialog سراغش برم اما باعرض پوزش 1- چه کدی بنویسم که OpenFileDialog از اون فیلد آدرس باز بشه و نیاز به گشتن نباشه 2- کد ها رو لطفا با وجود OpenFileDialog بنویسید چون بنده شرایط فوق رو ندارم اینم بگم که زیاد باید ریلینک کنم3- لطفا کد ها رو کامل بنویسید و بفرمایید کجا وارد کنم
این هم یک نمونه در صورت امکان کامل بفرمایید132614

M_Man_M
جمعه 05 تیر 1394, 17:03 عصر
سلام
اميدوارم خوب شده باشه
موفق باشيد

akbar4028
جمعه 05 تیر 1394, 21:00 عصر
متشکرم اما مشکل همچنان باقیست 1- اول اینکه با فشردن باتن هر بار یک لینک جدید ساخته می شود که نیازی به لینک های قبل نمی باشد.2-در پروژه اصلی بنده که کاربردی نیز می باشد فایلهای اکسل توسط ادمین در هر کجای درایو e ممکن است ایجاد شود و نام آن نیز متغییر کی می تونه به ادمین چیزی بگه مع الوصف خواهشنا از راه OpenFileDialog باکس توضیح بفرمایید و در صورت امکان لینک جدید ایجاد نشود بلکه لینک قبلی عوض شود .اگر سرستونها مغایر با لینک موجود بود پیام بدهد(در صورت امکان) البته این کار رو Linked Table Manager انجام می ده و اجازه لینک کردن فایل غیر مرتبط را نمی دهد که بسیار خوب است و از خطای کاربر جلوگیری می شود این رو هم بگم OpenFileDialog می خوام مستقیم بره سراغ آدرس فولدر من (فایل خیر) و از اونجا به بعد کاربر فایل رو انتخاب کنه

M_Man_M
شنبه 06 تیر 1394, 00:23 صبح
با عرض سلام
اول اينکه هر بار يه لينک جديد ساخته ميشه ولي قبليش پاک ميشه ؛ خوب اينطوري بروز ميشه ديگه. اگه قرار نيست اينجوري باشه پس چه دليلي براي Relink کردن هستش ؟!!!
دوم اگه قراره ادمين اون فايل ها رو هرجايي قرار بده پس چه نيازي به آدرس اونها داريد. چرا آدرس رو ذخيره کرديد؟!!! اگه قرار باشه هر بار که پايگاه داده رو باز مي کنيد ، لينکي از يک فايل اکسل ساخته بشه پس نيازي به يه جدول فکر نکنم باشه !!!
در ضمن من با اون دکمه ميخواستم طريقه ي استفاده رو نشون بدم ؛ نه اينکه حتماً همين جوري استفاده بشه. براي همين گفتم شما فقط ايده رو بگير و خودت کدها رو بنويس.

با اين حال يه سري تغييرات دادم با اينکه نفهميدم منظور دقيق شما چيه ولي از OFD نيز استفاده کردم
موفق باشيد

akbar4028
شنبه 06 تیر 1394, 02:11 صبح
داستان برای خودم هم پیچیده است ولی این رو بگم 95 درصد به خواسته ام نزدیک شدم اما اون 5 درصد .اینطور بگم من دقیقا کاری که Linked Table Manager انجام میده رو می خوام + باز شدن OpenFileDialog در آدرس موجود در فرم که خوب به لطف شما این قسمت کار انجام شد. یعنی با کدهای جنابعالی فقط باید از یه فایل اکسل به یه فایل دیگه لینک بشه حتی اگه اسم و مسیرشون فرق کنه (البته خصوصیات فایل اکسل باید یکی باشه ). در نمونه شما جدول aabi لینکه بعد جدول sabz لینک میشه و هردو موجودند در حالی که جدول sabz باید بشینه جای جدول ابی و اینبار از جدول sabz اطلاعات استخراج شه . توضیح ایجاد فایل توسط ادمین هم طولانی و خارج از حوصله اساتید می باشد.امیدوارم تونسته باشم مفهوم رو برسونم

M_Man_M
شنبه 06 تیر 1394, 09:16 صبح
سلام عزيزم
چرا اينقدر مسئله رو براي خودت پيچيده مي کني. خوب شما بيا توي تمامي مراحل ، اسم جدولي که بايد پس از لينک شدن ، به اون نام ساخته بشه رو ، يکسان بده. تموم!!!
الان من با هر بار کليک ميام اسم جدول رو با نام رنگ يکي ميگيرم ؛ شما بيا اون و تغيير بده و يه نام ثابت براش قرار بده. تازه اينجوري که خيلي ساده تر و راحت تر هم هست که !!!

akbar4028
شنبه 06 تیر 1394, 21:38 عصر
سلام من دقیقا همین چیزی که شما فرمودی می خوام اصلا بنده نمی خوام اسم فایلم بعداز لینک تغییر کنه .Linked Table Manager همین کار رو می می کنه نمی دونم چرا اصلا من این اسم رنگ ها رو اضافه کردم و جنابعلی رو دچار ابهام کردم :اشتباه: من می خوام OpenFileDialog یه فایل اکسله رو به اسم ثابتی که تعیین می کنم مثلا test لینک کنه دفعه بعد هر فایل اکسلی رو با OpenFileDialog لینک کردم با همین اسم ریلینک کنه.می دونم شما قصد دارید به جای اینکه ماهی رو دستم بدین ماهی گیری رو یادم بدین اما واقعا وقت تنگ است در فرصت لازم کد ها رو حتما بررسی می کنم . اما یه سوال , وقتی با Linked Table Manager یه فایل اکسل غیر مرتبط (احتمالا سرستونها رو بررسی می کنه ) لینک می کنم پیغام خطا می ده و اجاره این کار رو نمی ده آیا با کد های شما این اتفاق خواهد افتاد.همچنین اگه دو تا فایل اکسل رو با دوتا OpenFileDialog با دو نام مختلف لینک کنم تداخلی که پیش نمی یاد.با تشکر فراوان

M_Man_M
شنبه 06 تیر 1394, 23:24 عصر
با عرض سلام
چون لينک قبلي حذف ميشه ، خطايي نخواهد داد.
با ساخت دو لينک مختلف به دو فايل جداگانه که هيچ ، با لينک مختلف به يک فايل مشترک هم مشکلي نخواهيد داشت ( با يک لينک به دو فايل هم که مشخصه ؛ با منطق هم جور در نمياد :لبخند:)
براتون آرزوي موفقيت دارم :تشویق:

akbar4028
دوشنبه 08 تیر 1394, 18:46 عصر
سلام و عرض خسته نباشید بنده یه تغییرات کوچیک تو فایلها دادم اما این فایل در سیستم منزل کار میکنه اما در اداره خطا میده لطفا با توجه به تغییرات انجام شده یه نگاهی بندازید در صورتی که مشکلی داره اصلاح بفرمایید132734
در ضمن بفرمایید فایل fd چی هست مشکلی برای سیستم دیگه ایجاد نمی کنه

M_Man_M
سه شنبه 09 تیر 1394, 21:27 عصر
با عرض سلام
همانطور که در شکل زير هم نشان داده شده است :
132786
محيط برنامه نويسي را با کليدهاي ALT+F11 باز کرده و ابتداي تابع و در نوار کناري يکبار کليک کنيد تا يک دايره اي در کنار آن خط به شما نشان داده بشه. به اين نقطه Break Point گفته ميشه و براي Debug يا خطايابي استفاده ميشه.
سپس فرم رو باز کنيد و روال کار عادي را طي کنيد. مثلاً روي دکمه کليک کنيد. هنگاميکه کنترل برنامه به آن نقطه ي علامت گذاري شده برسه ، برنامه متوقف ميشه و شما مرحله به مرحله قادر خواهيد بود تا برنامه رو کنترل کرده و پيشرفت آنرا مشاهده نمائيد. براي اين کار کافي است پس از متوقف شدن برنامه کليد F8 را بزنيد. با هر بار فشار دادن اين کليد ، يک خط از برنامه اجرا ميشه و شما خواهيد فهميد که کجاي برنامه مشکل داره و يا از کدام قسمت ، از تابع خارج ميشه.
موفق باشيد و خدانگهدار