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

نام تاپیک: save dialog

  1. #1
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    save dialog

    چطور باید کدی مثل کد زیر رو برای save dialog نوشت
      var
    str,s,s1,s2,s3:string;
    d:tdate;
    begin
    str:=ShellTreeView1.Path;
    d:=date;
    s:=DateToStr(d);
    s1:=copy(s,1,4);
    s2:=copy(s,6,2);
    s3:=copy(s,9,2);
    s:='backup_'+s1+'_'+s2+'_'+s3;
    str:=str+'\'+s;
    with form1.ADOCommand1 do
    begin
    CommandText:='BACKUP DATABASE Test TO DISK='+QuotedStr ( str);
    execute
    end;
    ShowMessage('عملیات پشتیبان گیری با شکست مواجه شد');


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

  2. #2
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    ميتونين از اين كد استفاده كنيد:
    var
    s,s1,s2,s3:string;
    begin
    s:=DateToStr(now);
    s1:=copy(s,1,4);
    s2:=copy(s,6,2);
    s3:=copy(s,9,2);
    s:='backup_'+s1+'_'+s2+'_'+s3+'.mdb';
    SaveDialog1.FileName:=s;
    SaveDialog1.Filter:='*.mdb|*.mdb';
    if SaveDialog1.Execute then
    ADOCommand1.CommandText:='BACKUP DATABASE Test TO DISK = '+QuotedStr(SaveDialog1.FileName);
    try
    ADOCommand1.Execute;
    Except
    ShowMessage('عملیات پشتیبان گیری با شکست مواجه شد');
    end;

    به دو نكته هم توجه داشته باشيد . اول اين كه در خط 8 ، جايي كه داريد نام فايل Backup رو
    ميسازيد بايد در انتها پسوند فايل رو هم بنويسيد . من در كد بالا به عنوان مثال از پسوند
    mdb استفاده كردم كه شما با توجه به پسوند فايل Database كه داريد بايد اون رو تغيير بدين
    همچنين براي اين كه كاربر در محيط SaveDialog فايلهايي غير از پسوند mdb رو نبينه من در
    خط 10 ، پسندهاي SaveDialog رو با همون پسند mdb فيلتر كردم .
    موفق باشيد .

  3. #3
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    دوست عزیز برنامه این ارور رو میده

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

  4. #4
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    من اين كد رو چك كردم . هم براي حالت Backup و هم براي حالت Restore جواب ميده .
    احتمالا در تعيين پسوند اشتباه داشتيد . به هر صورت من مجددا توابع مربوط به Backup و
    Restore رو براتون ميذارم . اميدوارم مشكل رفع بشه .
    يه Database به نام Test دارم در SQL . توجه داشته باشيد كه پسوند فايل Backup در SQl ،
    bak.* هست . در ضمن چون موقع Restore امكان داره كه Database به نام Test اصلا وجود
    نداشته باشه ، بايد ConnectionString مربوط به ADOCommand1 رو منتقل كنم به يه
    Database كه ميدونم حتما هست مثل Master .
    بنابر اين توابع رو به اين شكل قرار ميديم :
    procedure TForm1.Back_up;
    var
    s,s1,s2,s3:string;
    begin
    ADOCommand1.ConnectionString:='Provider=SQLOLEDB.1 ;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test';
    s:=DateToStr(now);
    s1:=copy(s,1,4);
    s2:=copy(s,6,2);
    s3:=copy(s,9,2);
    s:='backup_'+s1+'_'+s2+'_'+s3+'.bak';
    SaveDialog1.FileName:=s;
    SaveDialog1.Filter:='*.bak|*.bak';
    if SaveDialog1.Execute then
    ADOCommand1.CommandText:='BACKUP DATABASE test TO DISK ='+QuotedStr(SaveDialog1.FileName);
    try
    ADOCommand1.Execute;
    except
    showmessage('Error');
    end;
    end;

    procedure TForm1.Restore;
    begin
    ADOCommand1.ConnectionString:='Provider=SQLOLEDB.1 ;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master';
    SaveDialog1.Filter:='*.bak|*.bak';
    if SaveDialog1.Execute then
    ADOCommand1.CommandText:='RESTORE DATABASE test FROM DISK = '+QuotedStr(SaveDialog1.FileName);
    try
    ADOCommand1.Execute;
    ADOCommand1.ConnectionString:='Provider=SQLOLEDB.1 ;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test';
    except
    showmessage('Error');
    end;
    end;

  5. #5
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    کد شما را مقداری تغییر دادم و اکنون درست عمل میکند
    var
    s,s1,s2,s3:string;
    begin
    s:=DateToStr(now);
    s1:=copy(s,1,4);
    s2:=copy(s,6,2);
    s3:=copy(s,9,2);
    s:='backup_'+s1+'_'+s2+'_'+s3+'.bak';
    SaveDialog1.FileName:=s;
    SaveDialog1.Filter:='*.bak|*.bak';
    try
    if SaveDialog1.Execute then
    DataModule5.ADOConnection1.Execute('backup database alamdar to disk='''+SaveDialog1.FileName+'''');
    except
    MessageDlg('عملیات پشتیبان گیری با شکست مواجه شد',mtError,[mbOK],0);
    end;
    end;


    اما کد مربوط به رستور نه با کد شما نه با کد زیر هیچ کدام درست عمل نمیکنن و errorr را نمایش میدهند
    begin
    try
    if OpenDialog1.Execute then
    DataModule5.ADOConnection1.Execute('restore database alamdar from disk ='''+OpenDialog1.FileName+'''');
    except
    showmessage('Error');
    end;
    end;
    آخرین ویرایش به وسیله matinebi : چهارشنبه 11 دی 1387 در 11:19 صبح

  6. #6
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    من در پست قبلي خدمتتون عرض كردم ، اگر بخواين يك Table رو در Restore كنيد نبايد در اون
    لحظه هيچ نوع Connection با اون Table داشته باشيد .
    اشكال تابع Restore كه شما نوشتيد به نظر من فقط همينه كه هيچ Connection رو تغيير نداديد
    من يك خط به كد شما اضافه كردم و تستش هم كردم ، هيچ مشكلي نداره . تابع Restore رو
    به صورت زير بنويسيد :
    begin
    try
    DataModule5.ADOConnection1.ConnectionString:='Prov ider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Master';
    if OpenDialog1.Execute then
    DataModule5.ADOConnection1.Execute('restore database alamdar from disk ='''+OpenDialog1.FileName+'''');
    except
    showmessage('Error');
    end;
    end;

    بعد از اين كه فرايند Restore انجام شد با كد زير Connection رو برگردونيد به همون Table خودتون :
    DataModule5.ADOConnection1.ConnectionString:='Prov  ider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=alamdar';

    اگر مجددا Error داد ، كد ها رو از بدنه Try Ecept خارج كنيد متن Error واقعي رو ببينيد ، بعد
    اون متن رو روي سايت پست كنيد تا زودتر به نتيحه برسيم .
    موفق باشيد.

  7. #7
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    این ارور رو میده

    Operation is not allowed when the object is open

    برای این که هیچ نوع کانکشنی از adoQuery ها به بانک نداشته باشیم چه کدی رو باید نوشت چون من فقط از adoQuery و adoCommand استفاده کردم

    این کدی که شما نوشتید حتی اجازه نمیده opendialog اجرا شود من یک خط کد به آن اضافه کردم حالا opendialog اجرا میشه ولی این ارور رو میده
    (البته بعد از 15 ثانیه مکث و قفل شدن برنامه)
    Exclusive access could not be obtained because the database is in use.

    DataModule5.ADOConnection1.Close;
    DataModule5.ADOConnection1.ConnectionString:='Prov ider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Master';
    if OpenDialog1.Execute then
    DataModule5.ADOConnection1.Execute('restore database alamdar from disk ='''+OpenDialog1.FileName+'''');
    آخرین ویرایش به وسیله matinebi : چهارشنبه 11 دی 1387 در 16:24 عصر

  8. #8
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    خدا عمرت بده كه اصل پيام خطا رو نوشتي .
    اين پيام داره ميگه در لحظه اي شما قصد اجراء تراكنش رو داريد يك برنامه ديگه هم هست كه
    جدول مورد نظرتون رو باز كرده و اجازه اجراء تراكنش رو نميده . من حدس ميزنم كه شما
    برنامه Enterprise Manager يا Query Analyzer رو باز كردين و از طريق اونها هم دارين بانكتون
    رو بررسي ميكنيد . يا در حالت كلي يه برنامه ديگه يا يك AdoConnection ديگه در برنامه خودتون
    داريد كه هم زمان به جدول alamdar متصل هست . شما بايد تمام ارتباط هايي رو كه حدس
    ميزنيد با جدول وجود داره ببنديد . تا اينجا كه مشكل از كد برنامتون نيست .
    موفق باشيد .

  9. #9
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    خوب بالاخره با این کد مشکل حل گردید ولی میخوام به جای کد ; close کدی بنویسم که نیازی نباشد برنامه بسته شود
    var
    s:string;
    begin
    DataModule5.ADOCommand1.CommandText:='Use Master';
    DataModule5.ADOCommand1.Execute;
    DataModule5.ADOCommand1.CommandText:='';

    if not OpenDialog1.Execute then exit;
    if OpenDialog1.Execute then
    s:=OpenDialog1.FileName;

    with DataModule5.ADOCommand1 do
    begin
    CommandText:='RESTORE DATABASE alamdar FROM DISK='+QuotedStr (s);
    execute;
    end;
    MessageDlg('اطلاعات با موفقیت برگردانده شد',mtInformation,[mbOK],0);
    close;
    end;


    که برای این مشکل از کد
    DataModule5.ADOConnection1.ConnectionString:='Prov  ider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=alamdar';

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

  10. #10
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    اول يه نكته در مورد كد خط 7 خدمتتون بگم :
    if not OpenDialog1.Execute then exit;

    نيازي به نوشتن اين خط نيست چون در اين صورت OpenDialog در برنامتون 2 مرتبه پشت سر
    باز ميشه . فقط كافي بود باقي خط ها رو درون بدنه If در خط 8 قرار بديد .
    اما در مورد Close منظورتون رو متوجه نشدم . چرا Close رو نوشتيد كه Form رو ببنده ؟
    در ضمن كدي كه من براي تغيير Connection نوشتم فقط براي برگردوندن ارتباط قطع شده با
    جدول alamdar بود ، البته ايده خود شما در خط 4 :
    DataModule5.ADOCommand1.CommandText:='Use Master';

    خيلي قشنگتره ، پس از همين روش براي برگشتن به جدول alamdar ، بعد از اتمام فرايند
    Restore استفاده كنيد .
    موفق باشيد .

  11. #11
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    من به جای خط ;close از کد
    DataModule5.ADOCommand1.CommandText:='Use Master';

    استفاده کردم اما اطلاعاتی که رستور شدن رو نمایش نمیده و باید حتما برنامه یکبار بسته بشه
    در ضمن اگه تا قبل از بسته شدن برنامه به کدی مثل
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Add('select * from sabt_moshtari');
    ADOQuery2.open;

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

    Invalid object name 'sabt_moshtari'

  12. #12
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    آقا يافتم . مشكل از اينه كه علاوه بر ADOQuery يه ADOCommand هم داريم كه مقدار ConnectionString براش تنظيم شده .
    من اينو در نظر نگرفته بودم . اگر فرض كنيم كه شما در فرم DataModule5 فقط يك
    Adoquery و يك Adocommand داشته باشيد اون وقت ، عمرا كه كد زير همچنان Error بده !!
    var
    s:string;
    begin
    DataModule5.ADOCommand1.ConnectionString:='Provide r=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master';
    DataModule5.ADOQuery1.Close;
    DataModule5.ADOQuery1.ConnectionString:='';
    if OpenDialog1.Execute then
    begin
    s:=OpenDialog1.FileName;
    with DataModule5.ADOCommand1 do
    begin
    CommandText:='RESTORE DATABASE test FROM DISK = '+QuotedStr(s);
    execute;
    end;
    MessageDlg('اطلاعات با موفقیت برگردانده شد',mtInformation,[mbOK],0);
    end;
    DataModule5.ADOQuery1.ConnectionString:='Provider= SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=alamdar';
    DataModule5.ADOCommand1.ConnectionString:=ADOQuery 1.ConnectionString;
    // Refresh Dataset
    with DataModule5.ADOQuery1 do
    begin
    sql.Text:='select * from sabt_moshtari';
    Open;
    end;

    موفق باشيد .

  13. #13
    کاربر دائمی آواتار matinebi
    تاریخ عضویت
    آبان 1386
    محل زندگی
    نیشابور
    پست
    433

    نقل قول: save dialog

    خوب یعنی باید به ازای هر adoQuery که شاید 15 تا بشه این کد رو بنویسم
    DataModule5.ADOQuery1.Close;
    DataModule5.ADOQuery1.ConnectionString:='';


    فکر کنم همون نوشتن کد ;close به صرفه باشه

  14. #14
    کاربر دائمی آواتار shervin farzin
    تاریخ عضویت
    مرداد 1387
    محل زندگی
    مشهد - shervinfarzin@gmail.com
    پست
    256

    نقل قول: save dialog

    سلام
    نه ، اگه تعداد ADOQuery هاتون زياده لازم نيست براي همشون اين كار رو بكنيد .
    كافيه يك ADOconnection در فرم DataModule اضافه كنيد و به خاصيت Connection مربوط به
    تمام AdoQuery ها به ADOconnection1 قرار بديد . بعد ConnectionString اون رو براي جدول
    خودتون تنظيم كنيد . اون وقت ، اون كد رو فقط يك بار براي ADOconnection1 بنويسيد .
    موفق باشيد .

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

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