PDA

View Full Version : سوال: مشکل با savedialog و تابع Getcurrentdirectory



rkhabbazi
جمعه 26 آذر 1389, 18:48 عصر
سلام دوستان برنامه نویس:بوس:
هنگامی که با ابزار savedialog یک فایل را ذخیره می کنم، خروجی تابع GetCurrentDir هم عوض میشود. من برای جلوگیری از این کار ابتدا پوشه جاری را در یک متغیر رشته ای ذخیره می کنم، آنگاه بعد از فراخوانی ابزار savedialog و ذخیره فایل مورد نظر در مکان مورد نظر، سعی می کنم با تابع SetCurrentDir خروجی تابع GetCurrentDir را به حالت قبل برگردانم، اما بعد از بررسی متوجه شدم که مقدار متغیری هم که برای نگهداری مسیر جاری در نظر گرفته بودم، تغییر کرده است . لطفا برای حل اینمشکل منو راهنمایی کنید.
خدانگهدار.:چشمک:

Felony
شنبه 27 آذر 1389, 06:53 صبح
کدی که نوشتید رو قرار بدید ، یه جایی از کدتون خودتون خواسته یا ناخواسته دارید مقدار اون متغییر رو تغییر میدید .

rkhabbazi
یک شنبه 28 آذر 1389, 08:48 صبح
سلام آقا مجتبی
این هم کد:
SaveDlg.FileName:=Trim(Edit1.Text);
SaveDlg.Execute();
if Trim(SaveDlg.FileName)<>'' then
with dm1.Command do
begin
CommandText:='BACKUP DATABASE dbname TO DISK=:v1;';
Parameters.ParamByName('v1').Value:=(SaveDlg.FileN ame+'.mdf');
Execute;
CommandText:='BACKUP LOG dbname TO DISK=:v1;';
Parameters.ParamByName('v1').Value:=(SaveDlg.FileN ame+'.ldf');
Execute;
end;
نه اینطور که شما میگویید نیست
می تونید خودتون امتحان کنید. من هنگام باز شدن فرم پشتیبان برای تست، مسیر جاری رو با یه دستور تخصیص توی یه edit نمایش دادم و تا انتهای پشتیبان گیری هیچ دستوری برای تغییر مقدار edit نگذاشته بودم.
هنگامی که با savedialog پشتیبان رو توی یک پوشه دیگه غیر از مسیر جاری برنامه ذخیره کردم، مقدار داخل edit هم بطور ناخواسته عوض شد.
با تشکر فراوان

Felony
یک شنبه 28 آذر 1389, 09:05 صبح
اون کدی که قرار دادید ربطی به GetCurrentDir و SetCurrentDir نداره ، اون چیزی هم که میگید امکان نداره ، مقدار یک متغییر توسط شما یه جایی عوض میشه وگرنه متغییر به صورت خودکار به روز رسانی نمیشه ، مثلا کد زیر رو تست کنید :


var
Dir: String;
begin
Dir:= GetCurrentDir;
ShowMessage(Dir);
if SaveDialog1.Execute then
begin
SetCurrentDir(ExtractFilePath(SaveDialog1.FileName ));
Image1.Picture.SaveToFile(SaveDialog1.FileName);
end;
ShowMessage(Dir);
ShowMessage(GetCurrentDir);
end;

یه شئ SaveDialog و Image روی فرم قرار بدید و یه عکس تو Image بارگذاری کنید ، همونطور که میبینید مقدار متغییر Dir تغیری نمیکنه .

rkhabbazi
یک شنبه 28 آذر 1389, 10:11 صبح
اون کدی که قرار دادید....
سلام آقا مجید:خجالت:
متوجه شدم
در savedialog خاصیت ofNoChangeDir رو باید روی مقدار true تنظیم کنیم. اینکار رو در بخش options مربوط به savedialog باید انجام دهیم.
خدایا شکرت.:تشویق: