نقل قول: ذخيره عكس در بانك !!!
نقل قول:
نوشته شده توسط
acilios
با سلام.
از مديران بخش به خاطر ايجاد تاپيك تكراري معضرت ميخوام ولي هر چي با كليد واژه Blobو... گشتم به نتيجه نرسيدم.
سوالم اين بود كه چطوري ميشه خودعكس رو توي SQL ذخيره كنم ؟
به شكل آدرس ذخيره كردم ولي جايي كه برنامه قراره كار كنه احتمال پاك شدن فايل زياده !!و اينكه حداكثر تعداد اعضا حدودا" 300 نفر هستش.
ممنون.
Information.Close;
Information.SQL.Clear;
Information.SQL.Add('insert into information(pic) Values(:pic)');
Information.Parameters.ParamByName('pic').LoadFrom File(Form2.OpenPictureDialog1.FileName,ftBlob);
موفق باشید
نقل قول: ذخيره عكس در بانك !!!
نقل قول: ذخيره عكس در بانك !!!
با سلام.
جناب BatMan كد زير يادتون رفته :
Information.ExecSQL;
پيروز و سربلند باشيد.
نقل قول: ذخيره عكس در بانك !!!
سلامی دوباره.
یه مشکل تازه !!
وقتی کد زیر رو برای ثبت اجرا میکنم خطای "ADOquery Cannot Perform This Opration On a Closed Dataset"
میده.
Information.Close;
Information.SQL.Clear;
Information.SQL.Add('insert into users(code,pic) Values(:code,:pic)');
Information.Parameters.ParamByName('code').Value:= edit1.text;
Information.Parameters.ParamByName('pic').LoadFrom File(Form1.OpenPictureDialog1.FileName,ftBlob);
Information.ExecSQL;
مشکل از کجاست ؟
اگه میشه کد بالا رو به شکل AdoTable بدین چون من تا حالا ثبت با کوئری کار نکردم و با خطاهاش آشنا نیستم.
موفق باشید.
نقل قول: ذخيره عكس در بانك !!!
نقل قول:
نوشته شده توسط
acilios
سلامی دوباره.
یه مشکل تازه !!
وقتی کد زیر رو برای ثبت اجرا میکنم خطای "ADOquery Cannot Perform This Opration On a Closed Dataset"
میده.
Information.Close;
Information.SQL.Clear;
Information.SQL.Add('insert into users(code,pic) Values(:code,:pic)');
Information.Parameters.ParamByName('code').Value:= edit1.text;
Information.Parameters.ParamByName('pic').LoadFrom File(Form1.OpenPictureDialog1.FileName,ftBlob);
Information.ExecSQL;
مشکل از کجاست ؟
اگه میشه کد بالا رو به شکل AdoTable بدین چون من تا حالا ثبت با کوئری کار نکردم و با خطاهاش آشنا نیستم.
موفق باشید.
سلام
شما بايد بعد از اين دستور :
Information.SQL.Add('insert into users(code,pic) Values(:code,:pic)');
ديتابيس را بايد در حالت ويرايش يا درج قرار بدي.
خسته نباشيد.
نقل قول: ذخيره عكس در بانك !!!
تا جایی که من میدونم مقدار فیلد blob رو اینطور وارد نمیکنند
روش زیر را امتحان کنید :
var
Stream: TStream;
buf : TMemoryStream;
begin
Stream := ADOQuery.CreateBlobStream(ADOQuery.fieldbyname('My Field'), bmRead);
Stream.Seek(0,0);
buf:=TMemoryStream.Create;
Buf.CopyFrom(Stream,Stream.Size);
buf.SaveToFile('c:\Temp.bmp');
Stream.Free;
buf.Free;
end;
نقل قول: ذخيره عكس در بانك !!!
با سلام و تشکر از شما دوستان.
من همون کدهای قبلی رو توی یه پروژه دیگه کپی(!!!) کردم و بدون هیچ اخطاری اجرا و ذخیره شد هنوز هم نمیدونم اون پیغام خطا برای چی بود !
آقای babak_delphi من برای ذخیره عکس ها از روشی که بالا درج شده استفاده کردم و تا حالا هم مشکل خاصی نداشته به نظر شما روش مشکل داریه ؟
روشی که شما درج کردین چه مزیتی نسبت به روش من داره ؟
آیا روش خوبی(کارا) برای کم کردن حجم عکسی که ذخیره میکنم هست یه نه ؟ اگر بله لطفا" راهنمایی کنید.
باز هم از پاسخ دوستان ممنون.
نقل قول: ذخيره عكس در بانك !!!
سلام
كدي كه در پست 2 ، Batman عزيز نوشتن درست مثل كدي كه آقاي Babak_Delphi نوشتن.
البته كدي كه آقاي Babak_Delphi نوشتن براي خوندن عكس از Database هست نه نوشتنش .
به هر حال هر دوست گرامي از نوع داده Blob استفاده كردن .
نقل قول:
آیا روش خوبی(کارا) برای کم کردن حجم عکسی که ذخیره میکنم هست یه نه
هيچ كدوم از اين روشها ربطي به فشرده سازي Stream ورودي نداره . اگه قصد كم كردن حجم داده
ورودي رو داريد بايد از الگوريتمهاي فشرده سازي براي Stream استفاده كنيد .
نقل قول:
هنوز هم نمیدونم اون پیغام خطا برای چی بود !
علت خطا اين بود كه زمان ساختن فيلد Blob ، همونطور كه در خط زير :
Information.Parameters.ParamByName('pic').LoadFrom File(Form1.OpenPictureDialog1.FileName,ftBlob);
از كد شما نوشته شده ، بايد الگوي فيلد رو از Dataset ميخونده ، در حالي كه Dataset در اون
لحظه يا خالي بوده يا شامل فيلدهايي بوده كه هيچ كدوم الگوي Blob رو نداشتن .
اگر هنوز اين خطا رو داريد كافيه قبل كد Insert ، يك select انجام بديد به نحوي كه در خروجي
اين select حتما فيلدي كه عكس رو قرار ذخيره كنه وجود داشته باشه .
موفق باشيد.
نقل قول: ذخيره عكس در بانك !!!
برای نوشتن در دیتابیس هم با کمی تغییر میتونید از این روش استفاده کنید
مزیت این روش اینه که همه نوع داده ای رو میشه با اون نوشت و خوند
من از این برای خواندن و نوشتم فایل صوتی در دیتا بیس استفاده میکردم
البته همونطور که Shervin Farzin اشاره کردند این روشها ربطی به فشرده سازی ندارند
برای فشرده سازی روشهای دیگه ای وجود داره
مثلا میتونید ZLib رو در سایت جستجو کنید
موفق باشید
نقل قول: ذخيره عكس در بانك !!!
با سلام.
منظورم از فشرده سازی, استفاده از روش Stream نبود بلکه استفاده از روش هایی که babak_delphi به آن اشاره کردند بود.
با کلید Zlib جستجو کردم ولی مثل همیشه موارد یافت شده ربطی به Zlib نداشتند !!
اگه مثالی یا لینکی در رابطه با فشرده سازی عکس قرار بدین ممنون میشم.
یه سوال دیگه;جدولی دارم که توش سوابق افراد ذخیره میشه;به نظرتون از چه نوع فیلدی استفاده کنم ؟(nvarchar,nText,...)
نقل قول: ذخيره عكس در بانك !!!
سلام
ابتدا Zlib رو در بخش Uses فرم اضافه كنيد . بعد از اون با استفاده از Function زير ميتونيد يك Stream ورودي رو فشرده كنيد :
Function Zip(Source:TMemoryStream):TMemoryStream;
var
ComprStream:TCompressionStream;
begin
Result:=TMemoryStream.Create;
comprStream:=TCompressionStream.Create(clFastest,R esult);
try
comprStream.CopyFrom(Source,Source.Size);
finally
comprStream.Free;
end;
end;
به كمك تابع زير هم يك Stream فشرده شده رو باز ميكنيد ( البته فقط Stream هايي كه با تابع Zip فشرده كرديد .)
Function UnZip(Source:TMemoryStream):TMemoryStream;
var
DeComprStream:TDecompressionStream;
Buffer: Array[0..4000] of char;
BufLen: Integer;
begin
Result:=TMemoryStream.Create;
DeComprStream:=TDecompressionStream.Create(Source) ;
try
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
while BufLen>0 do
begin
Result.Write(Buffer,BufLen);
BufLen:=DeComprStream.Read(Buffer,SizeOf(Buffer));
end;
Result.Seek(0,soFromBeginning);
finally
DeComprStream.Free;
end;
end;
مثال :
var
Tmp:TMemoryStream;
begin
tmp:=TMemoryStream.Create;
try
// Zip File
tmp.LoadFromFile('C:\pic.jpg');
tmp:=Zip(tmp);
tmp.SaveToFile('C:\pic.zzip');
// Unzip File
tmp.LoadFromFile('C:\pic.zzip');
tmp:=UnZip(tmp);
tmp.SaveToFile('C:\pic.jpg');
finally
tmp.Free;
end;
موفق باشيد .
نقل قول: ذخيره عكس در بانك !!!
با تشکر از پاسخ شما.
در این کد :
comprStream:=TCompressionStream.Create(clFastest,R esult);
پارامتر clfastest دارای مقادیر دیگه ای هم هست ؟:متفکر:چون توی برنامه های فشرده سازی مثل WinRAR قبل از فشرده کردن فایل شما می توانید حالت هایی را در نظر بگیرید;مثل:Fastest;Normal;Good;Best,...
موفق باشید.
نقل قول: ذخيره عكس در بانك !!!
سلام
خطايي كه بهش اشاره كرديد مربوط به اين ميشه كه فايل عكس رو پيدا نكرده يا آدرسي كه وارد برنامه ميشه اشتباه .
پيشنهاد ميكنم قبل از استفاده از آدرس OpenPictureDialog ، اول اون رو Showmessage كنيد تا درستيش براي خودتون معلوم بشه .
نكته ديگه اين كه براي ويرايش كردن جدولتون بايد از دستور Update استفاده كنين نه اين كه Insert رو با Where تركيب كنيد !!
نكته بعد اين كه اگه نوع فيلد Code در جدولتون عددي هست ، نبايد مقدار Edit1.Text رو بين تگ قرار بدين.
پس كد ويرايش شما ميشه كد زير :
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('Update users set pic=:P1 where code = :p2');
Parameters.ParamByName('P1').LoadFromFile(OpenPict ureDialog1.FileName,ftBlob);
Parameters.ParamByName('P2').Value:=edit1.Text;
ExecSQL;
end;
موفق باشيد.
نقل قول: ذخيره عكس در بانك !!!
با سلام
جناب shervin farzin عزیز کدی که درباره فشرده سازی گذاشتید بعد از اینکه فایل رو unzip می کنم فایل خزاب میشه و دیگه باز نمیشه.
نقل قول: ذخيره عكس در بانك !!!
با سلام.
در مورد پیشنهادتون باید بگم که قبلا" این کار رو کردم;یعنی دیالوگ مسیر رو به درستی بر میگردونه(مقدار Opendialog.filename برابر با Null نیست ! ).
ابتدا از دستور آپدیت برای این کار استفاده کردم;ولی نه به این شکلی که شما بیان کردین.
در مورد نوع فیلد کد هم باید بگم از نوع "ان ور چر" هستش.
در پایان از شما ممنونم;کدی که دادین رو تست میکنم و نتیجشو ارسال میکنم(اینجا خبری از دلفی نیست).
موفق باشید.
نقل قول: ذخيره عكس در بانك !!!
سلام
نقل قول:
نوشته شده توسط
Batman
کدی که درباره فشرده سازی گذاشتید بعد از اینکه فایل رو unzip می کنم فایل خراب میشه و دیگه باز نمیشه.
يه سوال : فايل Zip رو به كمك همين كد Zip كه نوشتم توليد كرديد يا مثلا WinZip ساختيد ؟
اگه فايل Zip رو با همين Zip Function توليد كرديد پس لطفا كد Unzip كه نوشتيد روي سايت
بذارين چون من از همين دو تابع استفاده ميكنم و مشكلي به وجود نمياد .
موفق باشيد.
نقل قول: ذخيره عكس در بانك !!!
نقل قول:
نوشته شده توسط
shervin farzin
سلام
يه سوال : فايل Zip رو به كمك همين كد Zip كه نوشتم توليد كرديد يا مثلا WinZip ساختيد ؟
اگه فايل Zip رو با همين Zip Function توليد كرديد پس لطفا كد Unzip كه نوشتيد روي سايت
بذارين چون من از همين دو تابع استفاده ميكنم و مشكلي به وجود نمياد .
موفق باشيد.
من دقیقا کدهای شما رو کپی کردم.
بعد از اجرا حجم فایل unzip صفر میشه.
در ضمن مقدار فشرده سازی چقدره؟یعنی این بهتره یا winrar یا نرم افزارهای شبیه اینها؟
نقل قول: ذخيره عكس در بانك !!!
سلام
نقل قول:
نوشته شده توسط
Batman
مقدار فشرده سازی چقدره؟یعنی این بهتره یا winrar یا نرم افزارهای شبیه اینها؟
در حد 7 يا 8 فايلي كه من استفاده كردم مخصوصا در مورد عكسها يه ذره از WinZip بهتر بود .
ولي فقط در بعضي موارد از WinRAR بهتر عمل ميكرد .
در مورد الگوريتم فشرده سازي كه در Zlib Unit استفاده ميشه اطلاعي ندارم .
موفق باشيد.
نقل قول: ذخيره عكس در بانك !!!
سلام دوستان
روش اضافه کردن تصوير به بانک DBISAM چه جوريه ؟
نقل قول: ذخيره عكس در بانك !!!
منم این مشکل و دارم ، کسی هست که کد درست داشته باشه؟