📄 usyspub.pas
字号:
m_nGerm := nGerm;
end;
procedure TMyField.SetValue( strFieldData:string );
begin
m_strFieldData := trim( strFieldData );
if m_eDataFieldType = DATA_DATETIME then
begin
m_dtFieldData := strTodatetime(m_strFieldData);
end;
end;
procedure TMyField.SetValue( dFieldData:double );
begin
m_dFieldData := dFieldData;
end;
function TMyField.CharValue():string;
var
clErr:TCustomException;
begin
try
if m_eDataFieldType <> DATA_CHAR then
begin
clErr := TCustomException.Create();
clErr.SetErrMsg( 'Value of field is not String ' );
raise clErr;
end;
except
clErr.Free();
end;
Result := m_strFieldData;
end;
function TMyField.DoubleValue():double;
var
clErr:TCustomException;
begin
try
if m_eDataFieldType <> DATA_DOUBLE then
begin
clErr := TCustomException.Create();
clErr.SetErrMsg( 'Value of field is not Double ' );
raise clErr;
end;
except
clErr.Free();
end;
Result := m_dFieldData;
end;
function TMyField.DatetimeValue():Tdatetime;
var
clErr:TCustomException;
begin
try
if m_eDataFieldType <> DATA_DATETIME then
begin
clErr := TCustomException.Create();
clErr.SetErrMsg( 'Value of field is not Datetime ' );
raise clErr;
end;
except
clErr.Free();
end;
Result := m_dtFieldData;
end;
function TMyField.FieldName():string;
begin
Result := m_strFieldName;
end;
function TMyField.FieldType():TDataFieldType;
begin
Result := m_eDataFieldType;
end;
function TMyField.IsKey():boolean;
begin
if m_nkey > 0 then
Result := true
else
Result := false;
end;
function TMyField.IsGerm():boolean;
begin
if m_nGerm > 0 then
Result := true
else
Result := false;
end;
{TMyField End}
{TAdoRet start}
constructor TAdoRet.Create(var clconn:TAdoConnection);
begin
m_clObjectList := TObjectList.Create();
m_bEOF := false;
m_bOpen := false;
m_strTableName := '';
m_clAdoQuery := TAdoQuery.Create(nil);
m_clAdoCommit := TAdoQuery.Create(nil);
m_clAdoCommit.Connection := clconn;
m_clAdoQuery.Connection := clconn;
end;
destructor TAdoRet.destroy();
begin
m_clAdoQuery.Free();
m_clAdoCommit.Free;
m_clObjectList.Clear;
m_clObjectList.Free();
end;
procedure TAdoRet.InitFieldData();
var
i,ncount:integer;
eDataFieldType:TDataFieldType;
begin
ncount := m_clObjectList.Count - 1;
for i := 1 to ncount do
begin
eDataFieldType := TMyField( m_clObjectList.Items[i] ).m_eDataFieldType;
case eDataFieldType of
DATA_CHAR:
TMyField( m_clObjectList.Items[i] ).SetValue('');
DATA_DOUBLE:
TMyField( m_clObjectList.Items[i] ).SetValue(0);
else
end;
end;
end;
procedure TAdoRet.InitAdoRet( var clconn:TAdoConnection );
begin
m_clObjectList := TObjectList.Create();
m_bEOF := false;
m_bOpen := false;
m_strTableName := '';
m_clAdoQuery := TAdoQuery.Create(nil);
m_clAdoCommit := TAdoQuery.Create(nil);
m_clAdoCommit.Connection := clconn;
m_clAdoQuery.Connection := clconn;
end;
procedure TAdoRet.SetTableName( strTableName:string );
begin
m_strTableName := strTableName;
end;
procedure TAdoRet.AddField( var clMyField:TMyField );
begin
if assigned( m_clObjectList ) then
m_clObjectList.Add( clMyField );
end;
function TAdoRet.IsEOF():boolean;
begin
Result := m_bEOF;
end;
function TAdoRet.IsOpen():boolean;
begin
Result := m_bOpen;
end;
procedure TAdoRet.MoveFirst();
begin
m_clAdoQuery.First();
FetchOneRow();
end;
procedure TAdoRet.MoveNext();
begin
m_clAdoQuery.Next();
if m_clAdoQuery.Eof = true then
begin
m_bEOF := true;
end
else
begin
FetchOneRow();
end;
end;
procedure TAdoRet.FetchOneRow();
var
ncount,i:integer;
eDataFieldType:TDataFieldType;
strFieldName:string;
begin
if ( m_bEOF = false ) and ( m_bOpen = true ) then
begin
ncount := m_clObjectList.Count - 1;
for i := 0 to ncount do
begin
eDataFieldType := TMyField( m_clObjectList.Items[i] ).FieldType();
strFieldName := TMyField( m_clObjectList.Items[i] ).FieldName();
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
TMyField( m_clObjectList.Items[i] ).SetValue( m_clAdoQuery.Fieldbyname(strFieldName).AsString );
DATA_DOUBLE:
TMyField( m_clObjectList.Items[i] ).SetValue( m_clAdoQuery.Fieldbyname(strFieldName).AsFloat );
else
end;
end;
end;
end;
procedure TAdoRet.Open( strWhere:string );
var
strSql:string;
e:TCustomException;
begin
strSql := '';
strSql := 'select * from ' + m_strTableName + ' ' + strWhere ;
if RunSql( m_clAdoQuery, strSql, 0 ) = false then
begin
m_bOpen := false;
m_bEOF := false;
try
e := TCustomException.Create();
e.SetErrMsg('从数据库取数据失败');
raise e;
except
e.Free;
end;
end
else
begin
if m_clAdoQuery.RecordCount > 0 then
begin
m_bOpen := true;
m_bEOF := false;
m_clAdoQuery.First();
FetchOneRow();
end
else
begin
m_bOpen := false;
m_bEOF := true;
end;
end;
end;
procedure TAdoRet.InsertRecord( );
var
strSql:string;
i,ncount:integer;
eDataFieldType:TDataFieldType;
e:TCustomException;
begin
strSql := '';
strSql := 'insert into ' + m_strTableName +'(';
ncount := m_clObjectList.Count - 1;
//Get FieldName;
for i := 0 to ncount do
begin
if Not TMyField( m_clObjectList.Items[i] ).IsGerm() then
begin
if i<>ncount then
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName() + ','
else
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName();
end;
end;
strsql := strsql + ')values(';
//Get FieldData;
for i := 0 to ncount do
begin
if Not TMyField( m_clObjectList.Items[i] ).IsGerm() then
begin
eDataFieldType := TMyField( m_clObjectList.Items[i] ).FieldType();
if i<>ncount then
begin
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
strsql := strsql + '''' + TMyField( m_clObjectList.Items[i] ).CharValue() + '''' + ',';
DATA_DOUBLE:
strsql := strsql + FloatToStr( TMyField( m_clObjectList.Items[i] ).DoubleValue()) + ',';
else
end;
end
else
begin
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
strsql := strsql + '''' + TMyField( m_clObjectList.Items[i] ).CharValue() + '''' ;
DATA_DOUBLE:
strsql := strsql + FloatToStr( TMyField( m_clObjectList.Items[i] ).DoubleValue());
else
end;
end;
end;
end;
strsql := strsql + ')';
//Runsql
if RunSql( m_clAdoCommit, strSql, 1 ) = false then
begin
try
e := TCustomException.Create();
e.SetErrMsg('Insert Record UnSucceed');
raise e;
except
e.Free;
end;
end;
//Repeat InitFieldData
InitFieldData();
end;
{note:not update key}
procedure TAdoRet.UpdateRecord();
var
strSql, strwhere:string;
i,ncount:integer;
eDataFieldType:TDataFieldType;
e:TCustomException;
begin
strSql := '';
strwhere := '';
strwhere := ' where ';
strSql := 'Update ' + m_strTableName +' set ';
ncount := m_clObjectList.Count - 1;
for i := 0 to ncount do
begin
eDataFieldType := TMyField( m_clObjectList.Items[i] ).FieldType();
if TMyField( m_clObjectList.Items[i] ).IsGerm() or TMyField( m_clObjectList.Items[i] ).IsKey() then
begin
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
begin
strwhere := strwhere + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strwhere := strwhere + '''' + TMyField( m_clObjectList.Items[i] ).CharValue() + '''' + ' and ';
end;
DATA_DOUBLE:
begin
strwhere := strwhere + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strwhere := strwhere + FloatToStr( TMyField( m_clObjectList.Items[i] ).DoubleValue()) + ' and ';
end;
else
end;
end
else
begin
if i<>ncount then
begin
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
begin
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strsql := strsql + '''' + TMyField( m_clObjectList.Items[i] ).CharValue() + '''' + ',';
end;
DATA_DOUBLE:
begin
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strsql := strsql + FloatToStr( TMyField( m_clObjectList.Items[i] ).DoubleValue()) + ',';
end;
else
end;
end
else
begin
case eDataFieldType of
DATA_CHAR,DATA_DATETIME:
begin
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strsql := strsql + '''' + TMyField( m_clObjectList.Items[i] ).CharValue() + '''';
end;
DATA_DOUBLE:
begin
strsql := strsql + TMyField( m_clObjectList.Items[i] ).FieldName()+ ' = ';
strsql := strsql + FloatToStr( TMyField( m_clObjectList.Items[i] ).DoubleValue());
end;
else
end;
end;
end;
end;
strwhere := LeftStr( strwhere, Length(strwhere) - 4 );
strsql := strsql + strwhere;
//Runsql
if RunSql( m_clAdoCommit, strSql, 1 ) = false then
begin
try
e := TCustomException.Create();
e.SetErrMsg('Insert Record UnSucceed');
raise e;
except
e.Free;
end;
end;
//Repeat InitFieldData
InitFieldData();
end;
procedure TAdoRet.ExecuteSQL( strsql:string );
var
e:TCustomException;
begin
if RunSql( m_clAdoCommit, strSql, 1 ) = false then
begin
try
e := TCustomException.Create();
e.SetErrMsg('Execute SQL UnSucceed');
raise e;
except
e.Free;
end;
end;
end;
function TAdoRet.Find( const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions ): Boolean;
begin
if m_clAdoQuery.Locate( KeyFields, KeyValues, Options ) then
begin
FetchOneRow();
Result := true;
end
else
Result := false;
end;
{TAdoRet end}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -