ورود

View Full Version : حذف کانکشن استرینگ از پراپرتی شیی adoConnection قبل اتصال به بانک



khoshblagh
یک شنبه 21 دی 1393, 06:13 صبح
با سلام خدمت دوستان
برنامه ای دارم که با adoConnection به sql2005 وصل میشود . تا اینجای کار مشکلی نیست . از آنجایکه ساخت برنامه و کمپایل آن در جای دیگری انجام میشود، لذا در پراپرتی کانکشن استرینگ آن عبارتی که باعث اتصال به صورت لوکال میشود درج و بعد از تست برنامه به صورت لوکال نسبت به حذف آن پراپرتی اقدام نموده و عبارت کانکشن استرینگ نهایی که مربوط به سرور اصلی میشود را به صورت یک عبارت در موقع ساخت adoConnection قرار میدهم. تا اینجای کار مشکلی نیست و برنامه در سرور اصلی اجرا میشود. مسئله اینجاست که بعضی وقتها در موقع کامپایل برنامه حذف پراپرتی پیش فرض کانکشن استرینگ فراموش میشود. لذا در موقع نصب برنامه بر روی سیستم کلاینتها و اجرای آن برنامه ، خطای عدم موجود بودن بانک اطلاعاتی و یا اکسس ویولشن را میدهد. البته پراپرتی connected به طور پیشفرض false میباشد.ولی ظاهرا برنامه در زمان اجرا باز هم کانکشن استرینگ پیش فرض را اجرا و خطای گفته شده اعلام میشود.
حالا من دنبال راهی هستم که یا برنامه قبل از ساخت adoConnection نسبت به حذف کانکشن استرینگ پیش فرض (در صورت موجود بودن )اقدام و یا به صورتی اعلام و درخواست حذف آنرا بنماید. البته من رویدادهای adoConnection امتحان کردم ولی جواب نداد. بنظرم مشکل اصلی این است که باید adoConnection اول ساخته شود که در این صورت خطای مورد نظر پیش میآید. ممنون میشوم در این خصوص راهنمایی بفرمائید. متشکرم

benyaminrahimi
یک شنبه 21 دی 1393, 09:19 صبح
معمولا در فرو ورودی برنامه در یک edit box مشخصات سرور را از کاربر طلب میکنند . در رجیستری ثبت میکنند و برای اتصالات بعدی از همان استفاده میکنند من یه نومنه اط اسلوب پیاده سازی در کامپوننت unidac رو براتون میزارم امیدوارم کمک کننده باشه


procedure tpatern.databesecon(cone: TUniConnection; aserver: string;
adatabase:
string; ausername: string;
apass: string; aurthen: string = 'auserver'; port: Integer = 1433);
begin
try
cone.SpecificOptions.Clear;
cone.SpecificOptions.Add('authentication=' + aurthen);
cone.Connected := false;
cone.Database := adatabase;
cone.Port := port;
cone.Server := aserver;


// if aurthen = 'auwindows' then


/////////////////////////////
if aurthen = 'auserver' then
begin


cone.Username := ausername;
cone.Password := apass;


end;
cone.Connected := true;
except


on E: EDatabaseError do


showeror(e.Message + #13 +
':مشکل در ارتباط با بانک اطلاعاتي' + adatabase);


end;
end;



مثال مربوط به ado connection



case rgtypcon.ItemIndex of
0:
begin


dm.connection.ConnectionString :=
'Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=office;Data Source=' +
trim(econ.Text);
dm.lockcon.ConnectionString :=





end;
1:
begin
dm.connection.ConnectionString :=
'Provider=SQLOLEDB.1;User ID=user;Password=pass;Initial Catalog=database;Data Source=' +
trim(econ.Text);




end


else
patern.raiser('متغيير هاي ارتباط ناقص است');
end;

یوسف زالی
یک شنبه 21 دی 1393, 10:10 صبح
با روشی که براتون خواهم گفت، می تونید به راحتی برنامه رو با کانکشن های باز بیلد کنید و بدون نگرانی در مقصد ازش استفاده کنید.
حسن انجام این کار اینه که در زمان طراحی دیگر مجبور به گذاشتن مجدد رشته نیستید، اگر هم فراموش کردید که کانکشن باز گذاشته شده بود، هیچ مشکلی پیش نخواهد اومد.
اما روش (فرض شده شی ADOConnection روی دیتاماژولی قرار دارد) :



Published
.
.
procedure DataModuleCreate(Sender: TObject);
.
.
Private
FIsRunTime: boolean;
public
constructor Create(Aowner: TComponent); override;
.
.


procedure TMyDM.DataModuleCreate(Sender: TObject);
begin
FIsRunTime := true;
end;


constructor TMyDM.Create(Aowner: TComponent);
begin
inherited;
FIsRunTime := false;
end;


procedure TMyDM.ADOConnection1BeforeConnect(Sender: TObject);
begin
if not FIsRunTime then
Abort;
end;





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