PDA

View Full Version : مشکل ذخیره فایل ضمیمه در درایو C با کد VBA



akbar karimi
شنبه 28 شهریور 1394, 21:05 عصر
با سلام
اگه کسی میتونه این فایلو واسه من درست کنه با تشکر
میخوام وقتی دکمه رو میزنم ضمیمه رکورد جاری رو ذخیره کنه

amirzazadeh
سه شنبه 31 شهریور 1394, 17:14 عصر
سلام.
كدها رو تست كردم.تو اكسس 2007 بدون مشكل ضميمه تو درايو C ذخيره ميشه.
..............
موفق باشيد

mosaArabi
سه شنبه 31 شهریور 1394, 18:32 عصر
نمونه در 2010 خطا میگیره . البته سیستم بنده 64 بیته

pbm_soy
چهارشنبه 01 مهر 1394, 01:51 صبح
پیام خطا را نگذاشتید!
احتمال زیاد خطا در مورد نداشتن دسترسی به محل ذخیره سازی یعنی درایو سی است! فقط خواندنی بودن یا access denied و یا ....

چون درایو سی در ویندوز ۷،۸ خیلی محافظت شده است وبیشتر جاهای آن از دسترس کاربران خارج است یا حداقل برای نوشتن خارج است اینکار را با استفاده از امکانات ntfs انحام میدهد!
شما مسیر ذخیرهدسازی را فولدر خانه کاربر ویندوزتون بکنید و یا فولدر my document و یا فولدر appdata کاربر ویندوزتون
ویا اصلا در درایوهای دیگر که ویندوز در آن نصب نیست فایل را ایجاد کنید یعنی در دستور savefile مسیر را d:\ بدهید

Abbas Amiri
جمعه 03 مهر 1394, 11:37 صبح
با سلام
اگه کسی میتونه این فایلو واسه من درست کنه با تشکر
میخوام وقتی دکمه رو میزنم ضمیمه رکورد جاری رو ذخیره کنه

سلام
جناب آقای اکبری شما که جواب صحیح را از کاربر محترم pbm_soy (http://barnamenevis.org/member.php?20034-pbm_soy) گرفتید ، جا داشت دکمه تشکر را بزنید . از آنجا که احتمال بروز این مشکل برای کاربران دیگر که پس از این به سیستم عاملهای جدیدتر روی می آورند وجود دارد ، عنوان تاپیک را جهت دستیابی بهتر دیگران در هنگام جستجو تغییر میدهم.

New Account
جمعه 03 مهر 1394, 16:56 عصر
سلام آقای امیری



جناب آقای اکبری شما که جواب صحیح را از کاربر محترم pbm_soy (http://barnamenevis.org/member.php?20034-pbm_soy) گرفتید ، جا داشت دکمه تشکر را بزنید

100% با شما در زمینه تشکر موافق هستم ولیکن , خیر ایشون جواب سئوال رو به درستی ندادند

ایشون مطلبی رو عنوان کردند که در جای خودش و در خصوص مساله ای دیگه میتونه درست باشه ولیکن نه در اینجا




عنوان تاپیک را جهت دستیابی بهتر دیگران در هنگام جستجو تغییر میدهم

به نظرم نباید عنوان تاپیک رو تغییر میدادید عنوان تاپیک درسته چون جوابی که بهش استناد کردید صحیح نیست

در واقع اینکه مشکل در ذخیره سازی تک به تک فایلهای ضمیمه رخ داده , درست هستش

توضیح و راهنمایی اجمالی :

ایشون مشکلشون در فیلدهایی به وجود داره میاد که چند فایل ضمیمه در داخل یک رکورد دارند

دستور Kill مسیر رو مرتبط با ضمیمه یک دریافت میکنه

از دستورات DAO دارند برای ذخیره سازی استفاده میکنند ولی بدون بخشی که اقدام به پیمایش در داخل رکوردها کنه ( در وقع همواره داره رکورد اول/ضمیمه اول رو مورد هدف قرار میده )

اگر در داخل نت سرچ کنند میبایست بتونند به راه حل دست پیدا کنند مخصوصا اینکه تا اینجای کد رو خودشون نوشتند

اگر در داخل هر رکورد هم تنها یک فایل ضمیمه کنند هم باز مشکلی ندارند و همین کد فعلی جوابگوست

موفق باشید

Abbas Amiri
جمعه 03 مهر 1394, 20:00 عصر
سلام آقای امیری


100% با شما در زمینه تشکر موافق هستم ولیکن , خیر ایشون جواب سئوال رو به درستی ندادند

ایشون مطلبی رو عنوان کردند که در جای خودش و در خصوص مساله ای دیگه میتونه درست باشه ولیکن نه در اینجا



به نظرم نباید عنوان تاپیک رو تغییر میدادید عنوان تاپیک درسته چون جوابی که بهش استناد کردید صحیح نیست

در واقع اینکه مشکل در ذخیره سازی تک به تک فایلهای ضمیمه رخ داده , درست هستش

توضیح و راهنمایی اجمالی :

ایشون مشکلشون در فیلدهایی به وجود داره میاد که چند فایل ضمیمه در داخل یک رکورد دارند

دستور Kill مسیر رو مرتبط با ضمیمه یک دریافت میکنه

از دستورات DAO دارند برای ذخیره سازی استفاده میکنند ولی بدون بخشی که اقدام به پیمایش در داخل رکوردها کنه ( در وقع همواره داره رکورد اول/ضمیمه اول رو مورد هدف قرار میده )

اگر در داخل نت سرچ کنند میبایست بتونند به راه حل دست پیدا کنند مخصوصا اینکه تا اینجای کد رو خودشون نوشتند

اگر در داخل هر رکورد هم تنها یک فایل ضمیمه کنند هم باز مشکلی ندارند و همین کد فعلی جوابگوست

موفق باشید

سلام
جناب پیروز مهر وسواس و دقت شما در نکات باریک و ظریف ستودنی است .
در تاپیک حاضر احتمالا برداشت دوگانه ای از مشکل داشته ایم ، در مورد فیلدهای Attachment فرمایش شما صحیح می باشد و چنانچه در رکوردی چند فایل در فیلد Attachment وجود داشته باشد فقط اولین فایل منتقل می شود . در فایل ضمیمه این تاپیک چنانچه به کوئری فرم مربوطه توجه کنید ، به گونه ای است که به ازای هر فایل در فیلد Attachment یک رکورد ایجاد می شود و در نتیجه ، ایجاد یک حلقه جهت بدست آوردن تمامی فایل های یک فیلد Attachment لزومی ندارد .

بنابراین تنها تغییر لازم تغییر آدرسی به غیر از درایو C است:

Private Sub Command39_Click()
Dim db As DAO.Database

Set db = CurrentDb
Set rsEmployees = db.OpenRecordset("tbl_mantis")
'
Set rsEmployees = Me.Recordset
Set rsPictures = rsEmployees.Fields("Mantis_attachment1").Value
'Set rsEmployees = db.OpenRecordset("Mantis_attachment1")
' rsEmployees.OpenRecordset

ATTACHNAME = txtFileName.Value

If ATTACHNAME = "" Or ATTACHNAME = Null Or ATTACHNAME = Empty Then

Else
If txtFileType = "jpg" Or txtFileType = "tiff" Or txtFileType = "tif" Or txtFileType = "png" Then
strFilePath = "D:\" & ATTACHNAME
If Dir(strFilePath) <> "" Then VBA.Kill strFilePath
rsPictures.Fields("FileData").SaveToFile strFilePath

End If
End If
End Sub

New Account
جمعه 03 مهر 1394, 20:30 عصر
سلام آقای امیری عزیز

کد خودتون رو هم تست کنید

یک مقدار تعداد کلیک هاتون رو بیشتر کنید

موفق باشید

New Account
جمعه 03 مهر 1394, 20:44 عصر
آقای کریمی کد زیر و تصحیح کنید


Private Sub Command39_Click()
Dim db As DAO.Database
On Error GoTo Err_Command39_Click



Set db = CurrentDb
Set rsEmployees = db.OpenRecordset("tbl_mantis")
'
Set rsEmployees = Me.Recordset
Set rsPictures = rsEmployees.Fields("Mantis_attachment1").Value

ATTACHNAME = txtFileName.Value

If ATTACHNAME = "" Or ATTACHNAME = Null Or ATTACHNAME = Empty Then

Else
If txtFileType = "jpg" Or txtFileType = "tiff" Or txtFileType = "tif" Or txtFileType = "png" Then
strFilePath = "c:\windows\" & ATTACHNAME
Debug.Print strFilePath
VBA.Kill strFilePath
rsPictures.Fields("FileData").SaveToFile strFilePath

End If
End If


Exit_Command39_Click:
On Error Resume Next
Exit Sub


Err_Command39_Click:
Select Case Err.Number
Case 0
Resume Exit_Command39_Click:
Case 53
Resume Next
Case Else
MsgBox Err.Number & " " & Err.Description, vbExclamation, "Error in module Form_tbl_mantis - sub Command39_Click"
Resume Exit_Command39_Click:
End Select
End Sub




محدودیت درایو اصلا ارتباطی نداره

دیگه محدود تر از فولدر ویندوز که نداریم , در این کد فایلها رو توی فولدر ویندوز ذخیره میکنیم , شما مسیرش رو تغییر بدید

موفق باشید

Abbas Amiri
جمعه 03 مهر 1394, 20:50 عصر
سلام آقای امیری عزیز

کد خودتون رو هم تست کنید

یک مقدار تعداد کلیک هاتون رو بیشتر کنید

موفق باشید

سلام
خط شماره 20 پست قبلی اصلاح شد .
ولی در مورد درایو C این موضوع صحیح است و از طریق کد نویسی عادی در ویندوز 8 امتحان کردم و خطای 80070005 مربوط به Access Denied ایجاد می شود(کاربر adminitrator بدون محدودیت) . اگر راهکاری وجود دارد که درصورت نیاز بتوانیم بر این مشکل غلبه کنیم (البته با کدنویسی) لطفا ارائه کنید
با تشکر

New Account
جمعه 03 مهر 1394, 20:51 عصر
پیام خطا را نگذاشتید!
احتمال زیاد خطا در مورد نداشتن دسترسی به محل ذخیره سازی یعنی درایو سی است! فقط خواندنی بودن یا access denied و یا ....

چون درایو سی در ویندوز ۷،۸ خیلی محافظت شده است وبیشتر جاهای آن از دسترس کاربران خارج است یا حداقل برای نوشتن خارج است اینکار را با استفاده از امکانات ntfs انحام میدهد!
شما مسیر ذخیرهدسازی را فولدر خانه کاربر ویندوزتون بکنید و یا فولدر my document و یا فولدر appdata کاربر ویندوزتون
ویا اصلا در درایوهای دیگر که ویندوز در آن نصب نیست فایل را ایجاد کنید یعنی در دستور savefile مسیر را d:\ بدهید

سلام pbm_soy

مشکل عنوان شده از سوی شما در حالتی رخ میده که اکانت کاربر جاری در سطوحی پایینتر از سطح Admin باشه و سیستم UAC هم فعال باشه

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

در اینگونه مواقعی و بر روی این سطح از دسترسیهای محدود شده , معمولا خیلی از نرم افزارهای توسعه هم به درسی کار نخواهند کرد و امکان استفاده از خیلی از کتابخانه ها هم وجود نداره

بر همین اساس وقتی کاربری بتونه بر روی اکانت کاربری فعلی خودش کار رو تا این سطح پیش ببره , احتمال اینکه خطا رو بشه از منظر محدودیت ذخیره سازی بر روی درایو C دید , کمی به دور از ذهن هستش

موفق باشید

Abbas Amiri
جمعه 03 مهر 1394, 22:20 عصر
سلام
این مشکل در ویندوز 8 بعلت سطح امنیتی است که برای درایو C وبرخی فولدرهای سیستمی در نظر گرفته شده .یا باید Security این مکانها را دستکاری کرد و یا یک فولدر در درایو C و هر جای دیگری(ترجیحا در فولدر فایل اکسس مان) ایجاد و از آدرس آن استفاده کرد.

pbm_soy
یک شنبه 05 مهر 1394, 01:17 صبح
نمیدانستم دوستان بخش اکسس اینقدر فعال هستند! باعث خوشحالی است
نمیدانم دوستانی که سوال را مطرح کردن و ادامه دادن کجا رفتن؟! منظورمآقایان کریمی و عربی بود!

اگر توجه کرده باشید اولیت نوشته من این بود پیام خطاذرادنگذاشتید! هدف من از آن پست فقط همین جمله بود ولی نمیخواستم پست خیلی خالی ثبت بشه برای همین طبق نوشته های پست اول و دوم و سوم نتیجه گیری کردم و محتملترین مورد را درنظرذگرفتم و یک راهنمایی کلی در آن پست نوشتم!
توجه بفرمایید که راهنمایی کلی بود چون اولا اصل سوال مشخص نبود دوما اگر مشخص هم باشد معمولا بخشی را برای فعالیت کاربری که سوال را مطرح کرده میگذاریم!

pbm_soy
یک شنبه 05 مهر 1394, 01:33 صبح
من حقیر در این تاپیک سوال و مشکلی ندارم و نداشتم! حتی برنامه دوستان را هم مطالعه نکردم
مورد بعدی گفته های new account را تایید میکنم ولی جواب سوال یا خواسته مدیر بخش آقای امیری عزیز نیست ویا حداقل بطور کامل نیست

در ویندوزهای جدیدتر موارد امنیتی زیادتر شده است
البته این موارد امنیتی بیشتر بخاطر ویندوز نیست بخاطر file system درایو است اگر سیستم فایل را fat , fat32در نظر بگیرید مشکلی پیش نمیاد چون در این نوع سیستم هیچگونه محدودیتی برای فایلها وجود ندارد و اصلا امکان ایجاد محدودیت در آن وجودندارد
در ویندوز xp هم میتوان با ntfs محدودیتها و امنیت را بالا برد و یا برعکس در ویندوز ۸ محدودیتها را پایین آورد!
سوالی که بیشتر دوستان پس گفتن چنین موردی مطرح میکنند این است که چرا xp چنین محدودیتی ندارد و یا ۸ دارد؟!
چنین محدودیتی را ویندوز ندارد! فایل سیستم ایجاد میکند پس در ویندوز xp تنظیمات پیش فرض فایل سیستم ntfs محدودیت ندارد و دست خود کاربرذاست که چگونه آنرا تنظیم کندولی در ویندوز ۷،۸ برعکس است پیش فرض سعی شده با ntfs از فایلهای اصلی و سیستمی محافظت شود و محدودیتهایی را در درایو c: ایجاد کرده اند ولی کاربر میتواند آن محدودیتها را پایین آورد!
پس در کل وقتی قرار است با فایلها کار کنیم ومخصوصا در درایو c: باید به نکات و محدودیتهای ntfs که ویندوز از آن استفاده میکند توجه کنیم

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