ورود

View Full Version : دلفی برای برنامه نویس سی شارپ



ayub_coder
دوشنبه 29 خرداد 1391, 20:02 عصر
سلام دوستان
من قبلا سی شارپ کار می کنم. ولی پروژه ی جدیدمو می خوام با دلفی بنویسم. چند سال پیش با دلفی 7 کار کردم.ولی واسه پروژه می اومدم از کامپوننت های که موجود بود میکشیدیم رو فرم و باهاشون کار می کردیم و یک وضع فجیع به وجود می اومد.
حالا برم سر اصل مطلب. من برنامه های خودمو تو سی شارپ به این صورت می نوشتم که برای هر چیز یک کلاس جدا داشتم.مثلا یک کلاس برای برقراری ارتباط با بانک اطلاعاتی و عملیات مربوط به دیتابیس و برای هریک از موجودیت هام یک کلاس جدا که جدا از هم کاراشونو میکردن.
مثال برای مشتری یه کلاس داشتم که توابع مختلفی مثل

InsertEmployee()
DeleteEmplyee(id)
SearchEmployee(name , id )
و غیره داشتم که بسیار تمیز و مرتب همه چیز تو کلاس خودش و سر جاش بود. همچنین برای توابع شخصی که داشتم و زیاد ازشون استفاده میشد کلاس های استاتیک و غیره تعریف می کردم.
از کنترل های آماده ویژوال استدیو استفاده نمی شد و همه چیز اعم از اتصالات و بازیابی و نوشتن در دیتابیس از طریق کد نویسی انجام میشد

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


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

BORHAN TEC
دوشنبه 29 خرداد 1391, 20:32 عصر
حالا اگه من بخوام تو دلفی به همی ترتیب کد نویسی کنم و همون روال قبلی رو که در سی شارپ میرم رو در دلفی بکار ببرم چطور این کار امکان پذیره؟ استفاده نکردن از کنترل های آماده (کد نویسی کردن عملیات) . جدا سازی کلاس ها و ...این موضوع اصلاً موضوع عجیبی نیست. این کار رو شما به راحتی میتونید در دلفی هم انجام دهید. به عنوان نمونه من یک یونیت رو که چند سال پیش برای یکی از پروژه هایم نوشته بودم رو کدش رو قرار میدم(البته کدها کمی مبتدیانه است چون چند سال پیش زیاد دلفی بلد نبودم! یادش بخیر :لبخندساده:)
این هم یک کد نمونه:
{************************************************* *************}
{ }
{ Storage 1.1 Runtime Library }
{ }
{ Copyright(c) 2010-2011 by Mr Shuhin Ashayeri }
{ }
{************************************************* *************}

{************************************************* *************}
{ Storage Framework Unit }
{************************************************* *************}

unit StorageFramework;

interface

uses
Windows,
SysUtils,
Classes,
Forms,
DB,
DBClient,
SimpleDS,
SqlExpr,
DBXCommon,
WideStrings,
DBXInterBase;

type
TAnbar = class(TObject)
public
{ public declarations }
/// <summary> ظرفي از داده را با توجه به يك دستور اس كيو ال بر مي گرداند </summary>
function GetDataSourceBySqlCommand(SqlCommand: string): TDataSource;

/// <summary> اضافه كردن يك انبار جديد </summary>
procedure New(aId, aName, aTel, aInternalTel, aAddress, aFax, aDescription, aAnbarKalaTypeId: string);

/// <summary> حذف يك انبار موجود يا غير موجود </summary>
procedure DeleteById(aId: string);

/// <summary> به روز رساني اطلاعات يك انبار موجود </summary>
procedure UpdateById(aId, aNewName, aNewTel, aNewInternalTel, aNewAddress, aNewFax, aNewDescription, aNewAnbarKalaTypeId: string);

/// <summary> وجود يك انبار را بر اساس آي دي بررسي مي كند </summary>
function IsExistById(aId: string): Boolean;

/// <summary> وجود يك انبار را بر اساس نام بررسي مي كند </summary>
function IsExistByName(aName: string): Boolean;

/// <summary> كد انبار را بر مي گرداند </summary>
function GetId(aName: string): string;

/// <summary> نام انبار را بر مي گرداند </summary>
function GetName(aId: string): string;

/// <summary> ليست انبارها را بر مي گرداند </summary>
function ShowList(): TDataSource;

