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

نام تاپیک: update تصویر در بانک

  1. #1
    کاربر دائمی آواتار programmermp
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    Green Territory of North
    پست
    732

    Talking update تصویر در بانک

    سلام

    من از کد زیر برای update فیلدهای متنی nchar که با textbox مقدار دهی می شن در جداول

    استفاده می کنم



    sqldel = "Update Questionnaire SET FNO='" & FNO.Text & "',Code=" & Val(txtCode.Text)



    حالا سئوال من اینه که

    1-آیا می شه از کد فوق برای checkbox هم استفاده کرد یا نه مثلا کد زیر


    sqldel = "Update Questionnaire1 SET FNO='" & FNO.Text & "',Home=" & chkHome.Checked

    که خواستم فیلد home را با مقدار chkhome.checked بروز رسانی (update ) کنم؟

    2-برای update تصویر در msdn خوندم که می شه از دو دستور زیر استفاده کرد

    UPDATETEXT و WRITETEXT اما نمی تونم ازش استفاده کنم به شکلی که از دستور

    update در کد بالا استفاده کردم در این زمینه لطفا من رو راهنمایی کنید

    با تشکر فراوان

  2. #2
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1385
    محل زندگی
    آبادان
    پست
    79
    برای سوال اول بله می توان اما شما خودتون امتحان می کردید اگه به مشکل بر میخوردید اینجا مشکل رو مطرح می کردید .

  3. #3
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    در کل بهتر است از روش پارامتری استفاده کنید، حتی در مورد String ها!!!
    چون اگر میخواهید یک String کلی را ذخیره کنید باید حواستان به دوتایی کردن گیومه باشد!
    اگر دستور SQL آپدید را با تک گیومه در شروع String استفاده کرده اید باید تمام تگ گیومه های احتمالی موجود در String را با جفت عوض کنید.
    (مثلاً همان کد اول هم که نوشته اید، اگر کاربرتان در FNO یک تگ گیومه وارد کند، اجرا کد فوق باعت بروز خطای runtime میشود.)

    در مورد مقادیر Boolean مشکل خاصی وجود ندارد ولی بهتر است که به صورت واضح به String تبدیل شوند (با CStr یا ToStrung) یک کم قانون مند تر است!!!

    در مورد تصویر هم به کرات جواب داده شده:
    https://barnamenevis.org/showthread.php?t=73763
    https://barnamenevis.org/showthread.php?t=60966
    و...

  4. #4
    کاربر دائمی آواتار programmermp
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    Green Territory of North
    پست
    732

    Talking

    سلام H2 عزیز

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

    من دستور update که در بالا نوشته بودم واسه استرینگ ها پارامتری نبود درسته ؟

    خوب دستوری که شما توی تاپیک دومی که لینک دادی در قالب برنامه گذاشته شده بود

    دستور update اون واسه تصویر به صورت پارامتری هست حالا مشکل چیه :

    1- من می خواهم اگه بشه مثل استرینگ در حالت پارامتری انجام نشه

    مثلا اگه در برنامه من برای ذخیره تصویر از یک متغیر به نام mydata از نوع byte واسه ذخیره

    عکس استفاده کردم توسط sqlcommand می خواهم همون متغیر رو به عنوان مرجع اطلاعات

    استفاده کنم در دستور update

    2- من تا به حال از روش پارامتری استفاده نکردم نمی دونم چطور باید استفاده بشه

    متغیر ها یا همون پارامترها رو باید کجا و چطوری تعریف کنم

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

    لطفا در مورد روش دوم به من کمک کنید

    با تشکر فراوان

  5. #5
    کاربر دائمی آواتار programmermp
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    Green Territory of North
    پست
    732

    Talking

    ای بابا یکی به داد ما برسه فوریه

  6. #6
    کاربر دائمی آواتار saeed_rezaei
    تاریخ عضویت
    آبان 1385
    محل زندگی
    ایلام
    پست
    430
    سلام
    من هم اغلب اوقات با استفاده از رشته کار خودم رو راه می اندازم اما بهترش استفاده از روش پارامتری هست. مخصوصا برای استفاده از داده های نوع byte که قرار تصاویر و یا فایلها رو نگهداری کنه که خیلی راحت تر هست.

    در روش پارامتری نیز، همانند روش رشته، باید یک رشته ایجاد کنید اما این رشته کمی متفاوت هست. سپس این رشته رو به یه sqlcommand می دید، همراه با مقادیر و سپس این sqlcommand رو اجرا می کنید. خیلی راحته.
    این نمونه کد رو در نظر بگیرید:



    1: Dim
    northwindConnection AsNew SqlConnection(connectionString)
    2: Dim strSQL AsString = _
    "INSERT INTO Picture (Filename, Picture)" & _
    "VALUES (@Filename, @Picture)"

    ' A SqlCommand object is used to execute the SQL statement.
    3: Dim cmd AsNew SqlCommand(strSQL, northwindConnection)

    With cmd

    ' Add parameters required by SQL statement. PictureID is an
    ' identity field (in Microsoft Access, an AutoNumber field),
    ' so you only need to pass values for the two remaining fields.
    4: .Parameters.Add(New SqlParameter("@Filename", SqlDbType.NVarChar, 50)).Value = arrFilename(0)
    5: .Parameters.Add(
    New SqlParameter("@Picture", SqlDbType.Image)).Value = arrImage

    EndWith

    ' Open the connection, execute the command, and close the
    ' connection. It is more efficient to ExecuteNonQuery when data
    ' is not being returned.
    6: northwindConnection.Open()
    7: cmd.ExecuteNonQuery()
    8: northwindConnection.Close()

    اینی که می بینید یه نمونه کد هست.
    در خط یک، کانشکنم رو معرفی کردم
    در خط دوم رشته ای رو که گفتم ایجاد کردم. دقت کنید. دراین رشته من خواستم که به جدول picture دو فیلد رو اضافه کنم. فیلدهای filename, picture
    در همین خط هم می بینید که از دو مقدار که با کاراکتر @ شروع شده اند استفاده شده. این کاراکتر مشخص می کنه که مقدار معرفی شده، یک پارامتر هست و نه یه مقدار.
    در خط سوم، یک sqlcommand ایجاد شده. این sqlcommand نیازمند یک سری اطلاعات اولیه برای شروع به کار هست. در خط سوم، رشته ای رو که ایجاد کرده ایم و همچنین کانکشنمون رو بهش می دیم.
    در خطوط بعدی یعنی 4-5 باید پارامترها رو هم بهش بدیم.
    در خط 4 پارامتر رشته ای جدید رو اضافه کرده ایم. سپس اون رو به پارامتر filename @ لینک کرده ایم. در این قسمت نوع داده رو اجباری باید مشخص کنیم و همچنین سایز فیلد رو، که البته سایز فیلد کاملا اختیاری هست. در انتهای این خط، مقدار این پارامتر رو هم مشخص کرده ایم، یعنی

    arrFilename(0)

    در خط 5 بازهم یه پارامتر البته این دفعه از نوع image که از انواع داده تعریف شده در sql برای نگهداری تصاویر هست ، ایجاد کرده ایم و به اون مقدار اولیه داده ایم.
    عموما در هر انتصاب پارامتر (خطوط 4و5) بایستی پارامتر جدید ایجاد، لینک، تعریف نوع و مقدار دهی شود.
    در سه خط آخر نیز 7-9 این دستور sqlcommand رو اجرا کرده ایم.

  7. #7
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    اولاً بسیار بسیار شرمنده از بابت تاخیر پیش آمده، کمی کار و مشکلات زیر و درشت داشتم که نشد زودتر خدمت برسم و حالا میبینم که کاربر saeed_rezaei هم لطف کرده اند و توضیحی دادند، من هم متنی را که حاضر کرده ام پست میکنم شاید بیشتر کمکتان کند و امیدوارم زیاد دیر نشده باشد.
    --------------------------------------------------------------------
    مثلاً شما میخواهید یک فیلتر سازی معمولی را با حالت پارامتری انجام دهید.
    در داخل String دستور SQL خود پارامتر را یا با علامت سوال یا با یک نام که قبلاً استفاده نشده مشخص میکنید (مثلاً برای تضمین اینکه نام شما منحصر باشد و با نام یک جدول یا فیلد برخورد پیدا نکند طبق یک عرف قدیمی یک علامت @ اولش اضافه کنید بد نیست.)

    SELECT * FROM tablename WHERE fieldname=@FieldName
    یا
    SELECT * FROM tablename WHERE fieldname=?


    در حالتی که از علامت سوال استفاده میکنید، ترتیب علامت سوالها و ترتیب اضافه شدن پارامترها به Command ملاک جایگذاری میشود و وقتی از نام استفاده میکنید همان نام (FieldName@) ملاک است (ولی بهتر است ترتیب را رعایت کنید، چون بعضی از موتورهای دیتابیسها مثل موتور JET که فایلهای mdb را مدیریت میکند نام را قبول ندارد! ایراد و خطا نمیگیرد ولی با نام هم مثل علامت سوال رفتار میکند و فقط ترتیب پارامتر ها در String دستور SQL و ترتیب ارسال مقادیر در Command برایش مهم است.)

    خوب پس دستور SQL را نوشتیم، طریقه مقدار دهی اش به وسیله خصوصیت Parameters شی Command است.
    دستور Add یک نمونه کلاسس پارامتری اضافه میکند
    دستور AddWithValue (برای SQL SERVER) یک پارامتر را با صرف داشتن نام و مقدار اضافه میکند (گرچه خودش به صورت داخلی دستور Add قبلی را اجرا میکند)
    دستور AddRange یک دسته آرایه ای از پارامترها را اضافه میکند که خیلی بهتر از Add کردن تک تکی پارامترها است.
    Insert هم پارامتر را در محل خاصی از نظر ترتیبی اضافه میکند.

    در آخر هم که Command را با یکی از دستورات سری ExecuteXXXXXX اجرا میکنید. (که احتمالاً تفاوت سری دستورات فوق را میدانید.)
    در دستورات زیر فرض شده نوع فیلد FieldName@ عددی و Int32 است.

    Dim iValue As Integer
    dbCommand.Parameters.Add("@FieldName", SqlDbType.Int)
    یا
    dbCommand.Parameters.Add("@FieldName", SqlDbType.Int, 4)
    یا
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.Int))
    یا
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.Int, 4))

    dbCommand.Parameters.Item(0).Value = iValue
    dbCommand.Parameters.Item("@Fieldname").Value = iValue

    و یا اینکه کاملترین است و مقدار را هم در زمان Add میدهد
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.Int, 4, ParameterDirection.Input, False, 0, 0, Nothing, DataRowVersion.Default, iValue))


    روش پارامتری برای همه فیلدها ثابت است و نمیخواهید به چیزهای دیگر فکر کنید فقط نوع فیلد و اگر هم خواستید سایز را دستکاری کنید، مثال فوق برای رد کردن یک پارامتری Integer بود و مثال زیر برای رد کردن یک آرایه بایتی، میبینید که چندان تفاوتی نکرده!

    Dim arrValue() As Byte
    dbCommand.Parameters.Add("@FieldName", SqlDbType.VarBinary)
    یا
    dbCommand.Parameters.Add("@FieldName", SqlDbType.VarBinary, 1024)
    یا
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.VarBinary))
    یا
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.VarBinary, 1024))

    dbCommand.Parameters.Item(0).Value = arrValue
    dbCommand.Parameters.Item("@Fieldname").Value = arrValue

    و یا اینکه کاملترین است و مقدار را هم در زمان Add میدهد
    dbCommand.Parameters.Add(New System.Data.SqlClient.SqlParameter("@FieldName", SqlDbType.VarBinary, 1024, ParameterDirection.Input, True, 0, 0, Nothing, DataRowVersion.Default, arrValue))

    توضیح هر پارامتر هم در زمان تایپ در محیط VS.Net نشان داده میشود، مثلاً پارامتر پنجم آخرین دستور نشان میدهد که مقدار میتواند در بانک NULL هم باشد یا نه!

    موفق باشید و مجدداً از بابت تاخیر عضرخواهی میکنم.

  8. #8
    کاربر دائمی آواتار programmermp
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    Green Territory of North
    پست
    732

    Talking

    سلام

    با تشکر فراوان از اقایان سعید رضایی و h2 عزیز

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

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



    برای بازیابی عکس
    ----------------
    PrivateSub DrawToScale(ByVal img As Image)
    pic.Image = New Bitmap(img)
    EndSub
    PrivateSub LoadImage()
    OnErrorGoTo fix
    con.Open()
    Dim SQLImage AsString = "SELECT Photo FROM Questionnaire WHERE FNO='" & FNO.Text & "'"
    Dim cmd AsNew SqlClient.SqlCommand
    cmd.Connection = con
    MsgBox(SQLImage)
    cmd.CommandText = SQLImage
    Dim b() AsByte
    b = cmd.ExecuteScalar
    If (b.Length > 0) Then
    Dim stream AsNew MemoryStream(b, True)
    stream.Write(b, 0, b.Length)
    DrawToScale(New Bitmap(stream))
    stream.Close()
    EndIf
    con.Close()
    fix:
    EndSub
    ---------------
    برای ذخیره عکس
    ----------------
    txtFileName.Text = ImagePath
    Dim fs AsNew FileStream(txtFileName.Text, FileMode.OpenOrCreate, FileAccess.Read)
    Dim MyData(fs.Length) AsByte
    fs.Read(MyData, 0, CInt(fs.Length))
    fs.Close()
    newrow("Photo") = MyData
    --------------
    برای ویرایش عکس
    ---------------
    Dim Cmd AsNew SqlClient.SqlCommand
    Dim strq AsString
    Dim strcon AsString
    Dim con As SqlClient.SqlConnection
    strcon =
    "Data Source=" & serverip & ";Initial Catalog=" & dbuser & ";Integrated Security=True"
    con = New SqlClient.SqlConnection(strcon)
    con.Open()
    Try
    strq = " UPDATE Questionnaire "
    strq &= " SET Photo = @ImageF "
    strq &= " WHERE FNO = '" & FNO.Text & "'"
    'Cmd = New SqlCommand
    Cmd.CommandType = System.Data.CommandType.Text
    Cmd.Connection = con
    Cmd.CommandText = strq
    Dim fs AsNew FileStream(OpenDialog.FileName, FileMode.OpenOrCreate, FileAccess.Read)
    Dim MyData(fs.Length) AsByte
    fs.Read(MyData, 0, CInt(fs.Length))
    fs.Close()
    Cmd.Parameters.Add(
    New SqlClient.SqlParameter("@ImageF", System.Data.SqlDbType.Image, MyData.Length, System.Data.ParameterDirection.Input, 0, 0, 1, System.Data.DataRowVersion.Current, False, MyData, "", "", ""))
    Cmd.ExecuteNonQuery()
    ReturnTrue
    Catch ex As Exception
    MsgBox(
    ".ویرایش تصویر انجام نشد" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Critical)
    ReturnFalse
    Finally : Cmd.Dispose()
    EndTry
    con.Close()

    ویرایش درست انجام می شه و مشکلی نیست ولی

    مشکل حالا چیه؟

    من هر بار که فرم رو باز می کنم و از تابع loadimage واسه نمایش عکس استفاده

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

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

    با زدن کلید next میارم عکس رو نشون نمی ده و همچنان عکس رکورد قبلی در پیکجر باکس

    هست نمی دونم مشکلش چیه

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

    ( از بین 7 رکورد همین دوتا فقط عکس دارند) بعد دیگه هر چی بین رکوردها حرکت کردم

    عکس عوض نشد که نشد

    نمی دونم چشه لطفا کمکم کنید

    با تشکر فراوان

  9. #9
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام

    تابع DrawToScale برای چیست؟؟؟؟؟؟؟؟

    شما باید Null بودن فیلد مربوطه را هم چک کنید و در صورتی که Null بو مقدار Nothing را در pic.Image بریزید تا خالی شود.



    Try

    ...

    If (b IsNot Nothing) AndAlso (b.Length > 0) Then

    ....

    Else

    pic.Image=Nothing

    End If

    ...



    Catch ex As Exception

    pic.Image = Nothing

    ...










    شما مطمئن هستید که سمپلی را که در تاپیک قبلی معرفی کرده بودم دیده اید؟ و مشکلتان حل نشده؟

    www.h02.ir/Download.aspx?File=PictureInDatabase.zip

    چون به نظر من کامل است و شما به راحتی با Copy و Paste و عوض کردن نام جدول میتوانید از آن استفاده کنید و تمام مسایل هم رعایت شده و باز همین الآن تست کردم و جواب داد.

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

  1. مشکل در دانلود JDK 5.0 Update 8 از سایت sun
    نوشته شده توسط mehrdad2 در بخش Java SE : نگارش استاندارد جاوا
    پاسخ: 11
    آخرین پست: چهارشنبه 31 تیر 1388, 16:50 عصر
  2. مشکل در Update کردن
    نوشته شده توسط alex_kh58 در بخش C#‎‎
    پاسخ: 3
    آخرین پست: چهارشنبه 11 بهمن 1385, 07:46 صبح
  3. update
    نوشته شده توسط javad0062 در بخش PHP
    پاسخ: 1
    آخرین پست: سه شنبه 07 شهریور 1385, 16:48 عصر
  4. یک سئوال در مورد Update کردن 2 جدول در Dbهای مختلف
    نوشته شده توسط mhaeri در بخش SQL Server
    پاسخ: 4
    آخرین پست: یک شنبه 29 مرداد 1385, 17:04 عصر
  5. چگونه از Update اطلاعات جداول در Ado مطلع شویم ؟
    نوشته شده توسط Mah6447 در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: یک شنبه 22 مرداد 1385, 09:05 صبح

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

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