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

نام تاپیک: درج عکس در دیتابیس

  1. #1
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    درج عکس در دیتابیس

    سلام
    وقتی یه جدول رو با دستورات T-sql پر میکنم فیلد عکس رو چطور درج کنم؟


    qry1.sql.add(insert into cars (name,type,pic) valeus("BMW",1,nil);


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

  2. #2

    نقل قول: درج عکس در دیتابیس


    insert into cars (name,type,pic) values('Benz',3, FILE_READ('file.jpg'));

  3. #3
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    ممنون اگه فایل نباشه چی؟

  4. #4
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    62

    نقل قول: درج عکس در دیتابیس

    براي اينكار شما محتويات عكس كه به شكل باينري يا Stream هست رو به رشته اي از Hex تبديل كن
    function GetBitmapHexString(aBitmap: TBitmap): string;
    var
    ms: TStream;
    i: integer;
    b: byte;
    begin
    Result := '';
    ms := TMemoryStream.Create;
    try
    aBitmap.SaveToStream(ms);
    ms.Position := 0;
    for i := 1 to ms.Size do
    begin
    ms.Read(b, 1);
    Result := Result + IntToHex(b, 2);
    end;
    finally
    ms.Free;
    end;
    if Result <> '' then
    Result := '0x' + Result;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    HexString: string;
    begin
    HexString := GetBitmapHexString(Image1.Picture.Bitmap);
    if HexString = '' then
    HexString := 'NULL';

    qry1.sql.add('insert into cars (name, type, pic) valeus(''BMW'', 1, ' + HexString + ')');
    end;
    آخرین ویرایش به وسیله samani : پنج شنبه 03 اسفند 1391 در 14:33 عصر

  5. #5
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    نقل قول نوشته شده توسط samani مشاهده تاپیک
    براي اينكار شما محتويات عكس كه به شكل باينري يا Stream هست رو به رشته اي از Hex تبديل كن
    function GetBitmapHexString(aBitmap: TBitmap): string;
    var
    ms: TStream;
    i: integer;
    b: byte;
    begin
    Result := '';
    ms := TMemoryStream.Create;
    try
    aBitmap.SaveToStream(ms);
    ms.Position := 0;
    for i := 1 to ms.Size do
    begin
    ms.Read(b, 1);
    Result := Result + IntToHex(b, 2);
    end;
    finally
    ms.Free;
    end;
    if Result <> '' then
    Result := '0x' + Result;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    HexString: string;
    begin
    HexString := GetBitmapHexString(Image1.Picture.Bitmap);
    if HexString = '' then
    HexString := 'NULL';

    qry1.sql.add('insert into cars (name, type, pic) valeus(''BMW'', 1, ' + HexString + ')');
    end;
    به شدت کنده

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    62

    نقل قول: درج عکس در دیتابیس

    تو عكسهاي حجيم ممكن تا حدودي كند بشه براي مثال اگه حجم عكس 2 مگابايت باشه خروجي تابع 4 مگابايت رشته است كه ساختن رشته داخل حلقه كند ميشه ولي شما براي حل اين مشكل ميتونيد از getmem و تبديل آن به هگز از shl استفاده كنيد تابع زير براي تبديل استريم به رشته با سرعت بالاست كه فايل 2 مگابايتي رو كمتر از 30 ميلي ثانيه تبديل به رشته هگز ميكنه

    function StreamToString(Stream: TStream): String;
    var
    Size: Integer;
    p: PChar;
    begin
    Size := Stream.Size;
    SetLength(Result, Size * 2);
    GetMem(p, Size);

    Stream.Position := 0;
    Stream.Read(p^, Size);

    BinToHex(p, PChar(@Result[1]), Size);

    FreeMem(p, Size);
    end;

    function GetBitmapHexString(aBitmap: TBitmap): string;
    var
    ms: TStream;
    begin
    Result := '';
    ms := TMemoryStream.Create;
    try
    aBitmap.SaveToStream(ms);
    Result := StreamToString(ms);
    finally
    ms.Free;
    end;
    if Result <> '' then
    Result := '0x' + Result;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    HexString: string;
    sl: TStringList;
    t: Cardinal;
    begin
    sl := TStringList.Create;
    try
    t := GetTickCount;
    HexString := GetBitmapHexString(Image1.Picture.Bitmap);
    t := GetTickCount - t;
    if HexString = '' then
    HexString := 'NULL';
    sl.Text := HexString;
    sl.SaveToFile('HexString.txt');
    finally
    sl.Free;
    ShowMessage(IntToStr(t));
    end;
    end;

  7. #7
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    ارور می گیره :FreeMem(p, Size);
    و همچنین ms.Free;
    خطوط 15 و 28 در پست بالا

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    62

    نقل قول: درج عکس در دیتابیس

    تو دلفي 7و XE3 تست شده مشكلي نداره
    كدي رو كه نوشتي درست چك كن و همينطور FreeMem رو هم چك كن كه از توابع يونت System باشه شايد يونيت ديگري يوز هست كه بعد از System تعريف شده

  9. #9
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    ذرست شد حجم عکس من دو مگ هست
    کوئری که اجرا میشه بعد سه دقیقه رور میگره و تایم اوت میده

  10. #10
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    نقل قول نوشته شده توسط hassan_reza مشاهده تاپیک

    insert into cars (name,type,pic) values('Benz',3, FILE_READ('file.jpg'));
    این هم تست کردم کار نکرد مگه این تابع وجود نداره

    Msg 195, Level 15, State 10, Line 1
    'FILE_READ' is not a recognized built-in function name

    اسکول 2008

  11. #11
    کاربر دائمی آواتار gbg
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    سن
    46
    پست
    691

    نقل قول: درج عکس در دیتابیس

    من خودم از این روش استفاده می کنم ولی 2 ثانیه طول میکشه

    ms := TMemoryStream.Create;
    CBitmap.SaveToStream(ms);
    ms.Seek(0,0);
    qry1:=TADOQuery.Create(nil);
    qry1.Connection:=frmDataModule.conMowjCars;
    qry1.sql.add('insert into cars (name,type,pic) valeus('+Carname+','+inttostr(CType)+',:Ppic');
    qry1.Parameters[0].Attributes := [paLong];
    qry1.Parameters[0].DataType := ftBlob;
    qry1.Parameters[0].LoadFromStream(ms,ftBlob);
    qry1.ExecSQL;
    qry1.Free;
    ms.free;




    ادیت :
    بعضی وقت ها کلا رکورد رو هم ادد نمی کنه و ارور هم نمیگیره
    آخرین ویرایش به وسیله gbg : یک شنبه 06 اسفند 1391 در 21:44 عصر

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

  1. درج عکس در دیتابیس
    نوشته شده توسط m_gholami در بخش C#‎‎
    پاسخ: 2
    آخرین پست: چهارشنبه 05 بهمن 1390, 12:41 عصر
  2. سوال: درج اسم عکس در دیتابیس
    نوشته شده توسط shokoohhakemi در بخش ASP.NET Web Forms
    پاسخ: 3
    آخرین پست: یک شنبه 13 آذر 1390, 10:47 صبح
  3. سوال: درج عکس در دیتابیس
    نوشته شده توسط free bird در بخش SQL Server
    پاسخ: 1
    آخرین پست: چهارشنبه 10 شهریور 1389, 23:15 عصر
  4. ذخیره عکس در دیتابیس
    نوشته شده توسط reham در بخش SQL Server
    پاسخ: 4
    آخرین پست: پنج شنبه 05 آذر 1383, 11:37 صبح
  5. اضافه کردن عکس به دیتابیس
    نوشته شده توسط coral در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 7
    آخرین پست: چهارشنبه 27 آبان 1383, 21:09 عصر

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

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