/// <summary> جزئيات يك انبار را بر مي گرداند </summary>
function ShowDetails(aId: string): TDataSource;

constructor Create;
end;

type
TAnbarKalaType = class(TObject)
public
/// <summary> ظرفي از داده را با توجه به يك دستور اس كيو ال بر مي گرداند </summary>
function GetDataSourceBySqlCommand(SqlCommand: string): TDataSource;

/// <summary> اضافه كردن يك نوع انبار جديد </summary>
procedure New(aName, aDescription: string);

/// <summary> حذف يك نوع انبار موجود يا غير موجود </summary>
procedure DeleteById(aId: string);

/// <summary> به روز رساني اطلاعات يك نوع انبار موجود </summary>
procedure UpdateById(aId, aNewName, aNewDescription: string);

/// <summary> وجود يك نوع انبار را بر اساس آي دي بررسي مي كند </summary>
function IsExistById(aId: string): Boolean;

/// <summary> وجود يك نوع انبار را بر اساس نام بررسي مي كند </summary>
function IsExistByName(aName: string): Boolean;

/// <summary> كد نوع انبار را بر اساس نام بر مي گرداند </summary>
function GetId(aName: string): string;

/// <summary> نام نوع انبار را بر اساس آيدي بر مي گرداند </summary>
function GetName(aId: string): string;

/// <summary> ليست نوع انبارها را بر مي گرداند </summary>
function ShowList(): TDataSource;

/// <summary> جزئيات يك نوع انبار را بر مي گرداند </summary>
function ShowDetails(aId: string): TDataSource;

constructor Create;
end;

type
TEmployee = class(TObject)
private
{ private declarations }
public
{ public declarations }

/// <summary> ظرفي از داده را با توجه به يك دستور اس كيو ال بر مي گرداند </summary>
function GetDataSourceBySqlCommand(SqlCommand: string): TDataSource;

/// <summary> يك كارمند جديد تعريف مي كند </summary>
procedure New(aId, aFirstName, aLastName, aUserName, aPassword, aStorageId, aTel, aMobile, aMail, aAddress, aDescription: string);

/// <summary> يك كارمند را حذف مي كند </summary>
procedure DeleteById(aId: string);

/// <summary> اطلاعات يك كارمند را به روز رساني مي كند </summary>
Procedure UpdateById(aId, aNewFirstName, aNewLastName, aNewUserName, aNewPassword, aNewStorageId, aNewTel, aNewMobile, aNewMail, aNewAddress, aNewDescription: string);

/// <summary> وجود يك كارمند را با توجه به آيدي بررسي مي كند</summary>
function IsExistById(aId: string): Boolean;

/// <summary> وجود يك كارمند را با توجه به نام و نام خانواگي بررسي مي كند </summary>
function IsExistByName(aFirstName, aLastName: string): Boolean;

/// <summary> ليست كارمندان را به همراه جزئيات نشان مي دهد </summary>
function ShowList(): TDataSource;

/// <summary> جزئيات يك كارمند را با توجه به آيدي نشان مي دهد </summary>
function ShowDetails(aId: string): TDataSource;

/// <summary> آيدي يك كارمند را با توجه به نام و نام خانوادگي بر مي گرداند </summary>
function GetId(aFirstName, aLastName: string): string;

/// <summary> نام و نام خانواگي يك كارمند را با توجه به آيدي او بر مي گرداند </summary>
function GetName(aId: string): TDataSource;

/// <summary> تنظيم مي كند كه يك كارمند مي تواند با كدام انبارها در ارتباط باشد </summary>
procedure SetStorage(aId, aNewStorageId: string);

/// <summary> يه يك كارمند يك نام كاربري اختصاص مي دهد </summary>
procedure SetUserName(aId, aNewUserName: string);

/// <summary> به يك كارمند يك كلمه عبور اختصاص مي دهد </summary>
procedure SetPassword(aId, aNewPassword: string);

{**********اين دو تابع به صورت توضيح در آمده اند تا بعداً ساخته شوند*********************}
{
/// <summary> جزئيات يك حساب كاربري را نشان مي دهد </summary>
function ShowAccountDetails(aId: string): TDataSource;


function ShowAccountDetailsList(): TDataSource;
}

/// <summary> نام حساب كاربري يك كارمند را با توجه به آيدي بر مي گرداند </summary>
function GetUserName(aId: string): string;

