راهنمایی در مورد اتصال به بانک با ADOTable و جلو گیری از قفل کردن سرور
با سلام
من تا الان برنامه تحت شبکه ننوشتم و فقط برنامه هام تک کاربره بوده الان یکی از مشتری ها امده و می خوات برنامه رو تحت شبکه کنم که 100 تا کاربر بتونن باهاش کار کنم . مشخصات برنامه و بانک و ابزاری که برای اتصال به بانک استفاده کردم :
محیط برنامه نویسی : delphi 7
بانک : sql 2000
ابزاری که برای اتصال به بانک استفاده کردم : DataSource و ADOTable
من جستجو کردم اما چیزی راجب به اتصال برنامه های کلایت به بانکی که روی سرور هست با ADOTable پیدا نکردم .
اما مطالبی بود در مورد Indy :
کد:
http://barnamenevis.org/forum/showthread.php?t=52037
و
یه مختصر در مورد SocketConnection :
کد:
http://www.barnamenevis.org/forum/sh...ad.php?t=59232
و
یه مختصری هم در مورد BDE :
کد:
http://barnamenevis.org/forum/showth...?t=7933&page=9
چهار تا سوال اگه دوستان لطف کنن و جواب بدن ممنون می شم :
1- من چطوری می تونم کلاینت ها رو با ADOTable به بانکی که روی سرور هست متصل کنم ؟ (لطفا توضیح مختصر ندید من مبتدی هستم)
2-تا اونجایی که فهمیدم هر کلاینت که به سرور وصل می شه یه Thread روی سرور می سازه اگه مثلا هم زمان 100 تا کلاینت به سرور وصل بشه با تو جه به اینکه 2 برنامه دیگه هم دارن روی سرور کار می کنن قانونا قفل می کنه آیا فقط تنها راه جلو گیری اینه که نزارم مثلا بیشتر از 30 کلاینت هم زمان به سرور وصل بشن؟
3- از چه پورتی باید برای اتصال کلاینت به سرور و سرور به کلاینت استفاده کنم؟(شبکه LAN هست . 2 تا برنامه دیگه هم دارن از شبکه استفاده می کنن و من نمی دونم از چه پورتی دارن استفاده می کنن)
4- ADOTable باعث نمی شه بار شبکه سنگین شه تا اونجایی که تونستم فقط موقع انجام عملیات ADOTable رو فعال و بعد از عملیات ADOTable رو غیر فعال کردم ؟
بازم تشکر می کنم از دوستانی که وقت می زارن و جواب منو می دن.
سورس login شدن کاربران به سرور
سلام
گفته های دوستمون Romixery عالی و کامل بودن.
اینم مثالی از صفحه Login Form که دوستم مصطفی سرباز زاده برای اموزش بهم داده بود رو برات میزارم.
کد:
unit Login;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TLogin1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Image1: TImage;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Login1: TLogin1;
implementation
uses Data, Main;
{$R *.dfm}
Function EnCode(Pass : String) : ShortString;
External 'Enc.Dll';
Function Decode(Coded : String) : ShortString;
External 'Enc.Dll';
procedure TLogin1.Button2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TLogin1.Button1Click(Sender: TObject);
Var
I : Integer;
Access : String;
C : Char;
begin
Try
IF (Edit1.Text <> '') And (Edit2.Text <> '') Then
Begin
With Data1 Do
Begin
ADOConnection1.Connected := False;
ADOConnection1.ConnectionString := 'Server=Mahdi;Database=Bank1';
ADOConnection1.Open('Sa','6803');
ADOConnection1.Connected := True;
IF ADOConnection1.Connected Then
Begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * From Table1');
ADOQuery1.Active := True;
IF (ADOQuery1.Locate('Username',Trim(Edit1.Text),[])) Then
Begin
IF (Decode(Trim(ADOQuery1Password.AsString)) = Trim(Edit2.Text)) Then
Begin
Login1.Hide;
Access := Trim(ADOQuery1Access.AsString);
For I := 1 To Length(Trim(ADOQuery1Access.AsString)) Do
Begin
C := Access[i];
Case C OF
'A' : Main1.Button1.Enabled := True;
'B' : Main1.Button2.Enabled := True;
End;
End;
Main1.Show;
End
Else
MessageDlg('کلمه رمز اشتباه مي باشد ',mtError,[mbok],0);
End
Else
MessageDlg('چنين نام کاربري موجود نمي باشد',
mtError,[mbok],0);
End;
End;
End
Else
Begin
MessageDlg('گزينه ها را کامل نماييد',mtError,[mbok],0);
End;
Except
MessageDlg('خطا در بارگذاري بانک اطلاعاتي',mtError,[mbok],0)
End;
end;
end.
موفق و پیروز باشی.:31: