نمایش نتایج 1 تا 15 از 15

نام تاپیک: مهم : نمایش تصویر از فیلد نوع Blob در Oracle

  1. #1

    Unhappy مهم : نمایش تصویر از فیلد نوع Blob در Oracle

    سلام به همه دوستان برنامه نویس
    ما یک Oracle DB داریم که توی اون تصاویر درون فیلد از نوع Blob ذخیره شده. حالا چه طوری می تونیم این تصاویر رو از DB واکشی کنیم و نمایش بدیم ؟
    در ضمن در حال انجام یک پروژه هستم و توی این قسمتش گیر افتادم. لطفاً اگه ممکنه سریعتر یاری فرمایید. فوریه!!!

  2. #2
    بستگی داره که شما به چه شکل با Oracle ارتباط برقرار می کنید...
    آیا از پرووایدر مخصوص آن استفاده می کنید (OracleClient) و یا از پرووایدر OLEDB یا ODBC استفاده می کنید؟
    پرووایدر مخصوص Oracle از لینک زیر قابل داونلود است:
    http://otn.oracle.com/software/tech/...t/content.html

    یک مثال ساده با فرض استفاده از پرووایدر OLEDB

    OleDbDataReader dr = cmd.ExecuteReader( );
    if(dr.Read( ))
    {
    Response.ContentType = "image/bmp";
    Response.BinaryWrite((byte[])dr["Photo"]);
    }
    dr.Close( );

    پ.ن: روند بازیابی داده های binary از تمامی DBMS ها تقریبا به یک شکل انجام می پذیرد.
    موفق باشید.

  3. #3
    سلام جناب راد
    ممنون از اینکه به سوالم جواب دادین ولی :
    1- من از OracleClient و Oracle Connection برای ارتباط استفاده می کنم.
    2- من نمی خوام تصویر رو همینطوری روی صفحه بکشم بلکه می خوام توی یک ImageBox یا چیز دیگه ای شبیه اون قرار بدم تا بتونم جاش رو روی صفحه مشخص کنم. مثلاً بذارمش کنار صفحه توی یک سلول خاص از یک Table.
    با تشکر اگه ممکنه راهنمایی بفرمایید.

  4. #4
    1) قبلا هم عرض کردم که نوع پرووایدر شما در روند کار دخالتی نداره!

    2) بسیار خوب!
    از آنجا که تعیین عکسی که قرار است نمایش داده شود، با تنظیم خاصیت ImageUrl کنترل Image انجام می پذیرد و این خاصیت با یک مقدار از نوع رشته ای سر و کار دارد، پس تنها راه، تبدیل داده های باینری ذخیره شده ، به عکس و انتساب نام و محل ذخیره ی عکس به خاصیت ImageUrl کنترل Image است.
    با دستوراتی شبیه به آنچه که در زیر نوشتم، قادر به پیاده سازی جواب سوال خود هستید:

    Dim fs As FileStream
    Dim bw As BinaryWriter
    Dim bufferSize As Integer = 300000
    Dim outbyte(300000 - 1) As Byte
    Dim retval As Long
    Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess )
    reader.Read()
    fs = New FileStream("getImageNameFromDatabase", FileMode.OpenOrCreate, FileAccess.Write)
    bw = New BinaryWriter(fs)
    retval = reader.GetBytes(0, 0, outbyte, 0, bufferSize)
    bw.Write(outbyte)
    bw.Flush()
    bw.Close()
    fs.Close()
    reader.Close()
    Image1.ImageUrl = Image.FromFile("getImageNameFromDatabase")

    پ.ن: این نوع تبدیلات زمان بر است به همین خاطر یکی از دلایلی که گفته می شود تنها مسیر عکس را در دیتابیس ذخیره کنید، جلوگیری از این نوع تبدیلات است.
    اضافه کردن نیم اسپیس System.IO را فراموش نکنید.
    موفق باشید.

  5. #5
    سلام
    قربون مرامتون ! از اینکه اینقدر پیگیر قضایا هستین خیلی خیلی تشکر.
    سوالی که کردم مربوط به سیستم انتخاب واحد یک مرکزه که همونطور که می دونین توی یک لحظه ممکنه ده ها نفر و شاید بیشتر وارد سایت بشن و بخواهند استفاده کنن.
    از طرفی همونطور که خودتون فرمودین کاری که من قصد دارم انجام بدم و شما هم زحمت کشیدین و راه حلشو ارائه دادین کاری وقت گیره.
    حالا من یه چیزی به نظرم رسید! البته خیلی ساده است. گفتم اولش با شما در میون بگذارم اگه درسته انجامش بدم.
    اگر یک UserControl بسازم و داخلش از روش اولی که ارائه کردین استفاده کنم و بعد این UserControl رو توی سلول جدول مورد نظرم قرار بدم عملی خواهد بود و تقریباً مثل همون ImageBox میشه یا خیر.
    اگر نظرتون مثبته و امکانش هست کد اولتون رو یه خورده مفصل تر توضیح بدین و اگه زحمتتون نیست ترجیحاً VB Syntax باشه بهتره.
    از اینکه اینقدر پر رویی می کنم ببخشین. ما هم امیدمون به این سایت و دوستان و متخصصینی مثل شماست.

  6. #6
    خیر همونی که گفتم بهترین روشه.
    اینجور به ازای هر فرد یک بار باید User Control ایجاد و پردازش بشه که اصلا توصیه نمی کنم.

  7. #7
    بسیار خوب!
    خیلی ممنون پس از همون روش دوم استفاده می کنم و اگه مشکلی بود باز مزاحمتون خواهم شد. خدا کنه خیلی روی زمان لود تاثیر نداشته باشه. امیدوارم!

  8. #8
    چرا تنها مسیر عکس رو در دیتابیس ذخیره نمی کنید؟

  9. #9
    به خاطر اینکه پروژه قبلاً تحلیل شده ، DB طراحی و آماده شده و Application ویندوزی اش هم با دلفی نوشته شده و آماده است و من فقط وظیفه دارم بخش وب اون رو باید طراحی کنم و باید از همین DB استفاده کنم.

  10. #10
    آقا این مشکل من باز هم حل نشد.
    میدونم خودم گیج بازی در آوردم ولی ببخشین از کم تجربگی توی کار کردن با اوراکله.
    همونطور که گفتم این DB از قبل آماده است. برای لاگین یک Procedure نوشته شده که شماره دانشجویی و Password رو به عنوان پارامتر ورودی میگیره و مشخصات اون و عکس اون رو که یک فیلد Blob هست به عنوان پارامتر خروجی بر می گردونه حالا من می خوام عکس توی این فیلد رو نمایش بدم.
    همه کدش رو که خیلی طولانیه چون پارامترهاش زیاده ولی تا اون قسمتها رو حذف کردم و کدش رو هم گذاشتم. پارامترها درست گرفته میشه چون بقیه پارامترها رو به خوبی میشه استفاده کرد. برای این عکس یه جایی دارم اشتباه فاحش می کنم ولی نتونستم درستش کنم. حالا میشه این کد رو اصلاحش کنین :

     
    com.Connection = OracleCnn
    com.CommandText = "PRC_STUDENT_LOGIN"
    com.CommandType = CommandType.StoredProcedure
    com.Parameters.Add(New OracleClient.OracleParameter("Pic_P", OracleClient.OracleType.Blob))
    com.Parameters("Pic_P").Direction = ParameterDirection.Output
    OracleCnn.Open()
    com.ExecuteNonQuery()
    Dim fs As FileStream
    Dim bw As BinaryWriter
    Dim bufferSize As Integer = 300000
    Dim outbyte(300000 - 1) As Byte
    Dim retval As Long
    fs = New FileStream(StuInformation.Student_Internal_Code, FileMode.OpenOrCreate, FileAccess.Write)
    bw = New BinaryWriter(fs)
    Session("stupic") = com.Parameters("Pic_P").Value
    retval = Session("stupic").GetBytes(0, 0, outbyte, 0, bufferSize)
    bw.Write(outbyte)
    bw.Flush()
    bw.Close()
    fs.Close()
    OracleCnn.Close()


    خواهش می کنم بررسی کنین و اگه ممکنه مشکلش رو بگین

  11. #11
    دوست عزیز!!!
    از قول بنده به DataReader سلام برسونید و احوال متد ExecuteReader رو هم بپرسید!!!
    بهتره با دقت بسیار بیشتری به کد بنده توجه بفرمایید...
    موفق باشید.

  12. #12
    متشکرم مشکلم کاملاً حل شد!!! همانطور که گفتم اشتباه فاحش از من بود!

  13. #13
    دوباره سلام! البته با عرض شرمندگی!!!
    بک مشکلی وجود داره یک سری از تصاویر به درستی نشون داده میشن اما بعضی دیگه نصف بالایی شون سیاه می خوره. در صورتی که همه تصاویر سالم اند و توی Delphi Application که از همین DB استفاده می کنه به درستی نشون داده می شن!!!
    یعنی مشکل از کجا می تونه باشه؟!

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

  15. #15

    Talking

    سلام
    استاد جون شرمنده!
    حل شد! بافرش رو از 300000 به 1000000 افزایش دادم شد!
    باز هم از زحمات بی کران تون نهایت سپاس رو دارم
    (وی خودمونیما خوب بلدین آدمو به تلاش وادار کنینا. اونقدر جوابمو ندادین تا خودم برم سعیمو بکنم. ایول حقا که تو کارتون استادین. انصافاً به حق مدیر شدین. البته اشتباه نشه قصد چاپلوسی نداشتم )
    آخرین ویرایش به وسیله mehrdotnet : یک شنبه 06 آذر 1384 در 19:53 عصر

تاپیک های مشابه

  1. فیلد (کمک فوری)blob
    نوشته شده توسط Future در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: یک شنبه 22 اردیبهشت 1392, 14:53 عصر
  2. برگرداندن فایل Blob
    نوشته شده توسط مجتبی جوادی در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 4
    آخرین پست: دوشنبه 08 مرداد 1386, 14:16 عصر
  3. Blob
    نوشته شده توسط مجتبی جوادی در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 5
    آخرین پست: چهارشنبه 20 تیر 1386, 13:10 عصر
  4. نحوه فرستادن فیلدهای Blob با دستور SQL
    نوشته شده توسط Bahmany در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 1
    آخرین پست: چهارشنبه 24 اسفند 1384, 02:22 صبح
  5. درج در blob
    نوشته شده توسط bebakhshid در بخش VB.NET
    پاسخ: 1
    آخرین پست: سه شنبه 17 خرداد 1384, 13:02 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •