📄 dm.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 + -