BORHAN TEC
چهارشنبه 01 شهریور 1391, 18:23 عصر
سلام :قلب:
در Delphi XE کلاسهای زیر را تعریف کرده ام:
type
TUser = class(TObject)
FDBXConnection: TDBXConnection;
public
procedure SetDBXConnection(aDBXConnection: TDBXConnection); // @
...
function GetUserNameById(aId: Integer): string;
...
constructor Create; overload; // @
constructor Create(aDBXConnection: TDBXConnection); overload; // @
end;
TBaseSQL = class
private
class var dbxReader: TDBXReader;
class var dbxCommand: TDBXCommand;
public
class function GetOneDataBySQL(aSQL: string; aDBXConnection: TDBXConnection;
var aFounded: Boolean): TDBXValue;
end;
و در قسمت پیاده سازی کلاس TUser:
function TUser.GetUserNameById(aId: Integer): string;
var
SQL: string;
Founded: Boolean;
ResValue: String;
stream: TStream;
bytes: TBytes;
begin
SQL := 'SELECT EMAIL FROM "USER" WHERE ID = ''' + IntToStr(aId)+'''';
stream := nil;
TBaseSQL.GetOneDataBySQL(SQL, FDBXConnection, Founded);
if Founded = True then
begin
ResValue := TBaseSQL.GetOneDataBySQL(SQL, FDBXConnection, Founded).GetString;
end
else
Result := '';
end;
constructor TUser.Create;
begin
inherited;
end;
constructor TUser.Create(aDBXConnection: TDBXConnection);
begin
SetDBXConnection(aDBXConnection);
end;
procedure TUser.SetDBXConnection(aDBXConnection: TDBXConnection);
begin
FDBXConnection := aDBXConnection;
end;
و در قسمت پیاده سازی کلاس TBaseSQL:
class function TBaseSQL.GetOneDataBySQL(aSQL: string;
aDBXConnection: TDBXConnection; var aFounded: Boolean): TDBXValue;
begin
dbxCommand := aDBXConnection.CreateCommand;
dbxCommand.Text := aSQL;
dbxCommand.Prepare;
dbxReader := dbxCommand.ExecuteQuery();
if dbxReader.Next then
begin
aFounded := True;
Result := dbxReader.Value[0];
end
else
begin
aFounded := False;
end;
end;
حال موقعی که از کدی مثل کد زیر استفاده می کنم:
var
User: TUser;
begin
User := TUser.Create(FBCONNECTION.DBXConnection);
try
Caption := User.GetUserNameById(1);
finally
User.Free;
end;
با خطای زیر روبرو می شوم:
TDBXTypes.ZSTRING value type cannot be accessed as TDBXTypes.WideString value type.
توضیحات اضافی:
جدول User شامل دو فیلد ID و EMAIL است.
ID: از نوع Integer است.
EMAIL : از نوع VarChar(100) است.
CharSet از نوع UTF8
Collate از نوع UNICODE_CI
پایگاه داده مورد استفاده : FireBird (البته برای تست از هر DBMS دیگری هم می توان استفاده کرد).
لطفاً اگر برای رفع این مشکل پیشنهاد و یا راهکاری دارید ما را بی بهره نگذارید. :قلب:
با تشکر فراوان...
در Delphi XE کلاسهای زیر را تعریف کرده ام:
type
TUser = class(TObject)
FDBXConnection: TDBXConnection;
public
procedure SetDBXConnection(aDBXConnection: TDBXConnection); // @
...
function GetUserNameById(aId: Integer): string;
...
constructor Create; overload; // @
constructor Create(aDBXConnection: TDBXConnection); overload; // @
end;
TBaseSQL = class
private
class var dbxReader: TDBXReader;
class var dbxCommand: TDBXCommand;
public
class function GetOneDataBySQL(aSQL: string; aDBXConnection: TDBXConnection;
var aFounded: Boolean): TDBXValue;
end;
و در قسمت پیاده سازی کلاس TUser:
function TUser.GetUserNameById(aId: Integer): string;
var
SQL: string;
Founded: Boolean;
ResValue: String;
stream: TStream;
bytes: TBytes;
begin
SQL := 'SELECT EMAIL FROM "USER" WHERE ID = ''' + IntToStr(aId)+'''';
stream := nil;
TBaseSQL.GetOneDataBySQL(SQL, FDBXConnection, Founded);
if Founded = True then
begin
ResValue := TBaseSQL.GetOneDataBySQL(SQL, FDBXConnection, Founded).GetString;
end
else
Result := '';
end;
constructor TUser.Create;
begin
inherited;
end;
constructor TUser.Create(aDBXConnection: TDBXConnection);
begin
SetDBXConnection(aDBXConnection);
end;
procedure TUser.SetDBXConnection(aDBXConnection: TDBXConnection);
begin
FDBXConnection := aDBXConnection;
end;
و در قسمت پیاده سازی کلاس TBaseSQL:
class function TBaseSQL.GetOneDataBySQL(aSQL: string;
aDBXConnection: TDBXConnection; var aFounded: Boolean): TDBXValue;
begin
dbxCommand := aDBXConnection.CreateCommand;
dbxCommand.Text := aSQL;
dbxCommand.Prepare;
dbxReader := dbxCommand.ExecuteQuery();
if dbxReader.Next then
begin
aFounded := True;
Result := dbxReader.Value[0];
end
else
begin
aFounded := False;
end;
end;
حال موقعی که از کدی مثل کد زیر استفاده می کنم:
var
User: TUser;
begin
User := TUser.Create(FBCONNECTION.DBXConnection);
try
Caption := User.GetUserNameById(1);
finally
User.Free;
end;
با خطای زیر روبرو می شوم:
TDBXTypes.ZSTRING value type cannot be accessed as TDBXTypes.WideString value type.
توضیحات اضافی:
جدول User شامل دو فیلد ID و EMAIL است.
ID: از نوع Integer است.
EMAIL : از نوع VarChar(100) است.
CharSet از نوع UTF8
Collate از نوع UNICODE_CI
پایگاه داده مورد استفاده : FireBird (البته برای تست از هر DBMS دیگری هم می توان استفاده کرد).
لطفاً اگر برای رفع این مشکل پیشنهاد و یا راهکاری دارید ما را بی بهره نگذارید. :قلب:
با تشکر فراوان...