# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  اشکال در اتصال کلاینت ها به سرور

## a-azad

سلام
من یک برنامه با دلفی نوشتم که بانکش اس کیوال سرور است.
بعد آمدم یک keyتوی رجیستری براش ساختم.به این صورت

```
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=telecommunication;Data Source=.
Value name:Connection
```

بعد ارتباط برنامه با اس کیوال از این طریق برقرار کردم
برای سرورمشکلی ندارم 
ولی برای کلاینت ها به این صورت می نویسم توی ریجیستری

```
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=telecommunication;Data Source=192.168.4.1
Value name:Connection
```

توی قسمت دیتاسورس آدرس ipسرورمی نویسم.ولیکن کلاینت وصل نمی شه به سرور
می خواهم اس کیول سرورروی کلاینت ها نصب نکنم.
خیلی ممنون اگه کمکم کنین .چون خیلی مهمه

----------


## accpascal

میشه لطفا متن ارور را بگذاری
من فکر می کنم آدرس آی پی را باید بصورت دیگری بنویسی
نصب اس کیو ال در کلاینتها مشکل را حل نمی کند چون دیگه برنامه تحت شبکه نیست و اطلاعات هر کلاینت جداگانه ذخیره می گردد

----------


## a-azad

اشکالش
acseess voilotion

----------


## accpascal

پیشنهاد می کنم بجای آی پی یکبار هم نام سرور را بگذار و نتیجه را ببین!

----------


## a-azad

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

----------


## accpascal

> جلو دیتا سوری.یعنی اسم کامپیوتر سرور که اول دفعه بالا می آید


 بجای ای پی نام کامپیوتری که اس کیو ال روی آن نصب شده بگذار
ضمنا چون برنامه از سرور اجرا می شود نسخه اس کیو ال سالم است حجم دیتا هم در این مشکل  تاثیری ندارد

----------


## a-azad

من آمدم جلوی دیتا سورس نام کامپیوتری که اس کیوال روی آن نصب نوشتم.ولی بازم aceess voilotion گرفتم.به این صورت.چکارکنم ترخدا کمک کنید خیلی حیاتی!!!!!!!!!!! :ناراحت: 

```
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=telecommunication;Data Source=microwave
Value name:Connection
```

----------


## daffy_duck376

من هم این مشکل را دارم همه جا دوستان میگن IP سرور رو بزن یا نام سرور را بنویس ولی کانکت نمی شه . firewall  هم Desible  کردم فایده نداره روی بعضی سیستم ها جواب میده ولی ولیتوبیشترشجواب نمی ده !!!!!!!!

----------


## a-azad

منم فایروال .حتی آنتی ویروسم disableکردم.بازم درست نشد

----------


## vcldeveloper

اصلا IP مربوط به سرور از روی کلاینت ها Ping میشه؟ برای SQL Server در هنگام نصب اسم انتخاب کردید؟ اگر بله، باید بعد از نام سرور (یا آدرس IP)، نام انتخاب شده برای SQL Server هم نوشته بشه.

در همین تالار، کد مربوط به چگونگی تشخیص SQL Server در شبکه ارائه شده، از آن کد استفاده کنید، و بررسی کنید که آیا می تواند SQL Server شما را در شبکه پیدا کند، یا نه.

----------


## Unique

والا من که از این Connection String شما چیزی سر در نیاوردم ! اینو امتجان کن :
Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=yourDB;Data Source=192.168.4.1

Value name:Connection دیگه چیه ؟

در ضمن Access Violation ممکنه مربوط به اتصال به بانک نباشه ! معمولا اگه مشکل توی اتصال به بانک باشه و بانک را پیدا نکنه حدود 30 ثانیه ! حالا کمتر یا بیشتر طول میکشه که Error بده !

شما کد را Debug کن ببین تا کدوم خط بدون مشکل اجرا میشه ! اگه مشکل دقیقا از کاننکشن هست احتمالا سرور بانک را نمیشناسه ! که اگه باشه اول چک کن ببین IP شما ping جواب میده یا نه !؟

اگه ping جواب نداد اول مشکل شبکه را حل کن دوباره تست کن ! اگه ping جواب داد ! ببین SQL Server با چه Instance نصب شده و Datasource را بگذار روی : 
192.168.4.1\instance name

اگه بازم جواب نداد ! یه مشکل کوچیک توی کارت هست !
در ضمن دلفی Access Violation های چرت و پرت میده دقیقا معلوم نمیشه چیه ،تیک این Option را بردار ببین چه Error بهت میده :
Tools > Debugger Options > Language Exception > Stop on Delphi Exceptions

موفق باشی !

----------


## vcldeveloper

> در ضمن دلفی Access Violation های چرت و پرت میده دقیقا معلوم نمیشه چیه ،تیک این Option را بردار ببین چه Error بهت میده


این دیگه از اون حرف ها بود!! Access Violation چرت و پرت دیگه چیه؟! اون گزینه ایی که شما گفتید غیرفعال کنند، باید فعال باشه تا برنامه نویس تمام خطاهای پنهان و آشکاری که در برنامه رخ میده را ببینه و به آنها رسیدگی کنه. اگر اون گزینه غیرفعال بشه، برنامه نویس فقط خطاهایی را میبینه که کاربر معمولی هم میبینه، پس خطاهای پنهانی که به کاربر نشان داده نمیشه، از چشمش پنهان میمانه! اگر کسی می خواد گاهی چک کنه که وضعیت برنامه از دید کاربر چطور هست، میتونه از منوی Run گزینه Run without debugger را انتخاب کنه.
در ضمن، Access Violation چرت و پرت نداریم! هر وقت برنامه تون Access Violation گرفت، یعنی حتما مشکلی داره، حالا مشکل یا از کد شما ست، یا از کد سایرین که در برنامه از آن استفاده می کنید، ولی نمی تونید بگید مشکلی نیست، و بیخودی Access Violation داده! این خطا مستقیما توسط سیستم عامل تولید میشه و به برنامه ارسال میشه.

----------


## a-azad

> در همین تالار، کد مربوط به چگونگی تشخیص SQL Server در شبکه ارائه شده، از آن کد استفاده کنید، و بررسی کنید که آیا می تواند SQL Server شما را در شبکه پیدا کند، یا نه.


 سلام
اولاً ممنون ازراهنمایتون 
درثانی من هر چی سرچ کردم پیدا نکردم.؟؟؟؟؟؟؟؟؟؟؟

----------


## a-azad

سلام کلاینت سرور pingمی کنه.سرورم کلاینت ping می کنه.ولی کلاینت نمی تونه با sql server ارتباط برقرارکنه
ازکجا بفهمم sql server اسم داره یا نه؟
من یادم نمی آد موقعه نصبش اسمی روش گذاشته باشم


```
Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=telecommunication;Data Source=172.16.1.250
```

----------


## babak_delphi

از نام کامپیوتر سرور و نام کاربر کامپیوتر سرور استفاده کن
مثلا اگر اسم کامپیوتر سرور شما ServrPC باشه و اسم کاربر administrator ، روش زیر رو امتحان کنید و source را با مقدار زیر تنظیم کنید :

ServerPC\administrator

----------


## accpascal

اروری که شما فرموده اید مر بوط به تنظیمات اس کیو ال می باشد  و مربوط به کلاینتها نیست زیرا اگر در دستورات نوشته شده در کلاینت بود ارور sqlserver dosnt exist می داد
لطفا یکبار تنظیمات سرور را چک کنید

----------


## a-azad

> اروری که شما فرموده اید مر بوط به تنظیمات اس کیو ال می باشد و مربوط به کلاینتها نیست زیرا اگر در دستورات نوشته شده در کلاینت بود ارور sqlserver dosnt exist می داد
> لطفا یکبار تنظیمات سرور را چک کنید


 منظورتون از تنظیمات سرور چیست؟

----------


## mafazel

با سلام
1- خطای Access Violation به احتمال 10% از عدم وصل شدن به دیتا بیس می باشد و به احتمال 90% از جای دیگر است.
2- چرا دستی ConnectionString رو مقدار میدید و آزمایش می کنید؟؟؟ یکبار با استفاده از ابزارهای استاندارد این عبارت را تهیه و مشاهده کنید. بعد دستی آنرا آزمایش کنید. مطمئن باشید اگر ابزارهای استاندارد جواب بدهند و شما همان متن را استفاده کنید مشکلی نخواهید داشت. ابزارهای استاندارد عبارتند از:
1- مشخصه ConnectionString از ابزار ADOConnection  در زمان طراحی
2- دستور PromptDataSource در زمان اجرا
3- ODBC کنترل پنل  از مسیر ... Control Panel -> Administrative Tools -> Data Source (ODBC) ->Add

----------


## a-azad

> 2- دستور PromptDataSource در زمان اجرا
> 3- ODBC کنترل پنل از مسیر ... Control Panel -> Administrative Tools -> Data Source (ODBC) ->Add


با سلام ممنون از راهنمایتون
با ODBC روی سرورتست انجام دادم یعنی به بانک اسکیوال وصل شدم.SUCCESSFULLبود
ولی چطورازروی کلاینت ها این تست انجام بدم
در ثانی منظورتون ازدستورPROMOTDATASOURCEچیه؟
لطفاً کامل توضیح بدین
ممنونم

----------


## mafazel

1- از روی کنترل پنل کامپیوتر کلاینت همین آزمایش رو انجام بدید.
2- PromptDataSource یک تابع هستش که پنجره استاندارد ساخت CS رو نمایش میده

  Memo1.Text :=  PromptDataSource(Form1.Handle,'');
  یا
  ADOConnection1.ConnectionString :=  PromptDataSource(Form1.Handle,'');

----------


## daffy_duck376

با اجازه دوستان : شبکه که من باهاش کار می کنم این خصوصیات را دارد :سرور ping  میشه و به فایلهای SHARE شده روی سرور دسترسی دارم . تمامی سرویهای سرور رو روی SQL SERVER  فعال کردم که شامل TCP/IP  و... است . یه دونه یوزر برای SQL SERVER  تعریف کردم که از اون برای SQL ATITICATION
(شرمنده اگه اشتباه نوشتم) :خجالت: انجام بدم البته با احراز حویت تو ویندوز هم مشکل من حال نشد حالا چه برسه به SQL SERVER ! کلاینت های من یا اصلا سرور رو نمی بینه یا اگه ببینه نمی تونه وصل بشه. البته این تنظیمات فقط یک بار رو ی دو کامپوتر جواب دادن ها و روی بقیه سیستم ها جواب ندادن ! یکی به من بگه اشکال کار کجاست؟

----------


## vcldeveloper

> یکی به من بگه اشکال کار کجاست؟


این مربوط به تالار SQL Server هست، نه تالار دلفی.

----------


## saied_genius

با تشكر از همه دوستان.

راه حل:

::::::براي فعال كردن remote براي sqlserver بر روي سرور::::: 
::اين عمليات بر روي سرور انجام شود::
1- ابتدا firewall سيستم سرور را تنظيم كنيد كه بتواند remote connection را دريافت نمايد. 
(با غير فعال كردن firewall زمين تا آسمان متفاوت است.)
: در firewall در قسمت exceptions بر روي add program كليك نماييد و فايل sqlserver را اضافه نماييد. (فايل sqlservr.exe) 

2- تشخيص نام sqlserver: 
: در پنجره Sql Server Configuration Manager در پنجره سمت چپ بر روي Sql sever 2005 Services كليك كرده و در سمت راست سرويس هاي موجود را مشاهده نماييد.

::نكته::
اگر براي sqlserver خود زمان نصب sqlserver نام (instant) تعريف كرده باشيد در همين جا مشخص مي شود.
يكي از سرويس ها با نام SQL Server است. اگر شما براي آن زمان نصب instant تعريف كرده باشيد نام instant شما داخل پرانتز مي آيد. 

مثال: 
SQL Server (Myserver)

::توجه::
اگر SQLServer شما express باشد به عنوان instant نصب مي شود و نام SQLEXPRESS داخل پرانتز مي آيد.

3- براي sqlserver خود پورت جهت دريافت remote connection تعريف كنيد.
: در پنجره Sql Server Configuration Manager در سمت چپ بر روي از شاخه SQL Server 2005 Network Configuration بر روي نام سرور خود كليك نماييد (طبق آنچه در شماره 2 گفته شد نام sqlserver خود را تشخيص دهيد.)

مثال:
Protocols for SQLEXPRESS

سپس در پنجره سمت راست بر روي TCP/IP دوبار كليك نماييد تا پنجره مربوطه باز گردد.

در پنجره باز شده در صورتي كه گزينه Enabled برابر No است آن را برابر Yes قرار دهيد.

سپس در همان پنجره به Tab (سربرگ) IP Address برويد و در فيلد يكي مانده به آخر (TCP Dynamic Ports) پورت مورد نظر خود را جهت remote connection تعريف نماييد.

::مهم::
1433 پورت پيش فرض sqlserver است، در صورتي كه مي خواهيد از حالت remote استفاده نماييد حتماً (از لحاظ امنيتي) آنرا تغيير دهيد.

بر روي Apply و سپس Ok كليك نماييد.

**يك پيغام به شما مي دهد دال بر اين كه جهت استفاده از تغييرات بايد سرويس مورد نظر شما يك بار restart شود و شما بر روي Ok كليك نماييد.

4- به شاخه SQL Server 2005 Services در پنجره سمت چپ باز گرديد و از پنجره سمت راست sql server خود را كه قبلاً (طبق توضيحات شماره 2) شناختيد انتخاب و سپس بر روي آن راست كليك كرده و Restart را انتخاب نماييد و پنجره را به طور كلي ببنديد.

5- Connection String:
:در صورتي مي توان به سرور وصل شد كه در سمت سرور، IP سرور به همراه Port ارتباطي را داشته باشيم. سرورهايي كه از آنها هاست مي گيريم مشكلي براي تنظيمات نداريم و خود آنها پورت را به همراه آي پي و user و pass براي ارتباط را به شما مي دهند.
اما اگر خودتان سرور راه اندازي كنيد بايد اين تنظيمات را انجام دهيد. (در صورت نياز به اطلاعات بيشر بگوييد تا بيشتر توضيح دهم.)
************************************************** ************

::اين عمليات بر روي كلاينت انجام شود::
در هر صورت ما نياز به آي پي و پورت داريم . Connection String ما به صورت زير خواهد بود.
(با فرض اينكه آدرس سرور ما 192.168.0.1 باشد)


Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;


يا

Data Source=190.190.200.100\Sqlexpress,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;


**در صورتي كه Alternative دارد


البته Connection String استاندارد طبق زير است، خودم به شخصه استفاده كردم جواب داده (البته شبكه داخلي ، بر روي اينترنت را نمي دانم.)

 Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False;



Server / Data Source: آي پي سرور به همراه پورت مورد نظر (1433 پورت پيش فرض SQLServer 2005 است)
Network Library: به جاي DBMSSOCN بايد TCP/IP را قرار دهيد چون به احتمال زياد از TCP/IP استفاده مي كنيد.
Initial Catalog: نام ديتابيس خود كه موجود است بر روي سرور و اجازه دسترسي به آن را داريد.
User ID: نام كاربري تعريف شده براي شما بر روي SQLServer سرور.
Password: رمز عبور تعريف شده براي شما بر روي SQLServer سرور.


::اين عمليات بر روي سرور انجام شود::
شايد ساختن user بحث مفصلي (در حد يك كتاب) داشته باشد؛ ولي به طور كلي ساختن آن به صورت زير است.

براي ساختن user:

1- از طريقSql Management Studio سرور مورد نظر را باز كنيد
2- فولدر Security را باز كنيد.
3- بر روي پوشه Logins كليكراست كرده و new Login را كليك نماييد.
4- در قسمت login name نام كاربري مورد نظر خود را وارد نماييد و در قسمت پايين تر در sql server authentication پاسورد و تاييد پسورد خود را وارد نماييد.
5- به قسمت user mapping برويد و ديتابيس مورد نظر خود را (كه مي خواهيد اين كاربر فقط به آن ديتابيس دسترسي داشته باشد) انتخاب نماييد.
6- به قسمت securables (از عنوان هاي سمت چپ) برويد.
7- بر روي add كليك نماييد و گزينه مورد نظر را انتخاب كنيد.
8- بر روي گزينه آخر كه بگذاريد كاربر به تمامي اطلاعات آن سرور كه مربوط به آن ديتابيس است را دسترسي خواهد داشت.
9- در صورتي كه مي خواهيد دسترسي محدودتري داشته باشد از گزينه هاي ديگر استفاده كنيد (كه خود بحث مفصلي دارد ).
10- در قسمت status (در سمت چپ) گزينه grant و Enable را (از سمت راست) انتخاب نماييد.
سپس بر روي ok كليك نماييد.

user شما آماده است.

فكر كنم ديگه كامل تر از اين نمي شه توضيح داد ....!!!

مراحل را انجام دهيد. اگر سوالي بود در خدمتم.

----------


## a-azad

جنابgenious:
قبل از مطالعه  صحبت ها جنابعالی من کانکشن استرینگم یکی از دوستان گفتن به صورت زیر بنویس


```
Data Source=172.16.1.250;Initial Catalog=telecommunication;Persist Security Info=True;User ID=sa;Password=123
```

مقداری مشکلم حل شد یعنی بعد از دادن خطاeror conectionstring atribute
و accssse voilation
بالاخره تونستم به یکی از جدولام لاگین کنم.به بقیه نه وپیغام accsee voliationام زیاد میده
این در حالی که من user saام passاش saولی وقتی sa می نویسم جواب نمی گیرم.
با  pas123جواب می گیرم .در ضمن pass windows من 123.سردرنمی آرم؟؟/
جریان چیه

----------


## vcldeveloper

> این در حالی که من user saام passاش saولی وقتی sa می نویسم جواب نمی گیرم.
> با  pas123جواب می گیرم .در ضمن pass windows من 123.سردرنمی آرم؟؟/
> جریان چیه


یعنی توی تنظیمات SQL Server نوع احراز هویت را Windows Authentication انتخاب کردید. قبلا هم گفتم، مشکل شما به تالار SQL Server مربوط میشه، نه به تالار دلفی.

----------


## a-azad

> یعنی توی تنظیمات SQL Server نوع احراز هویت را Windows Authentication انتخاب کردید. قبلا هم گفتم، مشکل شما به تالار SQL Server مربوط میشه، نه به تالار دلفی.


مشکل من مال اسکیوال نیست مشکل من مال کانکشن استرینگم است
من نوع احراز هویتم sql server and windowsاست.تنظیمات اسکیوال ام درست است
من کانکشن استرینگم اینجوری نوشتم


```
connectionString="Data Source=172.16.1.250;Initial Catalog=telecommunication;Persist Security Info=True;User ID=sa;Password=sa
```

الان تنها مشکلی که دارم.خطایی که میده invalid atribute conection string
واینکه من تنها به جدول user ام می تونم کانکت شم

----------


## a-azad

با کانکشن استرینگ جنابgenious هم این خطا می گیرم
multiple -step operation genrated erros check each ole db status if available
یعنی با این کانکشن استرینگ


```
Data Source=172.16.1.250,1433;Network Library=TCP/IP;Initial Catalog=telecommunicationUser ID=sa;Password=sa;
```

----------


## saied_genius

> با کانکشن استرینگ جنابgenious هم این خطا می گیرم
> multiple -step operation genrated erros check each ole db status if available
> یعنی با این کانکشن استرینگ
> 
> 
> ```
> Data Source=172.16.1.250,1433;Network Library=TCP/IP;Initial Catalog=telecommunicationUser ID=sa;Password=sa;
> ```


ببينيد شما كانكشن استرينگتان مشكل دارد....

كانكشن استرينگ خود را طبق زير اصلاح نماييد

 
server=172.16.1.250,1433;Network Library=TCP/IP;Initial Catalog=telecommunication;User ID=sa;Password=sa;


و يا از اين يكي استفاده كنيد.

Server=172.16.1.250,1433;Database=telecommunication;User ID=sa;Password=sa;Trusted_Connection=False;


سوالي بود در خدمتم.

موفق باشيد.

----------


## saeed_d

سلام
اگه اصرار به استفاده از این روش دارید توی این سایت هم میتونید ConnectionStringهای مورد نظر خودتون رو پیدا کنید
http://www.connectionstrings.com/

----------


## اصغر (پآچ)

سلام دوست من

شما وقتی از PROMOTDATASOURCE استفاده می کنید توی قسمت Select or enter a Server name اسم سرور خودتون که حاوی بانک های اطلاعاتی شما هستند رو میبینید؟

اگه شما برای سرور خودتون Instance  تعریف کرده باشید باید توی این لیست اسم سرور به همراه یک بک اسلش "\" و بعد اسم Instance نمایش داده بشه چیزی مثل این : "Computername\Instance" و الا اسم خود کامپیوتر سرور به تنهایی نمایش داده میشه!

امتحان کنید.

موفق و موید باشی

----------


## a-azad

سلام
سرورم اسم نداره توی خوداسکیوال نگاه می کنم


```
name (local)
```

من کد جناب genious اجرا کردم
خطا اسکیوال سرور dosenot exist or accees denied

----------


## اصغر (پآچ)

سلام دوست من




> سلام
> سرورم اسم نداره توی خوداسکیوال نگاه می کنم
> 
> 
> ```
> name (local)
> ```
> 
> من کد جناب genious اجرا کردم
> خطا اسکیوال سرور dosenot exist or accees denied


  :متعجب:  :متعجب: 

مگه میشه سرور اسم نداشته باشه؟ پس کلاینت ها توی شبکه چطوری اون رو Ping میکنن؟

منظورم از اسم سرور ؛ اسمی هست که برای کامپیوتر سرور گذاشته شده! این اسم رو میتونی از توی  Properties از منوی راست کلیک برروی My Copmuter و در سربرگ Copmuter name پیداش کنی!

ببین اون اسم توی لیستی که گفتم هست یا نه؟

موفق و موید باشی

----------


## a-azad

اسم سرورم microwave
من اسم اسکیوال سرور گفتم

----------


## اصغر (پآچ)

سلام دوست من

خوب خانم محترم نگفتی این اسم توی اون لیست دیده میشه یا نه؟

موفق و موید باشی

----------


## a-azad

برای کداول می گه؟
multiple _step OLE operation genrated errors .check each OLE DB status .if available ,NO WORKS WAS DONE.
وبرای کد دومتون 
SQL SERVER DOS NOT EXIT OR ACCESS DENIED


```
server=172.16.1.250,1433;Network Library=TCP/IP;Initial Catalog=telecommunication;User ID=sa;Password=sa;


و يا از اين يكي استفاده كنيد.


Server=172.16.1.250,1433;Database=telecommunication;User ID=sa;Password=sa;Trusted_Connection=False;
```

</DIV>

----------


## saied_genius

ببينيد... شما داريد IP يك سرور را وارد مي كنيد كه حتماً روي اينترنت است.
connection string هيچ مشكلي ندارد. (دومي)
شما ابتدا مطمئن شويد كه به سرور دسترسي داريد و اينكه اصلاً سرور به اينترنت وصل است و سپس با همان connection string دومي كار كنيد حتماً جواب مي دهد.

چون IP كه داده ايد حتي ping هم نمي شود!!

موفق باشيد.

----------


## a-azad

سلام
pingمی کنه سرور.ولی خطاها بالا میده

----------


## accpascal

یک سوال دارم 
شما از شبکه local استفاده می کنید یا از شبکه اینترنت ونوع اسکیوال مورد استفاده شما چیست ؟

----------


## a-azad

> یک سوال دارم 
> شما از شبکه local استفاده می کنید یا از شبکه اینترنت ونوع اسکیوال مورد استفاده شما چیست ؟


شبکه local
و نوع اس کیوال ام personal edition
یعنی بقیه نسخه ها اجازه نمی داد نصب بشه

----------


## accpascal

ببخشید فایل را یادم رفت بفرستم

----------


## accpascal

بازم خیلی ببخشید من اشتباها فایل exe را ضمیمه کردم

----------


## Unique

> ین دیگه از اون حرف ها بود!! Access Violation چرت و پرت دیگه چیه؟! اون گزینه ایی که شما گفتید غیرفعال کنند، باید فعال باشه تا برنامه نویس تمام خطاهای پنهان و آشکاری که در برنامه رخ میده را ببینه و به آنها رسیدگی کنه.


جناب کشاورز ، فرمایش شما متین است ! ولی من تا حالا به مورد هایی بر خوردم که دلفی الکی Error میده در صورتی که اگه بیرون IDE تست کنی Error در کار نیست ! تا اونجا که من میدونم بر داشتن این تیک باعث میشه شما بجای Error خود دلفی Error ویندوزی را ببینید که به نظر من قابل فهم تره تا EAccessViolation های دلفی ! البته صحبت شما را رد نمیکنم چون درسته ! منظور از چرت و پرت این بود که اگه برای یک Error این چک را بگذارین و حذف کنین ! بعضی وقتها متوجه اختلافات فاحشی میشین ! مثلا اگه Socket Error داشته باشید ! و چک فعال باشه شما فقط متوجه یه ESocketError میشین اما نمیگه شماره Error چیه ! اما خود ویندوز شماره Error را هم توی پیغام در صورت برداشتن چک میده ! منظور منم از چرت و پرت این بود !

در رابطه با مشکل دوستمون فکر کنم همه موضوعات حاشیه ای بر طرف شد ! اما اگه شما با COnnection String که من دادم وصل شدین به سرور دیگه مشکلی توی شبکه ندارین ! بهنره یک User با privilage از نوع Database Administrator توی MSSQL بسازین و با اون تست کنید ! SA هم user System Admin خود MSSQL هست که موقع نصب شما Password را ست میکنید ! اگه ست نکردین در زمان نصب احتمالا Pass نداره ! Pass را یکبار خالی چک کنین !

قبل از اینکه این Thread به 5 یا 6 صفحه برسه ! بهتره یکبار مطالب را دسته بندی کنین و کامل تست کنین ! چون همه موضوعات مربوطه توی این Thread گفته شد !

----------


## accpascal

[quote=Unique;682632] در رابطه با مشکل دوستمون فکر کنم همه موضوعات حاشیه ای بر طرف شد ! اما اگه شما با COnnection String که من دادم وصل شدین به سرور دیگه مشکلی توی شبکه ندارین ! بهنره یک User با privilage از نوع Database Administrator توی MSSQL بسازین و با اون تست کنید ! SA هم user System Admin خود MSSQL هست که موقع نصب شما Password را ست میکنید ! اگه ست نکردین در زمان نصب احتمالا Pass نداره ! Pass را یکبار خالی چک کنین !
 quote]
ایشان می گویند از روی سرور کانکت می شون پس user  و password  ایشان درست است

----------


## Unique

به قدری هر کی اومده یه چیزی گفته که اصلا نمیشه پیگیری کرد ! این آخرین چیزهایی هست که به ذهن من میرسه !

 شما اول از همه برنامه را روی سرور تست کن اگه با کانکشن استرینگ زیر جواب گرفتی (من user و Pass را تستی دادم ! با user و pass خودت عوض کن) 
Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=yourDB;Data Source=local

یه جاهایی هم دوستان از ODBC حرف زدند که اصلا خودت را درگیرش نکن ! OleDB مایکروسافت کاملا با MSSQL خوب و عالی کار میکنه !

حالا اگه وصل شده بدون خطا یعنی اینکه هیچ مشکلی نداری ! اگه خطا میگیری ! اول تست کن ببین user و pass که دادی درست باشه ! امیدوازم حدافل در زمان نصب MSSQL احراز هویت را روی Mix mode یعنی هم Windows و هم MS Sql Server گذاشته باشی ! سرور را هم به صورت Client / Server نصب کرده باشی ! که اگه اینطور نبوده ! همه سر کار هستند و شما اصلا نصب MSSQL سرور تون مشکل داره ! 

وقتی تونستی روی سرور OK جواب بگیری ! تنها کار اینه که بجای local  از ip سرور روی کلاینت ها استفاده کنی ! که اگه نشه ! 100% به دو موضوع بر میگرده ! سرور اصلا اجازه Remote Connection نمیده و یا شبکه خودت مشکل داره !

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

----------


## vcldeveloper

> جناب کشاورز ، فرمایش شما متین است ! ولی من تا حالا به مورد هایی بر خوردم که دلفی الکی Error میده در صورتی که اگه بیرون IDE تست کنی Error در کار نیست ! تا اونجا که من میدونم بر داشتن این تیک باعث میشه شما بجای Error خود دلفی Error ویندوزی را ببینید که به نظر من قابل فهم تره تا EAccessViolation های دلفی ! البته صحبت شما را رد نمیکنم چون درسته !


علت اینکه بیرون IDE خطایی در کار نیست این هست که اون خطا توسط exception handling در کد شما، یا در کدی که شما به هر نحوی استفاده می کنید (مثلا در کد یک کامپوننت) خفه شده. شما خطا را بیرون IDE نمی بینید، ولی در داخل IDE همه خطاها نمایش داده می شوند، تا برنامه نویس بداند که چه خطاهایی در هنگام اجرای برنامه اش رخ می دهند، و اگر خطا نمایش داده نمی شود، چه کدی، و به چه شکلی آن را خفه می کند. این امر باعث می شود که هیچ خطایی از چشم برنامه نویس پنهان نماند. ایده ایی که شما مطرح می کنید آن هست که خطا زمانی خطا هست که بصورت یک پیغام به کاربر نمایش داده شود، و تا زمانی که پیغام خطایی به کاربر نهایی نمایش داده نمی شود، چندان اهمیتی ندارد که آن را بررسی کنیم! نتیجه همچین تفکری میشه تولید نرم افزارهای پر از باگ های پنهان که باید مدت ها وقت صرف کرد تا اشکال واقعی آنها کشف بشوند.




> منظور از چرت و پرت این بود که اگه برای یک Error این چک را بگذارین و حذف کنین ! بعضی وقتها متوجه اختلافات فاحشی میشین ! مثلا اگه Socket Error داشته باشید ! و چک فعال باشه شما فقط متوجه یه ESocketError میشین اما نمیگه شماره Error چیه ! اما خود ویندوز شماره Error را هم توی پیغام در صورت برداشتن چک میده ! منظور منم از چرت و پرت این بود !


این بخاطر آن هست که دیباگر دلفی خطا Exception را در مراحل مختلف چرخه حیاتش دنبال می کند. یک Exception ممکن است از یک کد بسیار سطح پایین تولید شود، و مرحله به مرحله از یک سطح به سطح بالاتری منتقل شود، و در هر سطح اطلاعاتی به آن اضافه شود. دیباگر برای اینکه به شما امکان پیگیری این فرایند را بدهد، از لحظه اول تا لحظه آخر مراحل حرکت Exception را به شما نمایش می دهد. مثلا در بعضی مواقع می بینید که یک خطا بعد از تولید، و کلیک بر روی دکمه Continue، بلافاصله تکرار می شود. این یعنی خطا در یک سطح پایین رخ داده، در آنجا Exception تولید شده، ولی بعد از پردازش آن، Exception مجددا توسط کد raise شده، تا به سطح بالاتری برسد، و کد سطح بالاتر هم Exception را دریافت کرده، و مجددا آن را raise کرده است.
همچین روالی برای یک برنامه نویس کم حوصله که توجهی به کیفیت نرم افزار تولیدی ندارد، یک روال خسته کننده و ملال آور هست. ولی برنامه نویسی که به کیفیت نرم افزار تولیدی اهمیت می دهد، به تک تک این Exception ها توجه نشان می دهد، و معنی هر یک از آنها، چگونگی بوجود آمدن آنها، و مسیری را که طی می کنند تا به کاربر برسند را دنبال می کند.

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

----------


## saied_genius

1- IP مورد نظر كه error مي دهد يك IP اينترنتي است و نمي تواند IP داخلي باشد.

2- وقتي روي خود سرور جواب مي دهد و از Client جواب نمي دهد يعني USER مورد نظر اجازه دسترسي ندارد. (در صورتي كه مابقي تنظيمات صحيح باشد.)

موفق باشيد.

----------


## Unique

> این بخاطر آن هست که دیباگر دلفی خطا Exception را در مراحل مختلف چرخه حیاتش دنبال می کند. یک Exception ممکن است از یک کد بسیار سطح پایین تولید شود، و مرحله به مرحله از یک سطح به سطح بالاتری منتقل شود، و در هر سطح اطلاعاتی به آن اضافه شود. دیباگر برای اینکه به شما امکان پیگیری این فرایند را بدهد، از لحظه اول تا لحظه آخر مراحل حرکت Exception را به شما نمایش می دهد. مثلا در بعضی مواقع می بینید که یک خطا بعد از تولید، و کلیک بر روی دکمه Continue، بلافاصله تکرار می شود. این یعنی خطا در یک سطح پایین رخ داده، در آنجا Exception تولید شده، ولی بعد از پردازش آن، Exception مجددا توسط کد raise شده، تا به سطح بالاتری برسد، و کد سطح بالاتر هم Exception را دریافت کرده، و مجددا آن را raise کرده است.
> همچین روالی برای یک برنامه نویس کم حوصله که توجهی به کیفیت نرم افزار تولیدی ندارد، یک روال خسته کننده و ملال آور هست. ولی برنامه نویسی که به کیفیت نرم افزار تولیدی اهمیت می دهد، به تک تک این Exception ها توجه نشان می دهد، و معنی هر یک از آنها، چگونگی بوجود آمدن آنها، و مسیری را که طی می کنند تا به کاربر برسند را دنبال می کند.


همونطور که قبلا هم گفتم صحبت شما بسیار متن و درست است ! اما موضوع اینه که نمیشه از هر برنامه نویس (مخصوصا تازه کار) توقع داشت که متوجه این روال باشه ! و اگه بخوای جوابشو درست بدی مجبوری بدونی Error که سیستم عامل گزارش میکنه چیه ! من خودم اون اوایل کارم خیلی اذیت شدم تا بفهمم کجا و چرا داره Error میده ! بعد از Run Without Debugger بود که با حل مشکل ! Run With Debugger هم مشکلش حل می شد ! کلا اعتقاد دارم Delphi  خطاهایی که گزارش میکنه زیاد قابل پیگیری نیست ! اما ابزار قدرت مندی برای Debug برنامه ها داره !

با این موضوع هم موافق نیستم که کیفیت برنامه را با استفاده کردن از Run With Debugger یا بدون اون محک بزنیم ! به نظر من Debug کاملا تجربی هستش ! و برنامه نویسان خوب کمتر به دام این خطا های به قول شما خفه شده در برنامه میفتند !

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

----------


## saeed_d

سلام
جناب آقای استاد کشاورز شما دیگه چرا؟
توی این تاپیک بحث سر نحوه گزارشهای خطا نیست. کاش برای این موضوع یک تاپیک جداگانه باز میکردید و بحث رو اونجا ادامه میدادید.
جسارت بنده را ببخشید.

----------


## vcldeveloper

> توی این تاپیک بحث سر نحوه گزارشهای خطا نیست. کاش برای این موضوع یک تاپیک جداگانه باز میکردید و بحث رو اونجا ادامه میدادید.


من راهنمایی درباره گزارش خطا نکردم؛ یکی از دوستان در جواب به کاربر سوال کننده راه حلی مطرح کردند که اگر به همان صورت رها میشد، نه تنها مشکل کاربر سوال کننده برطرف نمیشد، نتیجه اش کسب یک عادت بد برنامه نویسی بود. اگر در تاپیک جداگانه مطرح می شد، آن پست به همان شکل در این تاپیک برای کاربر سوال کننده و سایر کاربرانی که در آینده روزی به این تاپیک مراجعه خواهند کرد، باقی می ماند.

----------


## en.kamali.ir

من فقط 2 سوال بپرسم :
1 : شما بانک رو روی هاست پیاده کردید یا روی یک سیستم روی شبکه خودتون ؟
2: آی پی استاتیک دارید یا نه ؟

----------


## a-azad

سلام
من مشکلم حل شدم
از زحمات همگی تون ممنون.از راهنمایی ها همه استفاده کردم
من مشکلم حل شد.مشکلمن یک مشکل شبکه ای بود
با اینکه کامپیوترها همدیگر pingمی کردن اجازه دسترسی به هم نداشتند
من آمدم یک فایل share کردم از سرور بعد دیگه مشکلم حل شد

----------


## saeed_d

> من راهنمایی درباره گزارش خطا نکردم؛ یکی از دوستان در جواب به کاربر سوال کننده راه حلی مطرح کردند که اگر به همان صورت رها میشد، نه تنها مشکل کاربر سوال کننده برطرف نمیشد، نتیجه اش کسب یک عادت بد برنامه نویسی بود. اگر در تاپیک جداگانه مطرح می شد، آن پست به همان شکل در این تاپیک برای کاربر سوال کننده و سایر کاربرانی که در آینده روزی به این تاپیک مراجعه خواهند کرد، باقی می ماند.


حق با شماست
مجددا عذر میخوام

----------


## accpascal

از a-azad تشکر می کنم چون وقتی مشکلش حل شد بی خیال نشد
این هم می تواند از وظایف ایجاد کنندگان تایپیک باشد

----------


## bmanfy

با سلام.
راستش با وجود قدیمی بودن تاپیک . ترجیح دادم سوالم رو هینجا بپرسم . چون دقیقا همینه :
از SqlServer2005 Express Edition استفاده میکنم .
به صورت sql server and windows و client/Server  نصبش کردم .
راستش کارم خیلی گیره و تا 2 روز دیگه باید برنامه رو تحویل بدم .
Connection String مربوط به سرور رو به این صورت :

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=.\SqlExpress ; Initial Catalog=RailWay

و connection String مربوط به کلاینت رو به صورت زیر : (با توجه به اینکه نام سرور ServerName باشد)

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source=ServerName\SqlExpress ; Initial Catalog=RailWay

البته این CN برای خود سرور هم جواب میده . 
در کل در برقراری ارتباط در سرور مشکلی ندارم و اما از کلاینت .....
آیا لینکه میخوام بدون UserName  و Pass  از کلاینت بهش وصل بشم و با Persist Security Info=False  باعث این اشتباهه . (که البته خودم این جور فکر نمیکنم )
در کل هر چی اینجا بود خوندم و فکر نمیکنم روش من با این روشها مقایر باشه :

لطفا راهنمایی کنید :
آیا روی سرور باید کا خواصی انجام بدم . یعنی چیزی رو باید Share  کنم و .... 
که البته تو این تاپیک از این چیزها کسی نگفته بود . که حتما چون لازم نیست .

----------


## saied_genius

شما هيچ وقت نمي توانيد از کلاينت ها به سرور به صورت windows authentication وصل شويد.

و هنگامي که مي خواهيد وصل شويد بايد بر روي سرور يک login تعربف کنيد که بتوانيد با آن login از کلاينت ها به سرور وصل شويد.

نمونه connection string که من دارم باهاش به صورت شبکه کار مي کنم برايت مي گذارم البته به شرط آنکه مابقي شرايط فراهم شده باشد (فايروال ، تنظيمات sqlserver و ...)

connection string SERVER
 
server=(local)\\SQLEXPRESS;database=MASTER;Integra  ted Security=True;

connection string CLIENT
 
server=192.168.0.1\\SQLEXPRESS,1433;database=MASTE  R;uid=sa;pwd=123456;


مشکلتان بايد 100% حل شود (چون من دارم با اين کانکشن ها کار مي کنم!)

موفق باشيد.

----------


## bmanfy

من Cs رو با استفاده از PromptDataSource ساختم .
رو سرور مشکل نداره باز هم .
اما رو کلاینت رو تب Connection  وقتی میخوام Server رو وارد کنم نمیشه .
گفتم از ExpressEdition استفاده میکنم .
در حال نصب به Sa رمز دادم . 
مشکل اصلی سر شناسایی Server هستش . 
چه تنظیم خاصی باید مگه انجام بدم ؟
اون چیزهایی که تویه یکی از همین بخشها گفتین که اصلا تو SQlServer  من نیست .

----------


## daffy_duck376

> شما هيچ وقت نمي توانيد از کلاينت ها به سرور به صورت windows authentication وصل شويد.


با اجازه دوستان . چرا دوست عزیز میشود . اگز شبکه شما به حالت دومین باشد نه workgroup میتونید به راحتی با اون روش وصل بشید.
اما در مورد مشکل دوستمون هم بگم متاسفانه من مشکل شما رو قبلا داشتم . هر کاری هم کردم در نهایت نتونستم وصل نشم و در نهایت شبکه رو به صورت دومین در آوردم و مشکل رفع شد . 
نیاز به share کردن چیزی هم نیست . در ضمن در connection string های شما اثری از نام کاربری و کلمه عبور ندیدم . یعنی شما الان دارید به صورت احراز هویت ویندوزی کار میکنید . اونو به احراز هویت سرور تغییر بدید . اگر sql server شما interprise manager نداره باید از نسخه develeper اون استفاده کنید که داشته باشه !!!!!! من فقط یه سوال برای من پیش اومده که دوستان جه چیز sql server 2000 نداره که نیاز اونها رو برآورده نمی کنه که همه میرن سراغ 2005 ؟؟؟؟ :متفکر:  در ضمن تنظیمات شبکه رو در sql server انجام بده . البته اگه به جای ado از sdoc  استفاده میکردید این همه مشکل نداشتید !

----------


## bmanfy

> البته اگه به جای ado از sdoc استفاده میکردید این همه مشکل نداشتید !


میشه در موردش یه مقداری توضیح بدین ! تو ی یکی از پست های قبلی تون هم به این اشاره کردین .
فکر میکنم باید چی خوبی باشه .
لطفا بگید چه کار انجام کیده و چه مزیتی داره .
تو خود دلفی هست یا یه بسته جداست ؟


در ضمن روی اون شبکه ای که قراره نصب بشه فکر میکنم (به احتمال زیاد) Domain باشه . البته من الان دارم روی Work Group  تستش می کنم .

----------


## bmanfy

تو عکسی که ضمیمه کردم  ایا در زمان نصب باید همون جایی رو انتخاب کنم که تو عکس انتخاب شده .و اگر جواب مثبته کدام گزینه باید در کامبو باکش انتهاب بشه .
Local Service , Local System , Network Service 
من خودم Network Service  رو انتخاب میکنم .

----------


## bmanfy

زمانی که میخوام  Surface Area Canfiguration  رو باز کنم تا تنظیمات SqlServer رو برای کار در حالت شبکه انجام بدم خطا زیر رو مید ؟  (آیا این تنظیم باید انجام بشه ؟ چون هیچ کس در این باره چیزی نگفته بود)

----------


## daffy_duck376

> میشه در موردش یه مقداری توضیح بدین ! تو ی یکی از پست های قبلی تون هم به این اشاره کردین .
> فکر میکنم باید چی خوبی باشه .
> لطفا بگید چه کار انجام کیده و چه مزیتی داره .
> تو خود دلفی هست یا یه بسته جداست ؟
> 
> 
> در ضمن روی اون شبکه ای که قراره نصب بشه فکر میکنم (به احتمال زیاد) Domain باشه . البته من الان دارم روی Work Group تستش می کنم .


sdac یه کامپوننت اتصال به بانک اطلاعاتی sql هست که منحصرا برای این کار طراحی شده . یه سرچ توی google بزنید سایتش پیدا میشه

----------


## mehrpars

از همگی عذر می خوام که هر 7 صفحه رو نخوندم ، ولی برای اتصال به sqlserver روی یک کامپیوتر دیگه ورژن sqlserver تون مهمه ،
از چه ورژن sqlserevr استفاده میکنید؟؟؟؟؟

----------


## saied_genius

منظورتون چيه ؟ بيشتر توضيح بديد ...

----------


## AliReza Vafakhah

دوستان نمی خواستم که دوباره تاپیک یزنم گفتم همینجا بهتره حداقل یه تاپیک مرجع میشه .

SQL Server 2008 را روی سیستم نصب کردم و در قسمت Security یک user به نام a ساختم و اجاره همه کاری رو بهش دادم تنظیمات مربوط به SQL Server Configuration Manager را هم طبق پست یکی از دوستان انجام دادم و سپس از داخل یک VM دلفی 2010 را اجرا کردم و با Ping بین دوکامپیوتر (VM و کامپیوتر خودم) متوجه شدم که ارتباط برقرار است اما نمیدونم چرا هنگامی که میخواهم به SQL Server در دلفی 2010 از داخل VM وصل شوم این پیغام خطا را میده .

دوستان تصاویر خطا را ضمیمه میکنم که داخل VM یا همان کامپیوتر Host رخ داده

----------


## vcldeveloper

> دوستان تصاویر خطا را ضمیمه میکنم که داخل VM یا همان کامپیوتر Host رخ داده


چرا دارید از ODBC استفاده می کنید؟ خب از همون درایور OLE DB مربوط به SQL Server استفاده کنید، که Perfomance بهتری هم داره.

----------


## AliReza Vafakhah

> چرا دارید از ODBC استفاده می کنید؟ خب از همون درایور OLE DB مربوط به SQL Server استفاده کنید، که Perfomance بهتری هم داره.


آقای کشاورز باز هم خطا میده که سرور بانک وجود نداره یا مجوز اتصال نداره

----------


## nimakaiedi

> آقای کشاورز باز هم خطا میده که سرور بانک وجود نداره یا مجوز اتصال نداره


آقا منم دقیقا همین مشکل رو دارم
وقتی می خوام اتصال بدم does not exist  میده

----------


## AliReza Vafakhah

دوستان یعنی این مشکل حل شدنی نیست من که دیگه کلافه شدم 

هر کاری می کنم با پیغام های متفاوت روبه رو می شوم ، Firewall را کلا Off کردم

دوستان آیا سیستم Server مشکل داره (منظورم سیستمی هست که SQL Server  روی آن نصب است) یا آیا باید روی سیستم هاست نرم افزار خاصی از SQL Server نصب بشود ؟

----------


## saied_genius

من دلفي کار نکردم ، ولي اگر مشکل از تنظيمات sql server باشد ، يه سر به لينک های زير بزن، انشا الله که مشکل شما حل شود.
شايد هم مشکل در تنظيمات شبکه در VM باشد.

https://barnamenevis.org/showthread.php?t=142114

https://barnamenevis.org/showthread.php?t=149074

موفق باشيد.

----------


## ashkanmilad

سلام
در C#‎ تنظیمات برای اتصال کلاینت به پایگاه داده سرور جه هست؟

----------


## bmanfy

ورودتون رو تبريك ميگم.
فرقي نداره . جفتشون بر اساس  Connection String  هستند .

در ضمن اينجا تالار دلفي هست . بهتره سوالات رو در بخش هاي مربوط به خودشون بپرسيد .
موفق باشيد.

----------


## مهدیه رادمنش

درود 

در هنگام نصب اس کیو ال 2000 در این قسمت گزینه دوم غیر فعال هست و در همان اولش هم یه ارور در رابطه با کلاینت و سرور ها میده

خواهشمندم سریع جواب بنده رو بدید ممنون   

image016.jpg

----------