/// <summary> بررسي ميكند كه نام كاربري و رمز عبور وارد شده معتبر است يا خير </summary>
function CheckUser(aUserName, aPassword: string): Boolean;

/// <summary> بررسي مي كند كه نام كاربري وارد شده معتبر است يا خير </summary>
function IsExistByUserName(aUserName: string): Boolean;

/// <summary> بررسي مي كند كه آيا تلفن وارد شده از قبل وجود داشته است يا خير </summary>
function IsExistTel(aTel: string): Boolean;

/// <summary> بررسي مي كند كه شماره موبايل وارد شده از قبل وجود دارد يا خير </summary>
function IsExistMobile(aMobile: string): Boolean;

/// <summary> بررسي مي كند كه ميل وارد شده از قيل وجود دارد يا خير </summary>
function IsExistMail(aMail: string): Boolean;

constructor Create;
end;

type
TfrmDataModule = class(TDataModule)
con: TSQLConnection;
sds: TSimpleDataSet;
ds: TDataSource;
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmDataModule: TfrmDataModule;

implementation

{$R *.dfm}

const Delimeter = ', ';
const SingleCot = '''';


{ TAnbar }
{$REGION 'TAnbar Implementation'}

constructor TAnbar.Create;
begin
inherited;
frmDataModule.con.Params.Values['DataBase'] := ExtractFilePath(Application.ExeName)
+ 'DataBase1\Storage1.fdb';
frmDataModule.con.Open();
end;

procedure TAnbar.DeleteById(aId: string);
var
dbxCommand: TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'DELETE FROM STORAGES ' +
'WHERE ID = ' + SingleCot + Trim(aId) + SingleCot;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbar.GetDataSourceBySqlCommand(SqlCommand: string): TDataSource;
begin
with frmDataModule do
begin
sds.Close();
sds.DataSet.CommandText := Trim(SqlCommand);
sds.Open();
Result := ds;
end;
end;

function TAnbar.GetId(aName: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT ID FROM STORAGES WHERE NAME = ' + SingleCot + Trim(aName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := dbxReader.Value[0].GetString();
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbar.GetName(aId: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT NAME FROM STORAGES WHERE ID = ' + SingleCot + Trim(aId) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := dbxReader.Value[0].GetString();
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbar.IsExistById(aId: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(ID) FROM STORAGES WHERE ID = ' + SingleCot + Trim(aId) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbar.IsExistByName(aName: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(NAME) FROM STORAGES WHERE NAME = ' + SingleCot + Trim(aName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

procedure TAnbar.New(aId, aName, aTel, aInternalTel, aAddress, aFax, aDescription, aAnbarKalaTypeId: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand;
try
dbxCommand.Text :=
'INSERT INTO STORAGES(ID, NAME, TEL, INTERNALTEL, ADDRESS, FAX, DESCRIPTION, ANBARKALATYPEID)' +
'VALUES(' + SingleCot +
Trim(aId) + SingleCot + Delimeter + SingleCot +
Trim(aName) + SingleCot + Delimeter + SingleCot +
Trim(aTel) + SingleCot + Delimeter + SingleCot +
Trim(aInternalTel) + SingleCot + Delimeter + SingleCot +
Trim(aAddress) + SingleCot + Delimeter + SingleCot +
Trim(aFax) + SingleCot + Delimeter + SingleCot +
Trim(aDescription) + SingleCot + Delimeter +
Trim(aAnbarKalaTypeId) +
')';

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbar.ShowDetails(aId: string): TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM STORAGES WHERE ID = ' + SingleCot + Trim(aId) + SingleCot);
end;

function TAnbar.ShowList: TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM STORAGES');
end;

procedure TAnbar.UpdateById(aId, aNewName, aNewTel, aNewInternalTel, aNewAddress, aNewFax, aNewDescription, aNewAnbarKalaTypeId: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'UPDATE STORAGES SET ' +
'NAME = ' + SingleCot + Trim(aNewName) + SingleCot+ Delimeter +
'TEL = ' + SingleCot + Trim(aNewTel) + SingleCot+ Delimeter +
'INTERNALTEL = ' + SingleCot + Trim(aNewInternalTel) + SingleCot+ Delimeter +
'ADDRESS = ' + SingleCot + Trim(aNewAddress) + SingleCot+ Delimeter +
'FAX = ' + SingleCot + Trim(aNewFax) + SingleCot+ Delimeter +
'DESCRIPTION = ' + SingleCot + Trim(aNewDescription) + SingleCot+ Delimeter +
'ANBARKALATYPEID = ' + Trim(aNewAnbarKalaTypeId) +
' WHERE ID = ' + SingleCot + Trim(aId) + SingleCot ;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

{$ENDREGION}

{ TAnbarKalaType }
{$REGION 'TAnbarKalaType Implementation'}

constructor TAnbarKalaType.Create;
begin
inherited;
frmDataModule.con.Params.Values['DataBase'] := ExtractFilePath(Application.ExeName)
+ 'DataBase1\Storage1.fdb';
frmDataModule.con.Open();
end;

procedure TAnbarKalaType.DeleteById(aId: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'DELETE FROM ANBARKALATYPE ' +
'WHERE ID = ' {+ SingleCot} + Trim(aId) {+ SingleCot};

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbarKalaType.GetDataSourceBySqlCommand(SqlComman d: string): TDataSource;
begin
with frmDataModule do
begin
sds.Close();
sds.DataSet.CommandText := Trim(SqlCommand);
sds.Open();
Result := ds;
end;
end;

function TAnbarKalaType.GetId(aName: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT ID FROM ANBARKALATYPE WHERE NAME = ' + SingleCot + Trim(aName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := IntToStr(dbxReader.Value[0].GetInt16());
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbarKalaType.GetName(aId: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT NAME FROM ANBARKALATYPE WHERE ID = ' {+ SingleCot} + Trim(aId) {+ SingleCot};
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := dbxReader.Value[0].GetString();
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbarKalaType.IsExistById(aId: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(ID) FROM ANBARKALATYPE WHERE ID = ' {+ SingleCot} + Trim(aId) {+ SingleCot};
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbarKalaType.IsExistByName(aName: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(NAME) FROM ANBARKALATYPE WHERE NAME = ' + SingleCot + Trim(aName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

procedure TAnbarKalaType.New(aName, aDescription: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand;
try
dbxCommand.Text :=
'INSERT INTO ANBARKALATYPE(NAME, DESCRIPTION)' +
'VALUES(' + SingleCot +
Trim(aName) + SingleCot + Delimeter + SingleCot +
Trim(aDescription) + SingleCot +
')';

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TAnbarKalaType.ShowDetails(aId: string): TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM ANBARKALATYPE WHERE ID = ' {+ SingleCot} + Trim(aId) {+ SingleCot});
end;

function TAnbarKalaType.ShowList: TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM ANBARKALATYPE');
end;

procedure TAnbarKalaType.UpdateById(aId, aNewName, aNewDescription: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'UPDATE ANBARKALATYPE SET ' +
'NAME = ' + SingleCot + Trim(aNewName) + SingleCot + Delimeter +
'DESCRIPTION = ' + SingleCot + Trim(aNewDescription) + SingleCot +
' WHERE ID = ' + aId ;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

{$ENDREGION}

{ TEmployee }
{$REGION 'TEmployee Implementation'}

function TEmployee.CheckUser(aUserName, aPassword: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE USERNAME = ' + SingleCot + Trim(aUserName) + SingleCot + ' AND PASSWORD = ' + SingleCot + Trim(aPassword) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

constructor TEmployee.Create;
begin
inherited;
frmDataModule.con.Params.Values['DataBase'] := ExtractFilePath(Application.ExeName)
+ 'DataBase1\Storage1.fdb';
frmDataModule.con.Open();
end;

procedure TEmployee.DeleteById(aId: string);
var
dbxCommand: TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'DELETE FROM EMPLOYEE ' +
'WHERE ID = ' + SingleCot + Trim(aId) + SingleCot;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.GetDataSourceBySqlCommand(SqlCommand: string): TDataSource;
begin
with frmDataModule do
begin
sds.Close();
sds.DataSet.CommandText := Trim(SqlCommand);
sds.Open();
Result := ds;
end;
end;

function TEmployee.GetId(aFirstName, aLastName: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT ID FROM EMPLOYEE WHERE FIRSTNAME = ' + SingleCot + Trim(aFirstName) + SingleCot + ' AND LASTNAME = ' + SingleCot + Trim(aLastName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := dbxReader.Value[0].GetString();
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.GetName(aId: string): TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT FIRSTNAME, LASTNAME FROM EMPLOYEE WHERE ID = ' + SingleCot + Trim(aId) + SingleCot);
end;

function TEmployee.GetUserName(aId: string): string;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT USERNAME FROM EMPLOYEE WHERE ID = ' + SingleCot + Trim(aID) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
Result := dbxReader.Value[0].GetString;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistById(aId: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(ID) FROM EMPLOYEE WHERE ID = ' + SingleCot + Trim(aId) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistByName(aFirstName, aLastName: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE FIRSTNAME = ' + SingleCot + Trim(aFirstName) + SingleCot + ' AND LASTNAME = ' + SingleCot + Trim(aLastName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistByUserName(aUserName: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE USERNAME = ' + SingleCot + Trim(aUserName) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistMail(aMail: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE MAIL = ' + SingleCot + Trim(aMail) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistMobile(aMobile: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE MOBILE = ' + SingleCot + Trim(aMobile) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.IsExistTel(aTel: string): Boolean;
var
dbxCommand : TDBXCommand;
dbxReader : TDBXReader;
begin
Result := False;
dbxCommand :=frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text := 'SELECT COUNT(*) FROM EMPLOYEE WHERE TEL = ' + SingleCot + Trim(aTel) + SingleCot;
dbxReader := dbxCommand.ExecuteQuery();
try
dbxReader.Next;
if (dbxReader.Value[0].GetInt32) > 0 then
Result := True;
finally
dbxReader.Free
end;
finally
FreeAndNil(dbxCommand);
end;
end;

procedure TEmployee.New(aId, aFirstName, aLastName, aUserName, aPassword, aStorageId, aTel, aMobile, aMail, aAddress, aDescription: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand;
try
dbxCommand.Text :=
'INSERT INTO EMPLOYEE(ID, FIRSTNAME, LASTNAME, USERNAME, PASSWORD, STORAGEID, TEL, MOBILE, MAIL, ADDRESS, DESCRIPTION)' +
'VALUES(' + SingleCot +
Trim(aId) + SingleCot + Delimeter + SingleCot +
Trim(aFirstName) + SingleCot + Delimeter + SingleCot +
Trim(aLastName) + SingleCot + Delimeter + SingleCot +
Trim(aUserName) + SingleCot + Delimeter + SingleCot +
Trim(aPassword) + SingleCot + Delimeter + SingleCot +
Trim(aStorageId) + SingleCot + Delimeter + SingleCot +
Trim(aTel) + SingleCot + Delimeter + SingleCot +
Trim(aMobile) + SingleCot + Delimeter + SingleCot +
Trim(aMail) + SingleCot + Delimeter + SingleCot +
Trim(aAddress) + SingleCot + Delimeter + SingleCot +
Trim(aDescription) + SingleCot +
')';

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

procedure TEmployee.SetPassword(aId, aNewPassword: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'UPDATE EMPLOYEE SET ' +
'PASSWORD = ' + SingleCot + Trim(aNewPassword) + SingleCot +
' WHERE ID = ' + SingleCot + Trim(aId) + SingleCot ;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

procedure TEmployee.SetStorage(aId, aNewStorageId: string);
begin

end;

procedure TEmployee.SetUserName(aId, aNewUserName: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'UPDATE EMPLOYEE SET ' +
'USERNAME = ' + SingleCot + Trim(aNewUserName) + SingleCot +
' WHERE ID = ' + SingleCot + Trim(aId) + SingleCot ;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

function TEmployee.ShowDetails(aId: string): TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM EMPLOYEE WHERE ID = ' + SingleCot + Trim(aId) + SingleCot);
end;

function TEmployee.ShowList: TDataSource;
begin
Result := GetDataSourceBySqlCommand('SELECT * FROM EMPLOYEE');
end;

procedure TEmployee.UpdateById(aId, aNewFirstName, aNewLastName, aNewUserName, aNewPassword, aNewStorageId, aNewTel, aNewMobile, aNewMail, aNewAddress, aNewDescription: string);
var
dbxCommand : TDBXCommand;
begin
dbxCommand := frmDataModule.con.DBXConnection.CreateCommand();
try
dbxCommand.Text :=
'UPDATE EMPLOYEE SET ' +
'FIRSTNAME = ' + SingleCot + Trim(aNewFirstName) + SingleCot + Delimeter +
'LASTNAME = ' + SingleCot + Trim(aNewLastName) + SingleCot + Delimeter +
'USERNAME = ' + SingleCot + Trim(aNewUserName) + SingleCot + Delimeter +
'PASSWORD = ' + SingleCot + Trim(aNewPassword) + SingleCot + Delimeter +
'STORAGEID = ' + SingleCot + Trim(aNewStorageId) + SingleCot + Delimeter +
'TEL = ' + SingleCot + Trim(aNewTel) + SingleCot + Delimeter +
'MOBILE = ' + SingleCot + Trim(aNewMobile) + SingleCot + Delimeter +
'MAIL = ' + SingleCot + Trim(aNewMail) + SingleCot + Delimeter +
'ADDRESS = ' + SingleCot + Trim(aNewAddress) + SingleCot + Delimeter +
'DESCRIPTION = ' + SingleCot + Trim(aNewDescription) + SingleCot +
' WHERE ID = ' + SingleCot + Trim(aId) + SingleCot ;

dbxCommand.ExecuteQuery();
finally
FreeAndNil(dbxCommand);
end;
end;

{$ENDREGION}

end.


البته تاریخی که بالای یونیت خورده یه کم غلط اندازه، بخاطر اینکه می خواستم دوباره ادامش بدم که پشیمون شدم! :اشتباه:

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

ayub_coder
دوشنبه 29 خرداد 1391, 20:46 عصر
بسیار ممنون . چون خیلی وقته دلفی کار نکردم چشام به کدهای دلفی عادت نکرده خیلی بهم ریخته میبینم!:چشمک: باید باز سری به کتاب مارکو کانتو بزنم!
آیا میشه هر کدوم از این یونیت ها رو به یک فایل DLL تبدیل کرد؟ منظورم یه جوری باشه که اگه خواستیم برنامه رو آپدیت کنیم یا ارتقا بدیم نیایم همه ی برنامه رو تغییر بدیم و از نو کامپایل کنیم.فقط همین یه بخش رو تغییر بدیم و برسونیم دست مشتری! آیا این کار شدنیه؟

BORHAN TEC
دوشنبه 29 خرداد 1391, 21:01 عصر
آیا میشه هر کدوم از این یونیت ها رو به یک فایل DLL تبدیل کرد؟ منظورم یه جوری باشه که اگه خواستیم برنامه رو آپدیت کنیم یا ارتقا بدیم نیایم همه ی برنامه رو تغییر بدیم و از نو کامپایل کنیم.فقط همین یه بخش رو تغییر بدیم و برسونیم دست مشتری! آیا این کار شدنیه؟اگر می خواید که فایل کتابخانه شما یک اینترفیس رو Export کند باید یک BPL بسازید، توجه داشته باشید که dll های بومی ویندوز نمی توانند واسط یک کلاس را export کنند و اگر در دات نت خلاف این موضوع رو میبینید به خاطر اینه که در آنجا dll های ساخته شده تحت دات نت هستند و بومی ویندوز نیستند.
در هر صورت برای این کار می توانید از روشهای مختلفی استفاده کنید، مثلاً اگر می خواهید که برنامه شما خیلی خیلی(!) انعطاف پذیر باشد می توانید در قسمت هایی از برنامه از موتورهای اسکریپتی مثل RemObject Pascal Script استفاده کنید که البته با انجام این کار ساخت برنامه کمی دشوارتر می شود و به نظر من نسبت به حالات قبلی دانش فنی بالاتری را می طلبد.:متفکر:

ayub_coder
دوشنبه 29 خرداد 1391, 21:19 عصر
اگر می خواید که فایل کتابخانه شما یک اینترفیس رو Export کند باید یک BPL بسازید، توجه داشته باشید که dll های بومی ویندوز نمی توانند واسط یک کلاس را export کنند
میشه این موضوع رو یکم توضیح بدین؟

firststep
دوشنبه 29 خرداد 1391, 21:27 عصر
اره دوست عزیز چرا که نه
هم توی همین سایت توضیح داده شده و هم لینکه زیر و یه نگاهی کن
creat dll (http://delphi.about.com/od/windowsshellapi/a/dll_basics.htm)

Felony
دوشنبه 29 خرداد 1391, 21:27 عصر
http://barnamenevis.org/showthread.php?260077-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D9%81%D8%A7%DB%8C%D9%84%D9%87%D8%A7%DB%8C-BPL-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D9%86%D9%87%D8%A7&p=1154908