⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnadocquery.pas

📁 万能查询控件WNQuery2.0(带源码),Delphi+ADO功能强大.
💻 PAS
字号:
//**************************************************************************
//*万能查询控件2.01
//*
//*去掉了1.1版出错的bug,抛弃了对Delphi5的支持。想用的朋友自己去改
//*主要是去掉在Delphi5中不支持而Delphi6中存在的控件界面属性,很简单。
//*
//*在Delphi6中属性编辑器在编译时会出错,我会尽快提供新的版本的。
//*
//*王锐(wr960204武稀松)2002-3-15
//*Email:wr_960204@x263.net
//*QQ:42088303
//**************************************************************************
//*20020326
//*(U)对字符串型的数据添加了模糊查询条件Like
//*(+)增加了控制QryDlg窗体字体大小的属性QryFormFontSize
//*(+)增加了控制QryDlg窗体标题的属性QryFormCaption
//*甘露(Pely Gan) 2002-3-26
//*Email:pelygan@sina.com
//*QQ:Not Visiable to you
//**************************************************************************
unit WNADOCQuery;

interface

uses
  WNADOQDlg, Dialogs,
  Windows, Messages, SysUtils, Classes, ADODB, DB;

type
  ConnectString = WideString;
  TWNADOCQuery = class(TComponent)
  private
    { Private declarations }
    FAutoLogin: boolean;
    Fdateseperate: Char;
    FMyConnection: TADOConnection;
    FMyQuery: TADOQuery;
    FMyDataSet: TADODataSet;
    FMyConnectionString: ConnectString;
    FField: TStrings;
    FTabName: WideString;
    FFieldInf: array of WNField;
    FQryFormFontSize : Integer;  //* add by pely 20020325
    FQryFormCaption : String;   //* add by pely 20020325
    procedure SetConnectionString(Value: WideString);
    function GetFieldType(FieldName: string): Integer;
    procedure SetField(Value: TStrings);
    procedure SetTabName(Value: WideString);
    procedure SetDateSeperate(Value: Char);
    procedure SetAutoLogin(Value: Boolean);
    function GetFileGut(FieldName: string): string;
  protected
    { Protected declarations }
  public
    { Public declarations }
    QUeryTerm: WideString;
    function Execute(CanSelect: Boolean): Boolean;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property AutoLogin: boolean read FAutoLogin write SetAutoLogin;
    property TabName: WideString read FTabName write SetTabName;
    property ConnectionString: WideString read FMyConnectionString write SetConnectionString;
    property Field: TStrings read FField write SetField;
    property DateSeperate: Char read FDateSeperate write SetDateSeperate; //日期分隔符默认为单引号但是在Access中为'#'
    property QryFormFontSize: Integer read FQryFormFontSize write FQryFormFontSize default 12;  //* add by pely 20020325
    property QryFormCaption: String read FQryFormCaption write FQryFormCaption ;  //* add by pely 20020325
  end;

procedure Register;

implementation

function TWNADOCQuery.GetFileGut(FieldName: string): string;
begin
  Result := '';
  with FMyQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Text := 'Select ' + FieldName + ' from ' + FTabName;
    Open;
    First;
    while not eof do
    begin
      Result := Result + FieldByName(FieldName).AsString + #13;
      Next;
    end;
  end;
end;

procedure TWNADOCQuery.SetAutoLogin(Value: Boolean);
begin
  if FAutoLogin <> Value then
  begin
    FAutoLogin := not FAutoLogin;
    FMyConnection.LoginPrompt := not FAutoLogin;
  end;

end;

procedure TWNADOCQuery.SetDateSeperate(Value: Char);
begin
  if FDateSeperate <> Value then
    FDateSeperate := Value;
end;

procedure TWNADOCQuery.SetTabName(Value: WideString);
begin
  if FTabName <> Value then
  begin
    FTabName := Value;
    FMyDataSet.Close;
    FMyDataSet.CommandText := FTabName;
  end;
end;

procedure TWNADOCQuery.SetField(Value: TStrings);
begin
  if FField.Text <> Value.Text then
  begin
    FField.Text := Value.Text;

  end;
end;

function TWNADOCQuery.GetFieldType(FieldName: string): Integer;
begin
  if FMyDataSet.CommandText <> '' then
  begin

    FMyDataSet.Open;
    try
      case FMyDataSet.FieldByName(FieldName).DataType of
        ftString, ftMemo, ftFmtMemo, ftFixedChar, ftWideString:
          begin
            Result := 1; //字符型 1
          end;
        ftSmallint, ftInteger, ftWord,
          ftAutoInc, ftLargeInt, ftArray:
          begin
            Result := 2; //整型2
          end;
        ftFloat, ftCurrency, ftBCD:
          begin
            Result := 3; //浮点型(含货币型)3
          end;
        ftDate, ftDateTime:
          begin
            Result := 4; //日期时间型4
          end;
      else
        begin
          Result := 0; //其他未知
        end;

      end;
    except
      showmessage(Format('字段%s不存在!', [FieldName]));
    end;
  end
  else
  begin
    showmessage('表不能为空!');

  end;
end;

function TWNADOCQuery.Execute(CanSelect: Boolean): Boolean;
var
  i: Integer;
  TmpName: string;
  IsPos: Integer;
begin
  SetLength(FFieldInf, (FField.Count));
  for i := 0 to (FField.Count - 1) do
  begin
    TmpName := FField[i];
    IsPos := pos('=', TmpName);
    if IsPos <> 0 then
    begin
      FFieldInf[i].FieldShowName := copy(TmpName, 1, (IsPos - 1));
      FFieldInf[i].FieldName := copy(TmpName, (IsPos + 1), Length(TmpName));
    end
    else
    begin
      FFieldInf[i].FieldShowName := TmpName;
      FFieldInf[i].FieldName := TmpName;
    end;
    FFieldInf[i].FieldType := Self.GetFieldType(FFieldInf[i].FieldName);
    if CanSelect then
      FFieldInf[i].FieldGut := Self.GetFileGut(FFieldInf[i].FieldName);
  end;
  Form_WNADOQDlg := TForm_WNADOQDlg.Create(Self);
  Form_WNADOQDlg.Open(FFieldInf);
  Form_WNADOQDlg.date_seperate := FDateSeperate;
  Form_WNADOQDlg.CanSelect := CanSelect;
  Form_WNADOQDlg.Font.Size := FQryFormFontSize;  //* add by pely 20020325
  Form_WNADOQDlg.Caption := FQryFormCaption;     //* add by pely 20020325
  Form_WNADOQDlg.ShowModal;
  Result := Form_WNADOQDlg.ISOK;
  QUeryTerm := Form_WNADOQDlg.QueryStr;
  Form_WNADOQDlg.Free;
end;

procedure TWNADOCQuery.SetConnectionString(Value: WideString);
begin
  if FMyConnectionString <> Value then
  begin
    FMyConnectionString := Value;
    FMyConnection.Close;
    FMyConnection.ConnectionString := FMyConnectionString;
  end;
end;

constructor TWNADOCQuery.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FField := TStringList.Create;
  FMyConnection := TADOConnection.Create(Self);
  FMyQuery := TADOQuery.Create(Self);
  FMyQuery.Connection := FMyConnection;
  FAutoLogin := False;
  FMyConnection.LoginPrompt := not FAutoLogin;
  FMyDataSet := TADODataSet.Create(Self);
  FMyDataSet.Connection := FMyConnection;
  FMyDataSet.CommandType := cmdTable;
  FDateSeperate := #39;
  FQryFormCaption :='查询';  //* add by pely 20020325
  FQryFormFontSize :=12;     //* add by pely 20020325
end;

destructor TWNADOCQuery.Destroy;

begin

  FMyQuery.Free;
  FMyDataSet.Free;
  FMyConnection.Free;
  FField.Free;
  inherited Destroy;
end;

procedure Register;
begin
  RegisterComponents('WRCtrl', [TWNADOCQuery]);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -