PDA

View Full Version : آموزش ذخیره فایل pdf در بانک اطلاعاتی اکسس



ahp_online
دوشنبه 22 خرداد 1391, 10:09 صبح
سلام
دوستان من میخوام یک هنگام واردکردن یک سری اطلاعات در بانک اطلاعاتی اکسس یک فایل پی دی اف هم اتچ کنم.
حالا نحوه ی اینکار رو نمی دونم به چه صورت باید انجام بدم.میشه توضیح بدید>؟

محسن واژدی
دوشنبه 22 خرداد 1391, 15:07 عصر
سلام
برای ذخیره فایل در بانک میتوانیم از کدی مشابه زیر استفاده کنیم:

Private Sub Command1_Click()

Dim bytDByte() As Byte

Dim sFl$

sFl$ = App.Path & "\mpdf.pdf"


Open sFl$ For Binary Access Read As #1

ReDim bytDByte(LOF(1))

Get #1, , bytDByte()

Adodc1.Recordset.AddNew

Adodc1.Recordset.Fields("obj").Value = bytDByte

Close

End Sub


و برای بازیابی آن از بانک:

Private Sub Command2_Click()

Dim bytDByte() As Byte

Dim sFl$

sFl$ = App.Path & "\extpdf.pdf"

Open sFl$ For Binary Access Read Write As #1

bytDByte = Adodc1.Recordset.Fields("obj").Value

Put #1, , bytDByte

Close

End Sub


موفق باشید

ahp_online
دوشنبه 22 خرداد 1391, 16:03 عصر
سلام
ممنون از جواب خوبتون ولی میشه در مورد خطوط برنامه یک توضیح مختصر بدید؟؟ فیلدی که برای فایل PDF نوعش باید چی باشه؟؟ اینطور که من فهمیدم این سورس نام فایل رو در بانک ذخیره می کنه و فایل باید در کنار بانک باشه که وقتی نام بانک خونده میشه فایل رو باز کنه؟؟
ممنون

محسن واژدی
سه شنبه 23 خرداد 1391, 00:34 صبح
در مورد خطوط برنامه یک توضیح مختصر بدید؟؟
Dim bytDByte() As Byte آرایه ای از نوع بایت اعلان می کنیم


Open sFl$ For Binary Access Read As #1 فایل را برای خواندن باز میکنیم


ReDim bytDByte(LOF(1)) فضای بافری را برای آرایه به اندازه طول فایل در نظر میگیریم


Get #1, , bytDByte() فایل را در آرایه می ریزیم


Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("obj").Value = bytDByte رکورد جدیدی ایجاد و آرایه را در بانک ذخیره میکنیم، obj نام نمونه فیلد مورد نظر است که بایستی با نام جدید جایگزین شود


bytDByte = Adodc1.Recordset.Fields("obj").Value محتویات فیلد مشخص شده را در آرایه میریزیم


Put #1, , bytDByte داده ها را در فایل باز شده میریزیم


فیلدی که برای فایل PDF نوعش باید چی باشه؟؟ باید از نوع OLE باشد، برای ذخیره داده های باینری


اینطور که من فهمیدم این سورس نام فایل رو در بانک ذخیره می کنه و فایل باید در کنار بانک باشه که وقتی نام بانک خونده میشه فایل رو باز کنه؟؟ فایل کامل در بانک ذخیره میشود، برای ذخیره فقط مسیر فایل دو خط دستوری مانند زیر کافی است: Private Sub Command1_Click()
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("obj").Value = "C:\mpdf.pdf"
End Sub

موفق باشید

ahp_online
سه شنبه 23 خرداد 1391, 15:47 عصر
سلام
یک سوال دیگه هم داشتم: من چطوری می تونم یک فایل PDF را در نرم افزار Attach کنم؟؟ میشه اینم توضیح بدید؟آخه شما در برنامه فایل Mpdf را به صورت نرم افزاری Atach کردید! حالا من می خوام وقتی دارم اطلاعات رو در نرم افزار وارد می کنم خودم فایل PDF رو همونجا Attach نرم افزار کنم؟؟
تشکر

محسن واژدی
سه شنبه 23 خرداد 1391, 16:16 عصر
سلام علیکم
اگر منظورتون افزودن فایل به ریسورس است، تنها در زمان طراحی میتوانیم اینکار را انجام دهیم، کد بالا فایل را به دیتابیس ضمیمه میکند

موفق باشید

ali190
سه شنبه 23 خرداد 1391, 18:21 عصر
سلام خدمت همه عزیزان
محسن جان ممنونم از توضیحاتت
امکانش هست که پروسه دانلود آپلود فایل در دیتابیس رو با پروسزبار نمایش بدیم؟
ممنونم
یاعلی

محسن واژدی
سه شنبه 23 خرداد 1391, 18:39 عصر
سلام خدمت همه عزیزان
محسن جان ممنونم از توضیحاتت
امکانش هست که پروسه دانلود آپلود فایل در دیتابیس رو با پروسزبار نمایش بدیم؟
ممنونم
یاعلی

سلام علیکم
بله با AppendChunk و GetChunk در Adodc1.Recordset.Fields("filedname")
به عبارت بهتر در هربار قسمتی از فایل را وارد و توسط این دو روال به بانک اضافه یا استخراج میکنیم، در این بین میزان بایت باقیمانده را در progress-bar نمایش میدهیم

ali190
سه شنبه 23 خرداد 1391, 21:43 عصر
سلام
ممنون از توضیحاتت
امکانش هست این دو قسمت (یعنی نمایش میزان دانلود و آپلود رو در پروسزبار) رو نمایش بدی؟
ممنونم
یاعلی

ahp_online
چهارشنبه 24 خرداد 1391, 10:09 صبح
من برنامه Attach کردن فایل توسط نرم افزار رو نوشتم وو قتی یک فایل رو attach میکنی یک کپی در یک فولدر کنار فایل برنامه می سازه و اونجا کپی می کنه و بعد نام فایل PDF را در بانک ذخیره می کنه(خاصیت فیلد هم Text می باشد).حالا سوالم اینه که وقتی اسم فایل رو از بانک می خونم چجوری میشه فایل رو باز کرد؟؟؟
این روش هم کسی بلده به؟؟؟

محسن واژدی
چهارشنبه 24 خرداد 1391, 18:03 عصر
من برنامه Attach کردن فایل توسط نرم افزار رو نوشتم وو قتی یک فایل رو attach میکنی یک کپی در یک فولدر کنار فایل برنامه می سازه و اونجا کپی می کنه و بعد نام فایل PDF را در بانک ذخیره می کنه(خاصیت فیلد هم Text می باشد).حالا سوالم اینه که وقتی اسم فایل رو از بانک می خونم چجوری میشه فایل رو باز کرد؟؟؟
این روش هم کسی بلده به؟؟؟

سلام علیکم
اگر در کدی که در پست های قبل دادم استفاده میکنید، آیا نام فایلی که در کنار برنامه ایجاد میشود mpdf.pdf است؟؟، اگر اینطور است خب بایستی ابتدا مسیر فایل مورد نظرتان را جایگزین مسیر نمونه موجود در متغیر sFl کنید چراکه مسیر فعلی فقط یک نمونه است و اینکه فایلی در کنار برنامه ایجاد میشود به این دلیل است که چون فایلی با این نام در کنار برنامه وجود ندارد Open یک فایل با نام mpdf در کنار برنامه ایجاد میکند و اگر فضای آنرا را بررسی کنید 0 است
همچنین اگر قصد دارید دارید فایلی را به بانک ضمیمه کنید حتما بایستی نوع فیلد از نوع OLE-Object باشد برای ذخیره محتوی باینری، چرا که نوع Text محتوی رشته ای را نگهداری میکند

موفق باشید

محسن واژدی
چهارشنبه 24 خرداد 1391, 21:03 عصر
سلام ممنون از توضیحاتت امکانش هست این دو قسمت (یعنی نمایش میزان دانلود و آپلود رو در پروسزبار) رو نمایش بدی؟ ممنونم یاعلی

سلام علیکم
خواهش میکنم
نمونه زیر را بررسی کنید

موفق باشید

ali190
چهارشنبه 24 خرداد 1391, 23:44 عصر
سلام
ممنونم محسن جان از سورسی که قرار دادی
فقط یه مشکل کوچیک وجود داره
اونم اینکه میزان زمانی که در هنگام آپلود طول میکشه تا فایل در دیتابیس آپدیت بشه در پروسزبار نشون داده نمیشه
اونم میشه کاریش کرد؟
ممنونم
یاعلی

محسن واژدی
پنج شنبه 25 خرداد 1391, 01:55 صبح
میزان زمانی که در هنگام آپلود طول میکشه تا فایل در دیتابیس آپدیت بشه در پروسزبار نشون داده نمیشه اونم میشه کاریش کرد؟ سلام علیکم
حسابش نکرده ام

ali190
پنج شنبه 25 خرداد 1391, 10:38 صبح
پس این قسمت (یعنی زمان صرف شده جهت آپدیت شدن رکورد قابل محاسبه نیست) قابل محاسبه کردن نیست
درسته؟

محسن واژدی
پنج شنبه 25 خرداد 1391, 14:12 عصر
پس این قسمت (یعنی زمان صرف شده جهت آپدیت شدن رکورد قابل محاسبه نیست) قابل محاسبه کردن نیست
درسته؟ سلام
در مورد زمان سپری شده چرا مشکلی نیست اما تخمین زمان باقیمانده را اتمام آپلود/دانلود کمی وقت می خواهد

ali190
پنج شنبه 25 خرداد 1391, 14:51 عصر
یعنی میشه زمان آپدیت شدن رکورد رو در زمان آپلود شدن فایل رو هم به پروسزبار افزود
چون در نمونه قبلی همونطور که میبینید وقتی پروسزبار به پایان میرسه چند ثانیه طول میکشه تا رکورد آپدیت بشه
این موضوع در مورد فایلهای حجیم تر محسوستره
مثلاً شما یک فیم 180 مگی رو آپلود کنید ، حودون متوجه موضوع میشید
من میخوام از این روش در دیتابیس SqlServer استفاده کنم

محسن واژدی
پنج شنبه 25 خرداد 1391, 16:17 عصر
یعنی میشه زمان آپدیت شدن رکورد رو در زمان آپلود شدن فایل رو هم به پروسزبار افزود
...
با عرض معذرت زیاد متوجه منظورتان نشدم، در صورت امکان کمی بیشتر توضیح بدین!
تا آنجایی که بنده متوجه شدم، برای بدست آوردن زمان سپری شده میتوانیم یکبار پیش از شروع عملیات با توابعی مانند apiی GetTickCount مقدار ثانیه را ذخیره و پس از انجام عملیات مجدد مقدار ثانیه موجود را بدست آورده که در اینصورت اختلاف این دو زمان میشود زمان سپری شده ما!

ali190
پنج شنبه 25 خرداد 1391, 17:42 عصر
سلام
ممنونم از پیگیریتون
ببیند هسته اصلی کد آپلود کردن در اینجاست:

Do
If bExit Then Exit Do
If (lFL& - Seek(iFF%)) < lBytes& Then ReDim bytDByte(lFL& - Seek(iFF%))
Get #1, , bytDByte
Adodc2.Recordset.Fields("xfile").AppendChunk bytDByte
lCurProg& = lCurProg& + 1
ProgressBar1.Value = lCurProg&
Caption = lCurProg& & "/" & lSplit& & " - " & (lFL& - Seek(iFF%)) & "/" & lFL& & " - Max bytDByte:" & UBound(bytDByte)
DoEvents
Loop Until EOF(iFF%) Or Seek(iFF%) >= lFL&
Adodc2.Recordset.UpdateBatch
Close iFF%
MsgBox "Uploading Completed...", vbInformation

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

Do
If bExit Then Exit Do
If (lFL& - Seek(iFF%)) < lBytes& Then ReDim bytDByte(lFL& - Seek(iFF%))
Get #1, , bytDByte
Adodc2.Recordset.Fields("xfile").AppendChunk bytDByte
lCurProg& = lCurProg& + 1
ProgressBar1.Value = lCurProg&
Caption = lCurProg& & "/" & lSplit& & " - " & (lFL& - Seek(iFF%)) & "/" & lFL& & " - Max bytDByte:" & UBound(bytDByte)
DoEvents

اما در بخش دوم ما باید رکورد مورد نظر رو در دیتابیس Update کنیم

Loop Until EOF(iFF%) Or Seek(iFF%) >= lFL&
Adodc2.Recordset.UpdateBatch
Close iFF%
MsgBox "Uploading Completed...", vbInformation
این بخش از کد بهیچ وجه در پروسزبار به نمایش در نمیاد
شما وقتی این عملیات رو با یه فایل مثلاً 200 مگابایتی انجام میدید میبینید که بعد از این پروسزبار به انتها رسید حدوداً 14 ثانیه زمان بروزرسانی طول میکشه
که این زمان بسته به حجم فایل بیشتر هم میشه
امیدوارم تونسته باشم منظورم رو برسونم
بازهم ممنونم
یاعلی

محسن واژدی
پنج شنبه 25 خرداد 1391, 19:37 عصر
سلام علیکم
مجددا ضمیمه قبلی را بررسی کنید، انشاء الله درسته

موفق باشید

meysam34797
چهارشنبه 07 مهر 1395, 08:29 صبح
این همه نوشتید اگر از همون اول یه نمونه میزاشتید نیاز به اینهمه نامه نگاری نبود:بوس:

vbhamed
یک شنبه 18 مهر 1395, 09:00 صبح
سلام
دوست عزیز اینجا سایت آموزشی است نه ماهیگیری !