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

📄 dm.pas

📁 大富翁离线浏览器源码
💻 PAS
字号:
unit dm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, ADODB, AdoConEd;

type

  TQuerInfo = Record
        Title:string;
        ID:String;
        Userfrom:string;
        RegTime,Time:string;
        Points:String;
        Status:string;
        RoomName:string;
        GetTimes:String;
        ReplyTimes:String;
        Content:string;
  end;

  TDM1 = class(TDataModule)
    ADOConnection1: TADOConnection;
    DSLocal: TADODataSet;
    DataSource1: TDataSource;
    DSQues: TADODataSet;
    procedure DataModuleCreate(Sender: TObject);
    procedure DataModuleDestroy(Sender: TObject);
  private
    { Private declarations }
    procedure DSLocalQuery(ssql:string);
//    procedure GetQuesContent(QuesIndex: integer; var QuesInfo: TQuerInfo);
  public
    { Public declarations }
    sltRooms:TStringList;

    function GetRoomName(index:integer):string;
    function GetRoomID(RoomName:string):integer;
    function SetConnnection:boolean;
    function GetQuesCount:integer;

    procedure InitDB(strInit:string);
    procedure GetRoomRecord(RoomIndex:integer);
    procedure GetQuesContent(QuesIndex:integer;var QuesInfo:TQuerInfo);
    procedure Search(strSearch:string);
  end;

var
  DM1: TDM1;

implementation

uses htmlGen;

{$R *.DFM}

{ TDM1 }


procedure TDM1.DataModuleCreate(Sender: TObject);
begin
        sltRooms := TStringList.Create;
end;


procedure TDM1.DataModuleDestroy(Sender: TObject);
begin
        ADOConnection1.Close;
        sltRooms.free;
end;

procedure TDM1.DSLocalQuery(ssql: string);
begin
        with DSLocal do
        begin
                if Active then close;
                CommandText := ssql;
                open;
        end;

end;


procedure TDM1.GetQuesContent(QuesIndex: integer;
  var QuesInfo: TQuerInfo);
var
        ssql:string;
        htmltmp:ThtmlView;
begin

     ssql:='select * from letters where ( id = ' + inttostr(QuesIndex) + ' ) or ( parent = ' + inttostr(QuesIndex) + ' ) order by regdatetime';
     with DSQues do
     begin
        if Active then close;
        CommandText := ssql;
        open;
     end;

     with QuesInfo,DSQues do
     begin
        Title := fieldbyname('subject').AsString;
        ID := fieldbyname('ID').AsString;
        Userfrom := fieldbyname('Userfrom').AsString;
        RegTime := fieldbyname('RegDateTime').AsString;
        Time := fieldbyname('DateTime').AsString;
        Points := fieldbyname('Points').AsString;
        RoomName := GetRoomName(fieldbyname('Roomid').asinteger);
        GetTimes := fieldbyname('GetTimes').AsString;
        ReplyTimes := fieldbyname('ReplyTimes').AsString;
         case FieldByName('Status').AsInteger of
         0: Status := '待答';
         1: Status := '讨论中';
         2: Status := '已答';
         else Status := '';
         end;
     end;

     htmltmp := thtmlview.create;
     with htmltmp do
     begin
         writeHeader(QuesInfo.Title);
         addinfo(QuesInfo.Title,'',QuesInfo.Points);
         addQues(QuesInfo.ID, QuesInfo.Userfrom, DSQues.fieldbyname('content').AsString, QuesInfo.RegTime);
     end;

     DSQues.next;

     with DSQues do
     while not Eof do
     begin
       htmltmp.add(fieldbyname('id').AsString,fieldbyname('UserFrom').AsString,fieldbyname('content').AsString,formatdatetime('yyyy-mm-dd hh:nn:ss',fieldbyname('datetime').AsDateTime));
       Next;
     end;

//     DSQues.First;
     DSQues.Close;
     QuesInfo.Content := htmltmp.GetContent;

end;

procedure TDM1.GetRoomRecord(RoomIndex: integer);
var
   ssql:string;
begin
     ssql:='select id,subject,userfrom,points,regdatetime,replytimes,status from letters where parent = 0';
     if RoomIndex <> -1 then
     begin
       ssql:= ssql + ' and roomid = ' + IntToStr(RoomIndex);
     end;

     //去掉这行注释,得到的记录将按从新到旧的降序排列
     ssql := ssql + ' order by regDateTime DESC';

     DSLocalQuery(ssql);

//     这一行将极大地降低速度
//     sb1.Panels[1].Text:= '记录数:' + inttostr(ADODataSet1.recordcount) ;

end;

function TDM1.GetRoomName(index: integer): string;
var
        i:integer;
begin
        Result := '';
        for i := 0 to sltRooms.Count - 1 do
        begin
                if strtoint(sltRooms.Values[sltRooms.Names[i]]) = index then
                begin
                        Result := sltRooms.Names[i];
                        Break;
                end;
        end;

end;

procedure TDM1.InitDB(strInit: string);
begin
        with ADOConnection1 do
        begin
                if Connected then Connected := false;
                if strInit <> '' then ConnectionString := strInit;
                Open;
        end;

        DataSource1.DataSet := nil;
        if DSLocal.Active then DSLocal.Close;
        DSLocal.CommandText := 'select id,room from rooms';
        DSLocal.Open;
        sltRooms.Clear;
        while not DSLocal.Eof do
        begin
                sltRooms.Add(DSLocal.fieldbyname('room').AsString + '=' + DSLocal.fieldbyname('id').AsString);
                DSLocal.Next;
        end;
        DSLocal.First;
        DSLocal.Close;
        DataSource1.DataSet := DSLocal;
end;

function TDM1.GetRoomID(RoomName: string): integer;
var
        Roomid:string;
begin
        Roomid := sltRooms.Values[RoomName];
        if Roomid = '' then Roomid := '-1'; 
        Result := strtoint(Roomid);
end;

function TDM1.SetConnnection:boolean;
begin
        Result := false ;
        ADOConnection1.Close;
        if EditConnectionString(ADOConnection1) then
        begin
                InitDB('');
                Result := true;
        end;

end;

procedure TDM1.Search(strSearch: string);
begin
        DSLocalQuery(strSearch);
end;

function TDM1.GetQuesCount: integer;
begin
        Result := DSLocal.RecordCount;
//        Result := 0;
end;

end.

⌨️ 快捷键说明

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