ايران ويج

نسخه‌ی کامل: Stream کردن برای خواندن فیلد نوع OLE
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام
دوستان فرض کنید فایلی رو در فیلد نوع Ole در اکسس بصورت باینری ذخیره کرده ایم. حالا برای خوندن این فایل از پایگاه داده و از فیلد مورد نظر چگونه باید عمل کنیم
یک روش اینه که مقدار این فیلد رو بخونیم و در آرایه بایتی ذخیره کنیم و سپس اون رو توی یه فایل موقتی بریزیم و فایل رو اجرا کنیم.
اما از این روش نمی خوام استفاده بشه و میخوام مستقیما با خواندن از دیتابیس فایل رو بشه استفاده کرد.دوستی فرمودن باید از روش Stream استفاده کنیم. اما طریق اون رو نمی دونم

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

باتشکر
کد زیر رو ببینین:
کد:
Private Sub DisplayBlob()
Dim sFilename As String
Set cn = New CDatClass
Set rs = New Recordset

On Error GoTo Command1_Error
sFilename = App.Path & "\Temp\" & mGUID.GetGUID & ".tmp"

rs.Open "Select * FROM tblPersonal WHERE PID =" & cboPID.BoundText, cn.Conn, adOpenKeyset, adLockOptimistic

If rs.RecordCount = 0 Then cmdSave2DB.Enabled = False: cmdSave2File.Enabled = False: Picture1.Picture = Nothing: Exit Sub

Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("Foto").Value

mstream.SaveToFile sFilename, adSaveCreateOverWrite
        
        Picture1.Picture = LoadPicture(sFilename)

cmdSave2DB.Enabled = True: cmdSave2File.Enabled = True

rs.Close
cn.Conn.Close

Command1_Error:
    If err.Number <> 0 Then MsgBox Str(err) & " - " & Error, vbExclamation
End Sub

در کد بالا هم از روش استریم استفاده شده ولی همون جور که می بینید با استفاده از متد SaveToFile توی یه فایل موقت کار ذخیره شده...

همچنان منتظر شنیدن نظراتتون هستم
از مدیر محترم بخش وی بی هم خواهش می کنم که این پست ها و پیام های شخصی ما رو لطف کنن منت بزارن و فی سبیل الله یه نگاهی بندازن
از زحماتتون ممنون اجرتون با اباعبدالله.
سلام
مطلب اول اینکه از شما عذر می خوام بایت اینکه مدتی برای من مشکلی به وجود اومد که اصلا امکان حظور در ایرانویج رو نداشتم .
روش Stream کردن در واقع روشیست در که در اون شما با تجزیه تحلیل داده ها در حافظه می تونید باعث بشید نتایج و داده هاتون به طور مستقیم از حافظه خونده یا در حافظه نوشته بشه .
نمونه هم زیاد هست, Stream کردن داده های فایل های تصویری یا چند رسانه ای مثل AVI و یا تجزیه و تحلیل هایی که روی تصاویر در حافظه انجام می شه .
و به طور کلی هم یک فرمول عام داره که در مواقع خاص خودش ممکنه برای فرمت و نوع داده ها این فرمول متفاوت باشه.
خوب اون داده هایی مه شما در آرایه بایتی ذخیره کردید رو یادتون میاد در اینجا ما با کمک VarPtrArray ما اشاره گری از نوع Long از آرایه به دست میاریم که البته بعدا به کمک API CopyMemory می شه آرایه مورد نظر رو از اون اشاره گر حافظه بر گردوند.
در واقع کنترل فلش پلیر باید یک ورودی برای دریافت اشاره گر داشه باشه که من هر چی گشتم و تحقیق کردم چیزی در اون کنترل ندیدم .
موضوع اصلی اینه:
-ما داده های خودمون رو به حافظه می دیم مثلا در یک آرایه بایتی
-در مرحله بعدی اشاره گری به کمک VarPtrArray به دست می گیریم
-کنترل ما به جای دریافت آدرس فایل باید محلی برای تحویل این اشاره گر داشته باشه

این موضوع در مورد تصاویر و خیلی از فایل های دیگه قابل انجامه یعنی به جای اینکه ما داده هامون رو از دیتا بیس در یک فایل ذخیره کنیم و آدرس فایل رو مورد ارجاع قرار بدیم میام و اشاه رگ حافظه رو مورد ارجاع قرار می دیم...
دستتون درد نکنه.جدا شرمنده که خیلی مزاحم شدم واسه این مطلب چون سریع ، فوری و شدید به ایده شما نیاز داشتم
من جایی متدی به نام getChunk دیدم که برای خوندن فیلد نوع Blob از رکوردست استفاده میشد.اما باز نتونستم نتیجه مورد نظر رو ازش بگیرم
-----
-ما داده های خودمون رو به حافظه می دیم مثلا در یک آرایه بایتی
-در مرحله بعدی اشاره گری به کمک VarPtrArray به دست می گیریم
-کنترل ما به جای دریافت آدرس فایل باید محلی برای تحویل این اشاره گر داشته باشه
-----
خوب از همه دوستان تقاضا دارم که با هم رو ی روش فوق کار کنیم .من الان به عنوان یه کار و پروژه مهم عملیاتی کردن مراحل فوق رو شروع می کنم و نتایح رو میزارم توی تاپیک. ایشاله که جواب بیگیرم چون خیلی کاربردهای مفیدی می تونه داشته باشه و میتونه به یه روش امنیتی خیلی خوب تبدیل بشه.

از کاربری Darg بازم ممنونم
زنده باشید.