📄 mysqldataset.pas
字号:
property Filtered;
property FieldName: string read FFieldName write SetFieldName;
property IndexDefs stored StoreIndexDefs;
property MacroDel;
property Macros;
property MasterFields;
property MasterSource;
property Options;
property ParamCheck;
property RawData;
property ReadOnly;
property ResultType;
property ShareConnection;
property SQL;
property SQLBatch;
property SQLCached;
property SQLDelete;
property SQLInsert;
property SQLUpdate;
property TableName;
property UseCursor;
property OnAfterAdd;
property OnExecSQL;
property OnMacro;
property OnCustomValue;
property OnDefaultValue;
property OnThreadOpened;
property OnThreadPosted;
property BeforeOpen;
property AfterOpen;
property BeforeClose;
property AfterClose;
property BeforeInsert;
property AfterInsert;
property BeforeEdit;
property AfterEdit;
property BeforePost;
property AfterPost;
property BeforeCancel;
property AfterCancel;
property BeforeDelete;
property AfterDelete;
property BeforeScroll;
property AfterScroll;
property BeforeRefresh;
property AfterRefresh;
property OnCalcFields;
property OnDeleteError;
property OnEditError;
property OnNewRecord;
property OnPostError;
end;
TMySQLTable = class(TMySQLDatasetBase)
public
constructor Create(AOwner: TComponent); override;
published
property Active;
property CachedUpdates;
property Constraints;
property FieldDefs stored StoreFieldDefs;
property Filter;
property Filtered;
property IndexDefs stored StoreIndexDefs;
property IndexFieldNames;
property MasterFields;
property MasterSource;
property ReadOnly;
property TableName;
property Options default [doShareConnection,doMacrosEnabled,doMacroCheck,do2KStrToMemo,doRetrieveFieldValues,doRetrieveIndexDefs,doUseCursor];
property OnAfterAdd;
property OnExecSQL;
property OnMacro;
property OnDefaultValue;
property OnThreadOpened;
property OnThreadPosted;
property BeforeOpen;
property AfterOpen;
property BeforeClose;
property AfterClose;
property BeforeInsert;
property AfterInsert;
property BeforeEdit;
property AfterEdit;
property BeforePost;
property AfterPost;
property BeforeCancel;
property AfterCancel;
property BeforeDelete;
property AfterDelete;
property BeforeScroll;
property AfterScroll;
property BeforeRefresh;
property AfterRefresh;
property OnCalcFields;
property OnDeleteError;
property OnEditError;
property OnNewRecord;
property OnPostError;
end;
TMySQLQuery = class(TMySQLDatasetBase)
published
property Active;
property CachedUpdates;
property Constraints;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property Filter;
property Filtered;
property Options;
property ParamCheck;
property ParamDelimiters: string read GetMacroString write SetMacroString stored StoreMacroDel;
property Params;
property ResultType;
property SQL;
property SQLDelete;
property SQLInsert;
property SQLUpdate;
property ReadOnly;
property TableName;
property OnAfterAdd;
property OnExecSQL;
property OnMacro;
property OnDefaultValue;
property OnThreadOpened;
property OnThreadPosted;
property BeforeOpen;
property AfterOpen;
property BeforeClose;
property AfterClose;
property BeforeInsert;
property AfterInsert;
property BeforeEdit;
property AfterEdit;
property BeforePost;
property AfterPost;
property BeforeCancel;
property AfterCancel;
property BeforeDelete;
property AfterDelete;
property BeforeScroll;
property AfterScroll;
property BeforeRefresh;
property AfterRefresh;
property OnCalcFields;
property OnDeleteError;
property OnEditError;
property OnNewRecord;
property OnPostError;
end;
const
DefaultFieldClasses: array[TFieldType] of TFieldClass = (
nil, { ftUnknown }
TMySQLStringField, { ftString }
TSmallintField, { ftSmallint }
TIntegerField, { ftInteger }
TWordField, { ftWord }
TBooleanField, { ftBoolean }
TFloatField, { ftFloat }
TCurrencyField, { ftCurrency }
TBCDField, { ftBCD }
TDateField, { ftDate }
TTimeField, { ftTime }
TDateTimeField, { ftDateTime }
TBytesField, { ftBytes }
TVarBytesField, { ftVarBytes }
TAutoIncField, { ftAutoInc }
TBlobField, { ftBlob }
TMemoField, { ftMemo }
TGraphicField, { ftGraphic }
TBlobField, { ftFmtMemo }
TBlobField, { ftParadoxOle }
TBlobField, { ftDBaseOle }
TBlobField, { ftTypedBinary }
nil, { ftCursor }
TStringField, { ftFixedChar }
TWideStringField, { ftWideString }
TLargeIntField, { ftLargeInt }
TADTField, { ftADT }
TArrayField, { ftArray }
TReferenceField, { ftReference }
TDataSetField, { ftDataSet }
TBlobField, { ftOraBlob }
TMemoField, { ftOraClob }
TVariantField, { ftVariant }
TInterfaceField, { ftInterface }
TIDispatchField, { ftIDispatch }
TGuidField { ftGuid }
{$IFDEF LINUX}
,TSQLTimeStampField { ftTimeStamp }
,TFMTBcdField
{$ELSE}
{$IFDEF DELPHI6UP}
,TSQLTimeStampField { ftTimeStamp }
,TFMTBcdField
{$ENDIF}
{$IFDEF DELPHI10UP}
,TWideStringField { ftFixedWideChar }
,TWideMemoField { ftWideMemo }
,TSQLTimeStampField { ftOraTimeStamp }
,TStringField { ftOraInterval }
{$ENDIF}
{$ENDIF}
);
implementation
uses
{$IFDEF MSWINDOWS}
MySQLThread, Forms,{$ENDIF}{$IFDEF LINUX} {$IFNDEF CONSOLEAPP} QForms, {$ENDIF} Types,{$ENDIF}
MySQLDrivers, MySQLStrUtils;
//**********************************************************************
// TMySQLStringField
//**********************************************************************
constructor TMySQLStringField.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FValues := TStringList.Create;
FStringType := stNormal;
end;
destructor TMySQLStringField.Destroy;
begin
FreeAndNil(FValues);
inherited;
end;
class procedure TMySQLStringField.CheckTypeSize(Value: Integer);
begin
end;
function TMySQLStringField.GetStringType: TMySQLStringTypes;
begin
Result := TMySQLDatasetBase(Dataset).GetStringType(Self);
if Result<>stNone then
FStringType := Result;
Result := FStringType;
end;
function TMySQLStringField.StrInValue(const Value: string): boolean;
begin
Result := pos(UpperCase(Value),UpperCase(Text))>0;
end;
function TMySQLStringField.GetStringValues: TStrings;
var
R: string;
begin
R := TMySQLDatasetBase(Dataset).GetStringValues(Self);
if length(R)>0 then begin
FValues.Clear;
FValues.CommaText := R;
end;
Result := FValues;
end;
procedure TMySQLStringField.SetStringValues(Value : TStrings);
begin
if (Value.Text <> FValues.Text) then
FValues.Assign(Value);
end;
//**********************************************************************
// TMySQLBlobStream
//**********************************************************************
constructor TMySQLBlobStream.Create(Field: TBlobField; Mode: TBlobStreamMode);
begin
FMode := Mode;
FField := Field;
FDataSet := FField.DataSet as TMySQLDatasetBase;
if not FDataSet.GetActiveRecBuf(FBuffer) then Exit;
if not FField.Modified and (Mode <> bmRead) then
begin
if FField.ReadOnly then MYSQLError(nil,nil,-1,'Field is readonly');
if not (FDataSet.State in [dsEdit, dsInsert]) then MYSQLError(nil,nil,-1,'Dataset not in edit or insert mode');
FCached := True;
end
else
FCached := (FBuffer = FDataSet.ActiveBuffer);
FOpened := True;
if Mode = bmWrite then Truncate;
end;
destructor TMySQLBlobStream.Destroy;
begin
if FOpened and FModified then FField.Modified := True;
if FModified then
try
FDataSet.DataEvent(deFieldChange, Longint(FField));
except
raise;
end;
end;
function TMySQLBlobStream.GetBlobFromRecord(Field: TField): TBlobData;
var
Rec: PRecInfo;
Pos: Integer;
begin
Result := '';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -