ورود

View Full Version : Connection String را میخواهم که در زمان اجرای برنامه تشکیل بدهم



Malena
دوشنبه 25 اردیبهشت 1385, 07:34 صبح
سلام به همه؛

اگه بخوام Connection String برای کلاینت ها در زمان اجرای برنامه ساخته بشود ، باید چیکار کنم ؟

توضیح بیشتر : خب برای ConStr ، به چه احتیاج داریم ؟ به نام دیتابیس سروری که روی کلاینت ها نصبه ( آخه نصبه ! یعنی کلاینت ها هم SqlServer نصب دارند ) ، اسم کامپیوتر هر کلاینت ( ویا آدرس شبکه ای اش ) و ... خب دیگه ! منظورم اینه که این اطلاعات را چطوری در زمان اجرا بدست بیارم ؟

خیلی ممنون که کمک میکنید .


البته طبق قوانین سایت ، قبل از طرح سوال ، اول جستجو کردم و به این رسیدم ، که متاسفانه مشکلم را حل نکرد .

http://www.barnamenevis.org/forum/showthread.php?t=22137&highlight=%D2%E3%C7%E4+%C7%CC%D1%C7

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 07:48 صبح
شما به اسم یا IP دستگاهی که دیتا بیس روی آن است احتیاج دارید بعلاوه یه UserName , Password
یک راهش این است که شما یک INI فایل درست کنید و کنار فایل اجرایی خود قرار دهید و در موقع
اجرا پارامترها را از آن بخوانید و ConnectionString خود را ایجاد کنید
UserName , Password خود را نیز بصورت Encrypt شده داخل یک فایل دیگر قرار دهید و موقع اجرا
آنرا Decode کرده و استفاده کنید.
بدین صورت چون برنامه شما از این فایلها استفاده میکنید میتوانید آنرا روی هر دستگاهی
خواستید به بانک خود که میتواند روی هر دستگاه دیگر باشد نیز وصل کنید.

Malena
دوشنبه 25 اردیبهشت 1385, 08:01 صبح
متشکر آقای یعقوبی.

ولی سوال من ، نحوه نگهداری ConStr نیستش .

سوالم اینه که چگونه ، پارامترهای مورد نیاز را از کامپیوتر کلاینت ، استخراج کنم ؟ توسط چه دستورات و توابعی ؟ http://qsmile.com/qsimages/256.gif

خیلی ممنون.

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 08:15 صبح
چه پارامترهایی را میخواهید استخراج کنید ؟
نام کامپیوتر یا ... ؟

Malena
دوشنبه 25 اردیبهشت 1385, 08:23 صبح
چه پارامترهایی را میخواهید استخراج کنید ؟
نام کامپیوتر یا ... ؟

هرچی که لازم باشه . http://qsmile.com/qsimages/34.gif

مثلا این دوتا : نام کامپیوتر کلاینت ، نام دیتابیس سرور کلاینت . http://qsmile.com/qsimages/187.gif

دیتابیس هم SqlServer هستش.

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 08:27 صبح
نام دیتا بیس را که شما خودتان هر اسمی که بدهید همون میشه بستگی به اسمی که شما
میدهید که میتوانید یک اسم ثابت بگذارید و داخل برنامه از آن اسم استفاده کنید.
نام کامپیوتر :

Function ComputerName : String ;
Var S : Array[0..255] Of Char ;
nSize : Cardinal ;
Begin
nSize := 255 ;
GetComputerName(S, nSize) ;
Result := StrPas( S ) ;
End;

Malena
دوشنبه 25 اردیبهشت 1385, 08:31 صبح
ممنون از راهنمایی شما . تشکر. http://qsmile.com/qsimages/34.gif

درمورد نام دیتابیس سرور هم حق با شماست.
ولی ای کاش ، برای بدست آوردن اون هم تابعی معرفی کرده بودید . ( دیگه نور علی نور میشد ) http://qsmile.com/qsimages/18.gif

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 09:07 صبح
اگر میخواهید لیست دیتا بیسها را در SQL Server بدست بیاورید از طریق یک Query
میتوانید آنرا بدست بیاورید :

exec sp_databases

Malena
دوشنبه 25 اردیبهشت 1385, 09:21 صبح
مرسی بابت sp .

میخوام که اسم اون اینستنسی از SqlServer که روی کامپیوتر کلاینت ها نصب هستش را بدست بیارم که بتونم ConnectionString درست کنم.

ممنون. چقدر تند تند جواب میدین http://qsmile.com/qsimages/242.gif

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 09:53 صبح
یک مثال میزنم که لیست تمام SQL Server ها را نشان بدهد :

Malena
دوشنبه 25 اردیبهشت 1385, 09:59 صبح
خیلی زحمت کشیدید. ممنون.http://qsmile.com/qsimages/277.gif

میخونمش و اگه باز هم مشکلی بود ، مزاحم میشم.
دستتون درد نکنه.

Malena
دوشنبه 25 اردیبهشت 1385, 10:03 صبح
ببخشید اجراش کردم ولی
برای من چیزی لیست نکردش . http://qsmile.com/qsimages/297.gif

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 13:34 عصر
این مثال را هم امتحان کنید :

Malena
دوشنبه 25 اردیبهشت 1385, 13:42 عصر
http://qsmile.com/qsimages/297.gif واسه خودتون کار کرد کد دومی ؟ واسه من که کار نکرد

SQL Server هم که روشنه . هم 2000 و هم 2005 .

B_YAGHOBI
دوشنبه 25 اردیبهشت 1385, 13:51 عصر
شما احتمالا TCP/IP ندارید؟
در Network Connections خود یک Virtual Connection ایجاد کنید سپس امتحان کنید.

Malena
دوشنبه 25 اردیبهشت 1385, 14:36 عصر
مرسی . امروز خیلی بهتون زحمت دادم .

این را هم از AboutDelphi پیدا کردم ولی هنوز تستش نکردم .

uses DB, ADODB, Variants, ActiveX,
ComObj, AdoInt, OleDB;
...
procedure ListAvailableSQLServers(Names : TStrings);
var
RSCon: ADORecordsetConstruction;
Rowset: IRowset;
SourcesRowset: ISourcesRowset;
SourcesRecordset: _Recordset;
SourcesName, SourcesType: TField;
function PtCreateADOObject
(const ClassID: TGUID): IUnknown;
var
Status: HResult;
FPUControlWord: Word;
begin
asm
FNSTCW FPUControlWord
end;
Status := CoCreateInstance(
CLASS_Recordset,
nil,
CLSCTX_INPROC_SERVER or
CLSCTX_LOCAL_SERVER,
IUnknown,
Result);
asm
FNCLEX
FLDCW FPUControlWord
end;
OleCheck(Status);
end;
begin
SourcesRecordset :=
PtCreateADOObject(CLASS_Recordset)
as _Recordset;
RSCon :=
SourcesRecordset
as ADORecordsetConstruction;
SourcesRowset :=
CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator'))
as ISourcesRowset;
OleCheck(SourcesRowset.GetSourcesRowset(
nil,
IRowset, 0,
nil,
IUnknown(Rowset)));
RSCon.Rowset := RowSet;
with TADODataSet.Create(nil) do
try
Recordset := SourcesRecordset;
SourcesName := FieldByName('SOURCES_NAME');
SourcesType := FieldByName('SOURCES_TYPE');
Names.BeginUpdate;
try
while not EOF do
begin
if
(SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE)
and (SourcesName.AsString <> '') then
Names.Add(SourcesName.AsString);
Next;
end;
finally
Names.EndUpdate;
end;
finally
Free;
end;
end;
وقتی نوشتمش ، میگذارمش همین جا .

B_YAGHOBI
سه شنبه 26 اردیبهشت 1385, 06:31 صبح
این همون سورس دومی است که گذاشتم
در هر حال شما احتمالا TCP/IP ندارید
و میبایست یک Microsoft Network Loopback در قسمت Add New Hardware اضافه کنید.

Malena
سه شنبه 26 اردیبهشت 1385, 08:01 صبح
خب . چیزی که گفتید را تعریف کردم . الان این شکلیه . ولی باز هم کد دومی کار نمیکنه . http://qsmile.com/qsimages/254.gif

B_YAGHOBI
چهارشنبه 27 اردیبهشت 1385, 06:26 صبح
در قسمت TCP/IP یک IP وارد کنید :

Malena
چهارشنبه 27 اردیبهشت 1385, 06:57 صبح
اون IP ها را هم تنظیم کرده بودم ولی باز هم :گریه:

http://qsmile.com/qsimages/306.gif

B_YAGHOBI
جمعه 29 اردیبهشت 1385, 11:15 صبح
دیگه نمیدونم چی بگم !

illiya
دوشنبه 01 خرداد 1385, 13:17 عصر
سلام

من 1 مشکلی مشابه موضوع مطرح شده دارم . یعنی 1 برنامه دارم که با دلفی نوشته شده با Sql Server 2000 و با ADO . حالا می خوام با استفاده از Installshield فایل اجرایی برنامه رو بسازم و بعد این برنامه روی چندتا کامپیوتر که شبکه هستن نصب بشه و Database اون هم روی 1 کامپیوتر که حالت Server داره attach بشه و سایر کامپیوتر ها از این DB استفاده کنن . می خوام بدونم توی connection string مربوط به Ado باید اسم Server چی باشه ؟ اسم کامپیوتر خودم یا اون کامپیوتری که قراره Server باشه ؟و آیا توی دلفی لازم هست جایی پورتی تنظیم بشه ؟
دوم اینکه توی Installshield باید چه گزینه هایی رو برا دسترسی به Database تنظیم کنم ، اصلا احتیاجی به تنظیم هست یا نه ؟

vcldeveloper
سه شنبه 02 خرداد 1385, 07:35 صبح
می خوام بدونم توی connection string مربوط به Ado باید اسم Server چی باشه ؟ اسم کامپیوتر خودم یا اون کامپیوتری که قراره Server باشه ؟و آیا توی دلفی لازم هست جایی پورتی تنظیم بشه ؟

نام سرور. خیر در دلفی لازم نیست تنظیمات پورت مربوط به سرور را تنظیم کنید.

دوم اینکه توی Installshield باید چه گزینه هایی رو برا دسترسی به Database تنظیم کنم ، اصلا احتیاجی به تنظیم هست یا نه ؟
لزومی نداره بخواید چیزی رو در InstallShield تنظیم کنید.

illiya
سه شنبه 23 خرداد 1385, 08:13 صبح
با سلام

با تشکر از راهنماییهاتون . من توی برنامه ام زمان Login کلمه عبور و رمز عبوری رو که می گیریم ، با همون هم ConnectionString رو تشکیل می دم .به این صورت :
DM.ADOConnection1.ConnectionString :='Provider=SQLOLEDB.1;Password='+''''+trim(Edit2. Text)+''''+';Persist Security Info=True;User ID='+''''+trim(Edit1.Text)+''''+';Initial Catalog=ahkam;Data Source=asadzadeh';

در منوی خروج گزینه ای هست که از طریق اون دوباره صفحه Login باز می شه تا بشه تغییر کاربر داد. وقتی برای بار دوم کاربر دوم می خواد Login کنه ، این error نشون داده می شه :
Operation can not be allowed when the object is open

لبته من قبل از اتصال بار دوم این کدها ر و اضافه کردم :
DM.ADOConnection1.Close ;
DM.ADOConnection1.ConnectionString :='';

لطفا بگید مشکل از کجاست ؟