亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qexport4dbf.pas

?? delphi中把數據輸出為html excel等形式的控件
?? PAS
字號:
unit QExport4DBF;

{$I QExport4VerCtrl.inc}

interface

uses QExport4, Classes, SysUtils, QExport4IniFiles;

const
  dBaseIII = $03;
  dBaseIIIMemo = $83;
  dBaseIVMemo = $8B;
  dBaseIVSQL = $63;
  FoxPro = $05;
  FoxProMemo = $F5;

  dftString  = 'C';  // char (symbol(s))
  dftBoolean = 'L';  // boolean
  dftNumber  = 'N';  // number
  dftDate    = 'D';  // date
  dftMemo    = 'M';  // memo
  dftFloat   = 'F';  // float -- not in DBaseIII

  MAX_FIELD_NAME_LEN = 10;

type

  TFieldName = array[1..MAX_FIELD_NAME_LEN] of AnsiChar;

  TDBFHeader = packed record { *** First record ***  L=32 }
   {+0} DBType,
   {+1} Year,
   {+2} Month,
   {+3} Day: Byte;
   {+4} RecCount: LongInt;
   {+8} HeaderSize: Word;
   {+10} RecordSize: Longint;
   {+14} FDelayTrans: Byte;
   {+15} Reserve2: array[1..13] of Byte;
   {+28} FlagMDX: Byte;
   {+29} Reserve3: array[1..3] of Byte;
  end;

  PDBFFieldDescriptor = ^TDBFFieldDescriptor;
  TDBFFieldDescriptor = packed record { *** Field Descriptor *** L= 32 }
    {+0}  FieldName: TFieldName;
(*dee    {+10} FieldEnd: Char;
    {+11} FieldType: Char;
*)
    {+10} FieldEnd: AnsiChar;
    {+11} FieldType: AnsiChar;
    {+12} FieldDisp: LongInt;
    {+16} FieldLen,
    {+17} FieldDec: Byte;
    {+18} A1: array[1..13] of Byte;
    {+31} FlagTagMDX: Byte;
  end;

  //TMemoType = (mtNone, mtDBT, mtFPT);
  TQExport4DBF = class;

  TQDBFWriter = class(TQExportWriter)
  private
    DBFHeader: TDBFHeader;
    DList: TList;
    {$IFDEF QE_UNICODE}
    FExportCharsetType: TQExportCharsetType;
    {$ENDIF}
    MemoStream: TFileStream;
    MemoRecord: PByteArray;
    NextMemoRecord: integer;

    function GetDBFExport: TQExport4DBF;
  protected
    property DBFExport: TQExport4DBF read GetDBFExport;
  public
    constructor Create(AOwner: TQExport4; AStream: TStream); override;
    destructor Destroy; override;
    procedure AddFieldDef(Descriptor: PDBFFieldDescriptor);
    procedure CreateDBF;
    procedure DestroyDBF;
{$IFDEF VCL12}
    procedure WriteData(Num: integer; const AData: string);
{$ELSE}
    procedure WriteData(Num: integer; const Data: String);
{$ENDIF}
    function WriteMemo(Index: integer): integer;
    {$IFDEF QE_UNICODE}
    property ExportCharsetType: TQExportCharsetType read FExportCharsetType write
        FExportCharsetType;
    {$ENDIF}
  end;

  TQExport4DBF = class(TQExport4Text)
  private
    FColumnsPrecision: TStrings;
    FOldDecimalSeparator: char;
    FDefaultFloatSize: integer;
    FDefaultFloatDecimal: integer;
    FExportTimeAsStr: Boolean;
    function GetMemoFileName: string;
    function GetNullValue: string;
    procedure SetNullValue(const Value: string);
    procedure SetColumnsPrecision(Value: TStrings);
    procedure GetColumnSizeDecimal(const ColumnName: string; var Size,
      Decimal: integer);
  protected
    function GetWriterClass: TQExportWriterClass; override;
    function GetWriter: TQDBFWriter;

    procedure BeginExport; override;
    procedure EndExport; override;
    procedure BeforeExport; override;
    procedure AfterExport; override;

    procedure WriteDataRow; override;
    procedure SaveProperties(IniFile: TQIniFile); override;
    procedure LoadProperties(IniFile: TQIniFile); override;

    property MemoFileName: string read GetMemoFileName;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property Captions;
    property ColumnsLength;
    property ColumnsPrecision: TStrings read FColumnsPrecision
      write SetColumnsPrecision;
    property DefaultFloatSize: integer read FDefaultFloatSize
      write FDefaultFloatSize default 15;
    property DefaultFloatDecimal: integer read FDefaultFloatDecimal
      write FDefaultFloatDecimal default 4;
    property ExportTimeAsStr: Boolean read FExportTimeAsStr write FExportTimeAsStr;
    property NullValue: string read GetNullValue write SetNullValue;
  end;

  TShortFieldNameGenerator = class
  private
    FFieldNames: TStringList;
    function GetNumberString(const AValue: Integer): string;
    function IncNumberString(const AValue: string): string;
  public
    constructor Create;
    destructor Destroy; override;
    function GetShortFieldName(AFieldName: string): string;
  end;

implementation

uses QExport4Common, DB, QExport4Types{$IFDEF VCL9}, Windows{$ENDIF}, Math;

{ TQDBFWriter }

procedure TQDBFWriter.AddFieldDef(Descriptor: PDBFFieldDescriptor);
begin
  DList.Add(Descriptor);
end;

constructor TQDBFWriter.Create(AOwner: TQExport4; AStream: TStream);
begin
  inherited;
  DList := TList.Create;
end;

procedure TQDBFWriter.CreateDBF;
var
  B: Byte;
  I: Integer;
  Y, M, D : Word;
begin
  FillChar(DBFHeader, 32, #0);
  DecodeDate(Date, Y, M, D);
  with DBFHeader do
  begin
    if (Owner as TQExport4DBF).Columns.ContainsBLOB and
       (Stream is TFileStream) then
    begin
      DBType := dBaseIIIMemo;
      MemoStream := TFileStream.Create((Owner as TQExport4DBF).MemoFileName, fmCreate);
      GetMem(MemoRecord, 512);
      FillChar(MemoRecord^, 512, #0);
      MemoStream.WriteBuffer(MemoRecord^, 512);
      NextMemoRecord := 1;
    end
    else DBType := dBaseIII;

    Year := Y - 2000;
    Month := M;
    Day := D;
    HeaderSize := (DList.Count + 1) * 32 + 1;
    RecordSize := 1;
    for I := 0 to DList.Count - 1 do
      RecordSize := RecordSize + PDBFFieldDescriptor(DList[I])^.FieldLen;
  end;
  Stream.WriteBuffer(DBFHeader, SizeOf(DBFHeader));
  for I := 0 to DList.Count - 1 do
    Stream.WriteBuffer(PDBFFieldDescriptor(DList[I])^, 32);
  B := $0D; // End of DBF Header
  Stream.WriteBuffer(B, SizeOf(B));
end;

destructor TQDBFWriter.Destroy;
var
  i: Integer;
begin
  for i := 0 to DList.Count - 1 do
    if Assigned(DList.Items[i]) then
      Dispose(PDBFFieldDescriptor(DList.Items[i]));
  DList.Free;
  inherited;
end;

procedure TQDBFWriter.DestroyDBF;
begin
  if Assigned(MemoStream) then begin
    MemoStream.Seek(0, soFromBeginning);
    MemoStream.Write(NextMemoRecord, SizeOf(Integer));
    MemoStream.Free;
  end;
end;

function TQDBFWriter.GetDBFExport: TQExport4DBF;
begin
  Result := Owner as TQExport4DBF;
end;

{$IFDEF VCL12}
procedure TQDBFWriter.WriteData(Num: integer; const AData: string);
{$else}
procedure TQDBFWriter.WriteData(Num: integer; const Data: string);
{$endif}

  {$IFDEF QE_UNICODE}
  procedure WriteUsingCharset(WS: WideString);
  var
    s: AnsiString;
  begin
    if not Assigned(Owner) then
      Exit;
    if WS = EmptyStr then
      Exit;

    case ExportCharsetType of
      ectLocalANSI, ectLocalOEM, ectLocalMAC:
        begin
          s := WideStringToString(WS, Integer(ExportCharsetType));
          if length(s) > length(ws) then
            SetLength(s, Length(ws));
          Stream.WriteBuffer(s[1], Length(s));
        end;
      ectUTF8:
        begin
          s := UTF8Encode(WS);
          if length(s) > length(ws) then
            SetLength(s, Length(ws));
          Stream.WriteBuffer(s[1], Length(s));
        end;
    end;
  end;
  {$ENDIF}

const
  NewRecordMarker: Byte = $20;
  STrue  = 'TRUE';
  SFalse = 'FALSE';
  SDBFTrue  = 'T';
  SDBFFalse = 'F';
var
  CurPos, RCount: integer;
{$IFDEF VCL12}
  Data: AnsiString;
{$ENDIF}
  _Data: AnsiString;
  DD: TDateTime;
begin
{$IFDEF VCL12}
  Data := AnsiString(AData);
{$ENDIF}
  SetLength(_Data, PDBFFieldDescriptor(DList[Num])^.FieldLen);
  FillChar(_Data[1], Length(_Data), ' ');
  if string(Data) <> EmptyStr then begin
    case PDBFFieldDescriptor(DList[Num])^.FieldType of
      dftString:
          if Length(Data) > 254 // !!!
            then Move(Data[1], _Data[1], 254) // !!!
            else Move(Data[1], _Data[1], Length(Data));
      dftNumber:
         begin
           Move(Data[1], _Data[Max(Length(_Data) - Length(Data) + 1, 1)], Length(Data));
         end;
      dftDate: begin
          DD := StrToDateTime(string(Data));
          _Data := AnsiString(FormatDateTime('yyyymmdd', DD));
         if string(_Data) = EmptyStr then begin
           SetLength(_Data, 8);
           FillChar(_Data[1], 8, ' ');
         end;
      end;
      dftBoolean: begin
        if Pos(STrue, UpperCase(string(Data))) > 0 then
          _Data[1] := SDBFTrue
        else
        if Pos(SFalse, UpperCase(string(Data))) > 0 then
          _Data[1] := SDBFFalse
        else
          _Data[1] := ' ';
      end;
    end;
  end;
  if Num = 0 then begin
      Stream.WriteBuffer(NewRecordMarker, 1); // it's new record
      // update record count
      CurPos := Stream.Position; // save current position
      Stream.Position := 4;
      Stream.ReadBuffer(RCount, 4);
      Inc(RCount);
      Stream.Position := 4;
      Stream.WriteBuffer(RCount, 4);
      Stream.Position := CurPos; // restore current position
  end;
  {$IFDEF QE_UNICODE}
  WriteUsingCharset(string(_Data)); //alex c - 桉鐿朦珞弳

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电视剧在线看免费| 国产欧美一区二区精品性| 成人免费视频app| 国产91露脸合集magnet| 免费成人你懂的| 国产91丝袜在线18| 99久久夜色精品国产网站| 91麻豆精品秘密| 欧美日本不卡视频| 国产亚洲一区二区三区四区| 欧美激情在线观看视频免费| 亚洲欧美日韩国产一区二区三区 | 亚洲精品一二三| 肉丝袜脚交视频一区二区| 国产综合色产在线精品| 91在线观看视频| 日韩免费高清av| 亚洲免费成人av| 懂色av一区二区三区免费观看| 在线看国产日韩| 久久久久久97三级| 婷婷六月综合亚洲| 99精品欧美一区二区三区小说| 欧美一级精品大片| 一区二区三区在线免费播放 | 久久蜜桃一区二区| 一区二区三区在线免费观看| 国产综合色精品一区二区三区| 欧美无砖砖区免费| 成人欧美一区二区三区白人| 久久精品理论片| 精品少妇一区二区三区在线视频| 一区二区三区蜜桃| 91在线视频免费91| 久久久国产精品麻豆| 国产精品1区2区3区在线观看| 在线播放日韩导航| 亚洲午夜日本在线观看| 99国产精品国产精品久久| 国产精品国产成人国产三级| 成人一区二区视频| 国产婷婷一区二区| 成人黄色电影在线| 亚洲欧美日韩一区二区| 色老头久久综合| 日本不卡高清视频| 日韩你懂的在线观看| 国产成a人亚洲| 国产精品毛片a∨一区二区三区| 99国产精品久久久久久久久久 | 欧美日高清视频| 精品亚洲国产成人av制服丝袜| 中文字幕亚洲成人| 暴力调教一区二区三区| 蜜桃视频免费观看一区| 国产亚洲女人久久久久毛片| 亚洲激情成人在线| 国产河南妇女毛片精品久久久| 日韩美一区二区三区| 亚洲va韩国va欧美va精品| 99国产精品99久久久久久| 国产精品卡一卡二卡三| 精品一区二区免费看| 成人激情综合网站| 欧美自拍偷拍一区| 日本一区二区三级电影在线观看 | 精品国产乱码久久久久久浪潮| 欧美韩日一区二区三区四区| 狠狠v欧美v日韩v亚洲ⅴ| 精品国产青草久久久久福利| 蜜臀av一区二区在线观看| 26uuu精品一区二区三区四区在线| 亚洲国产精品自拍| 成人激情小说乱人伦| 亚洲电影一级黄| 亚洲欧洲99久久| 欧美一级国产精品| 粉嫩aⅴ一区二区三区四区| 国产精品二区一区二区aⅴ污介绍| 91小宝寻花一区二区三区| 狠狠色综合日日| 国产欧美日韩综合精品一区二区| 成人激情开心网| 成人午夜激情片| 韩国午夜理伦三级不卡影院| 日韩国产在线一| 天天操天天综合网| 亚洲午夜免费电影| 亚洲成人你懂的| 日本vs亚洲vs韩国一区三区二区| 视频在线观看一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国产精品―色哟哟| 久久久久97国产精华液好用吗| 中文字幕一区av| 亚洲国产精品视频| 不卡的av电影在线观看| 2023国产精品自拍| 无吗不卡中文字幕| 97久久超碰国产精品电影| 极品销魂美女一区二区三区| 国产成人午夜片在线观看高清观看| 成人永久aaa| 欧美日韩一区二区三区四区五区 | 欧美一区二区日韩| 精品电影一区二区| 亚洲卡通动漫在线| 国产aⅴ精品一区二区三区色成熟| 99re8在线精品视频免费播放| 在线成人av网站| 中文字幕一区日韩精品欧美| 蜜桃91丨九色丨蝌蚪91桃色| 91免费看视频| 国产精品国产自产拍高清av| 全国精品久久少妇| 欧美日韩一区久久| 亚洲免费观看高清完整版在线观看 | 亚洲精品成人a在线观看| 九九**精品视频免费播放| 在线观看国产精品网站| 欧美激情中文字幕| 国产一区二区在线电影| 欧美一区二区黄色| 亚洲妇女屁股眼交7| 91丨porny丨户外露出| 国产日产欧美一区| 国内精品伊人久久久久av影院| 777色狠狠一区二区三区| 日韩一级片网站| 三级不卡在线观看| 欧美高清激情brazzers| 亚洲电影视频在线| 色综合夜色一区| 五月综合激情婷婷六月色窝| 色94色欧美sute亚洲线路一久 | 国产91在线|亚洲| 国产精品麻豆久久久| 成人av在线看| 一区二区三区中文字幕电影| 在线免费一区三区| 日韩va亚洲va欧美va久久| 日韩无一区二区| 国产成人免费视频精品含羞草妖精| 国产午夜亚洲精品羞羞网站| proumb性欧美在线观看| 一区二区高清视频在线观看| 欧美日韩精品二区第二页| 日本亚洲免费观看| 国产精品水嫩水嫩| 欧美日本一区二区三区| 国产乱码一区二区三区| 亚洲九九爱视频| 国产欧美一区在线| 欧美亚洲日本国产| 国产精品一二三区在线| 亚洲成av人片在线观看无码| 欧美tk丨vk视频| 欧美日韩亚洲综合一区| 成人午夜av在线| 最新日韩在线视频| 久久精品在线观看| 欧美一区二区黄| 色哟哟日韩精品| 成人三级在线视频| 国产一区二区三区观看| 久久精品久久99精品久久| 亚洲影院久久精品| 亚洲综合自拍偷拍| 亚洲综合在线电影| 欧美国产成人在线| 久久综合视频网| 日韩视频免费观看高清完整版在线观看 | 久久婷婷成人综合色| 精品欧美一区二区久久| 欧美丰满少妇xxxbbb| 51午夜精品国产| 欧美高清www午色夜在线视频| 欧美日韩国产美| 欧美v国产在线一区二区三区| 欧美一区二区不卡视频| 久久夜色精品一区| 久久久久亚洲蜜桃| 日韩毛片视频在线看| 一区二区三区国产精品| 亚洲福利国产精品| 精品一区二区在线播放| 国产成人av资源| 91无套直看片红桃| 制服丝袜亚洲播放| 欧美精品一区二| 一区二区在线看| 久久99精品视频| 色综合久久久久综合体| 欧美优质美女网站| 欧美成人艳星乳罩| 亚洲天堂免费看| 久久97超碰国产精品超碰| 丁香网亚洲国际| 91精品国产综合久久香蕉麻豆| 久久奇米777|