procedure Treportform.Button1Click(Sender: TObject); var count, ret0: longint; arow, col, row, lrow, rrow, lrrow, i: integer; msg_src: string; flag: real; Ecount, Esuccess, EError: longint; isexist: boolean; str, year, month, day: string; begin str := datetostr(date1.date); year := copy(str, 0, 4); str := copy(str, 6, length(str) - 4); if pos('-', str) = 2 then month := '0' + copy(str, 1, 1) else if pos('-', str) > 2 then month := copy(str, 1, 2); day := copy(str, pos('-', str) + 1, length(str) - pos('-', str)); row := 2; showmessage('snake'); panel2.Caption := '正在执行1号查询!'; query.Close; query.SQL.Clear; query.SQL.Add('select msg_src,ret,count(*) from bak_mt_' + year + month + ' where day(insert_time)=' + day + ' group by msg_src,ret order by msg_src,ret'); query.Open; panel2.Caption := '正在执行2号查询!'; chatquery.Close; chatquery.SQL.Clear; chatquery.SQL.Add('select msg_src,ret,count(*) from bak_mt_chat_' + year + month + ' where day(insert_time)=' + day + ' group by msg_src,ret order by msg_src,ret'); chatquery.Open; panel2.Caption := '正在执行3号查询!'; tquery.Close; tquery.SQL.Clear; tquery.SQL.Add('select bak_mt_' + year + month + '.msg_src,bak_rpt_200306.rpt_stat,count(*)'); tquery.sql.Add('from bak_mt_' + year + month + ',bak_rpt_' + year + month); tquery.sql.add('where bak_mt_' + year + month + '.msg_id1=bak_rpt_' + year + month + '.rpt_msg_id and bak_mt_' + year + month + '.msg_id2 =bak_rpt_' + year + month + '.rpt_msg_id2 and day (bak_mt_' + year + month + '.insert_time)=' + day + ' and bak_mt_' + year + month + '.msg_id1<>0 and bak_mt_' + year + month + '.ret=0'); tquery.SQL.Add('group by bak_rpt_' + year + month + '.rpt_stat,bak_mt_' + year + month + '.msg_src'); tquery.SQL.Add('order by msg_src,rpt_stat'); tquery.Open; panel2.Caption := '正在执行4号查询!'; chattquery.Close; chattquery.SQL.Clear; chattquery.SQL.Add('select bak_mt_chat_' + year + month + '.msg_src,bak_rpt_' + year + month + '.rpt_stat,count(*)'); chattquery.sql.Add('from bak_mt_chat_' + year + month + ',bak_rpt_' + year + month); chattquery.sql.add('where bak_mt_chat_' + year + month + '.msg_id1=bak_rpt_' + year + month + '.rpt_msg_id and bak_mt_chat_' + year + month + '.msg_id2 =bak_rpt_' + year + month + '.rpt_msg_id2 and day (bak_mt_chat_' + year + month + '.insert_time)=' + day + ' and bak_mt_chat_' + year + month + '.msg_id1<>0 and bak_mt_chat_' + year + month + '.ret=0'); chattquery.SQL.Add('group by bak_rpt_' + year + month + '.rpt_stat,bak_mt_chat_' + year + month + '.msg_src'); chattquery.SQL.Add('order by msg_src,rpt_stat'); chattquery.Open; panel2.Caption := '正在生成报表!'; report.SetActiveCell(1, 1); report.Text := '数据源'; report.TextRC[1, 8] := '发送失败' + #13 + '错误类型'; report.TextRC[1, 9] := '条数'; report.SetActiveCell(1, 2); report.Text := '发送总条数'; report.SetActiveCell(1, 3); report.Text := '成功发送率'; report.SetActiveCell(1, 4); report.Text := '失败发送率'; report.SetActiveCell(1, 10); report.Text := '状态报告' + #13 + '失败类型'; report.SetActiveCell(1, 11); report.Text := '条数'; report.SetActiveCell(1, 5); report.Text := '状态报告' + #13 + '回收率'; report.SetActiveCell(1, 6); report.text := '状态报告' + #13 + '成功率'; report.SetActiveCell(1, 7); report.Text := '状态报告' + #13 + '失败率'; query.first; tquery.First; chattquery.First; chatquery.First;
while (not query.Eof) or (not chatquery.Eof) do begin ret0 := 0; count := 0; ecount := 0; esuccess := 0; flag := 0; eerror := 0; rrow := row; arow := row; lrrow := rrow; if query.FieldByName('msg_src').Value = chatquery.FieldByName('msg_src').Value then begin msg_src := query.FieldByName('msg_src').asstring; while (msg_src = query.FieldByName('msg_src').asstring) and (not query.Eof) do begin count := count + query.Fields[2].Value; if query.FieldByName('ret').Value = 0 then ret0 := ret0 + query.Fields[2].value else begin report.TextRC[rrow, 8] := inttostr(query.Fields[1].Value); report.TextRC[rrow, 9] := inttostr(query.Fields[2].Value); rrow := rrow + 1; end; query.Next; end; while (msg_src = chatquery.FieldByName('msg_src').asstring) and (not chatquery.Eof) do begin count := count + chatquery.fields[2].value; if chatquery.FieldByName('ret').Value = 0 then ret0 := ret0 + chatquery.Fields[2].Value else for i := lrrow to rrow - 1 do begin if chatquery.Fields[1].AsString = report.Textrc[i, 10] then begin report.TextRC[i, 11] := inttostr(strtoint(report.textrc[i, 11]) + chatquery.Fields[2].asinteger); break; end else if i = row - 1 then begin report.textrc[rrow, 10] := chatquery.Fields[1].AsString; report.textrc[rrow, 11] := inttostr(chatquery.Fields[2].value); rrow := rrow + 1; break; end; end; chatquery.Next; end; report.SetActiveCell(row, 1); report.Text := msg_src; report.SetActiveCell(row, 2); report.Text := inttostr(count); flag := ret0 / count; if flag < 1 then begin flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5)); flag := flag / 1000; end else if flag = 1 then flag := flag * 100; report.SetActiveCell(row, 3); report.Text := floattostr(flag) + '%'; report.SetActiveCell(row, 4); report.Text := floattostr(100 - flag) + '%'; lrow := row; while (Tquery.Fields[0].AsString = msg_src) and (not Tquery.Eof) do begin Ecount := ecount + Tquery.Fields[2].Value; if (Tquery.Fields[1].AsString = 'DELIVRD') or (Tquery.Fields[1].AsString = 'E0') then Esuccess := Esuccess + tquery.Fields[2].Value else begin report.SetActiveCell(row, 10); report.Text := tquery.Fields[1].AsString; report.SetActiveCell(row, 11); report.Text := inttostr(tquery.Fields[2].Value); row := row + 1; end; tquery.Next; end; while (chatTquery.Fields[0].AsString = msg_src) and (not chatTquery.Eof) do begin Ecount := ecount + chatTquery.Fields[2].Value; if (chatTquery.Fields[1].AsString = 'DELIVRD') or (chatTquery.Fields[1].AsString = 'E0') then Esuccess := Esuccess + chattquery.Fields[2].Value else for i := lrow to row - 1 do begin if chatTquery.Fields[1].AsString = report.Textrc[i, 10] then begin report.TextRC[i, 11] := inttostr(strtoint(report.textrc[i, 11]) + chatTquery.Fields[2].asinteger); break; end else if i = row - 1 then begin report.textrc[row, 10] := chatTquery.Fields[1].AsString; report.textrc[row, 11] := inttostr(chatTquery.Fields[2].value); row := row + 1; break; end; end;
chattquery.Next; end; flag := Ecount / ret0; if flag < 1 then begin flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5)); flag := flag / 1000; end else if flag = 1 then flag := flag * 100; report.SetActiveCell(arow, 5); report.Text := floattostr(flag) + '%'; flag := Esuccess / ecount; if flag < 1 then begin flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5)); flag := flag / 1000; end else if flag = 1 then flag := flag * 100; report.TextRC[arow, 6] := floattostr(flag) + '%'; report.SetActiveCell(arow, 7); report.Text := floattostr(100 - flag) + '%'; end; end; panel2.Caption := 'OK!'; end; procedure Treportform.Button4Click(Sender: TObject); begin query.Close; chatquery.Close; tquery.close; chatquery.Close; application.Terminate; end;procedure Treportform.Button2Click(Sender: TObject); var filetype: smallint; begin saveasexcel.Execute; filetype := F1FileExcel5; if saveasexcel.FileName <> '' then try report.Write(saveasexcel.filename + '.xls', filetype); except application.messagebox(pchar('保存到文件' + saveasexcel.filename + '.xls' + '不成功!'), '提示!', 0); end; filename := saveasexcel.filename + '.xls'; end;procedure Treportform.Button3Click(Sender: TObject); var address: integer; i: integer; begin if memo1.Text = '' then begin showmessage('没有地址!'); exit; end; if filename = '' then begin showmessage('你还没有保存文件或没有可以发送的文件!'); end; panel2.Caption := '正在连接'; smtp.ClearParams := true; address := pos('@', email.Text); smtp.Host := copy(email.Text, address + 1, length(email.Text) - address); smtp.UserID := username.Text; smtp.TimeOut := 20000; try smtp.Connect; except panel2.Caption := '连接失败'; exit; end; for i := 0 to memo1.Lines.Count - 1 do begin panel2.Caption := 'To' + memo1.Lines.Text; smtp.PostMessage.FromAddress := Email.Text; smtp.PostMessage.FromName := username.Text; smtp.PostMessage.ToAddress.Add(memo1.LineS.Strings[i]); smtp.PostMessage.toblindcarboncopy.add(''); smtp.PostMessage.tocarboncopy.add(''); smtp.PostMessage.Subject := datetostr(date1.Date); smtp.PostMessage.Attachments.Add(filename); smtp.SendMail; end; end;procedure Treportform.Button5Click(Sender: TObject); begin memo1.Lines.SaveToFile('c:\Email.sys'); filename := ''; end;procedure Treportform.FormShow(Sender: TObject); begin adoconnection1.Connected := true; try memo1.Lines.LoadFromFile('c:\Email.sys'); except end; end;procedure Treportform.smtpDisconnect(Sender: TObject); begin panel2.Caption := '已经连接' end;procedure Treportform.smtpSuccess(Sender: TObject); begin panel2.Caption := '已经发送完毕' end;procedure Treportform.smtpConnect(Sender: TObject); begin panel2.Caption := '已经连接' end;procedure Treportform.smtpFailure(Sender: TObject); begin showmessage('无法发送!'); end;procedure Treportform.ADOConnection1BeforeConnect(Sender: TObject); begin panel2.Caption := '正在连接数据库!'; end;procedure Treportform.ADOConnection1AfterConnect(Sender: TObject); begin panel2.Caption := '连接成功!'; end;end.我的所有代码 是设置为连接的!
还有ole db
TO 你应该用DCOMConnection来连就没有问题了!
我用的是两层结构
var
count, ret0: longint;
arow, col, row, lrow, rrow, lrrow, i: integer;
msg_src: string;
flag: real;
Ecount, Esuccess, EError: longint;
isexist: boolean;
str, year, month, day: string;
begin
str := datetostr(date1.date);
year := copy(str, 0, 4);
str := copy(str, 6, length(str) - 4);
if pos('-', str) = 2 then
month := '0' + copy(str, 1, 1)
else if pos('-', str) > 2 then
month := copy(str, 1, 2);
day := copy(str, pos('-', str) + 1, length(str) - pos('-', str)); row := 2;
showmessage('snake');
panel2.Caption := '正在执行1号查询!';
query.Close;
query.SQL.Clear;
query.SQL.Add('select msg_src,ret,count(*) from bak_mt_' + year + month + ' where day(insert_time)=' + day + ' group by msg_src,ret order by msg_src,ret');
query.Open;
panel2.Caption := '正在执行2号查询!'; chatquery.Close;
chatquery.SQL.Clear;
chatquery.SQL.Add('select msg_src,ret,count(*) from bak_mt_chat_' + year + month + ' where day(insert_time)=' + day + ' group by msg_src,ret order by msg_src,ret');
chatquery.Open; panel2.Caption := '正在执行3号查询!';
tquery.Close;
tquery.SQL.Clear;
tquery.SQL.Add('select bak_mt_' + year + month + '.msg_src,bak_rpt_200306.rpt_stat,count(*)');
tquery.sql.Add('from bak_mt_' + year + month + ',bak_rpt_' + year + month);
tquery.sql.add('where bak_mt_' + year + month + '.msg_id1=bak_rpt_' + year + month + '.rpt_msg_id and bak_mt_' + year + month + '.msg_id2 =bak_rpt_' + year + month + '.rpt_msg_id2 and day (bak_mt_' + year + month + '.insert_time)=' + day + ' and bak_mt_' + year + month + '.msg_id1<>0 and bak_mt_' + year + month + '.ret=0');
tquery.SQL.Add('group by bak_rpt_' + year + month + '.rpt_stat,bak_mt_' + year + month + '.msg_src');
tquery.SQL.Add('order by msg_src,rpt_stat');
tquery.Open;
panel2.Caption := '正在执行4号查询!'; chattquery.Close;
chattquery.SQL.Clear;
chattquery.SQL.Add('select bak_mt_chat_' + year + month + '.msg_src,bak_rpt_' + year + month + '.rpt_stat,count(*)');
chattquery.sql.Add('from bak_mt_chat_' + year + month + ',bak_rpt_' + year + month);
chattquery.sql.add('where bak_mt_chat_' + year + month + '.msg_id1=bak_rpt_' + year + month + '.rpt_msg_id and bak_mt_chat_' + year + month + '.msg_id2 =bak_rpt_' + year + month + '.rpt_msg_id2 and day (bak_mt_chat_' + year + month + '.insert_time)=' + day + ' and bak_mt_chat_' + year + month + '.msg_id1<>0 and bak_mt_chat_' + year + month + '.ret=0');
chattquery.SQL.Add('group by bak_rpt_' + year + month + '.rpt_stat,bak_mt_chat_' + year + month + '.msg_src');
chattquery.SQL.Add('order by msg_src,rpt_stat');
chattquery.Open; panel2.Caption := '正在生成报表!';
report.SetActiveCell(1, 1);
report.Text := '数据源';
report.TextRC[1, 8] := '发送失败' + #13 + '错误类型';
report.TextRC[1, 9] := '条数';
report.SetActiveCell(1, 2);
report.Text := '发送总条数';
report.SetActiveCell(1, 3);
report.Text := '成功发送率';
report.SetActiveCell(1, 4);
report.Text := '失败发送率';
report.SetActiveCell(1, 10);
report.Text := '状态报告' + #13 + '失败类型';
report.SetActiveCell(1, 11);
report.Text := '条数';
report.SetActiveCell(1, 5);
report.Text := '状态报告' + #13 + '回收率';
report.SetActiveCell(1, 6);
report.text := '状态报告' + #13 + '成功率';
report.SetActiveCell(1, 7);
report.Text := '状态报告' + #13 + '失败率';
query.first;
tquery.First;
chattquery.First;
chatquery.First;
begin
ret0 := 0;
count := 0;
ecount := 0;
esuccess := 0;
flag := 0;
eerror := 0;
rrow := row;
arow := row;
lrrow := rrow;
if query.FieldByName('msg_src').Value = chatquery.FieldByName('msg_src').Value then
begin
msg_src := query.FieldByName('msg_src').asstring;
while (msg_src = query.FieldByName('msg_src').asstring) and (not query.Eof) do
begin
count := count + query.Fields[2].Value;
if query.FieldByName('ret').Value = 0 then
ret0 := ret0 + query.Fields[2].value
else
begin
report.TextRC[rrow, 8] := inttostr(query.Fields[1].Value);
report.TextRC[rrow, 9] := inttostr(query.Fields[2].Value);
rrow := rrow + 1;
end;
query.Next;
end;
while (msg_src = chatquery.FieldByName('msg_src').asstring) and (not chatquery.Eof) do
begin
count := count + chatquery.fields[2].value;
if chatquery.FieldByName('ret').Value = 0 then
ret0 := ret0 + chatquery.Fields[2].Value
else
for i := lrrow to rrow - 1 do
begin
if chatquery.Fields[1].AsString = report.Textrc[i, 10] then
begin
report.TextRC[i, 11] := inttostr(strtoint(report.textrc[i, 11]) + chatquery.Fields[2].asinteger);
break;
end
else
if i = row - 1 then
begin
report.textrc[rrow, 10] := chatquery.Fields[1].AsString;
report.textrc[rrow, 11] := inttostr(chatquery.Fields[2].value);
rrow := rrow + 1;
break;
end;
end;
chatquery.Next;
end;
report.SetActiveCell(row, 1);
report.Text := msg_src; report.SetActiveCell(row, 2);
report.Text := inttostr(count); flag := ret0 / count;
if flag < 1 then
begin
flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5));
flag := flag / 1000;
end
else if flag = 1 then
flag := flag * 100;
report.SetActiveCell(row, 3);
report.Text := floattostr(flag) + '%'; report.SetActiveCell(row, 4);
report.Text := floattostr(100 - flag) + '%';
lrow := row;
while (Tquery.Fields[0].AsString = msg_src) and (not Tquery.Eof) do
begin
Ecount := ecount + Tquery.Fields[2].Value;
if (Tquery.Fields[1].AsString = 'DELIVRD') or (Tquery.Fields[1].AsString = 'E0') then
Esuccess := Esuccess + tquery.Fields[2].Value
else
begin
report.SetActiveCell(row, 10);
report.Text := tquery.Fields[1].AsString; report.SetActiveCell(row, 11);
report.Text := inttostr(tquery.Fields[2].Value);
row := row + 1;
end;
tquery.Next;
end;
while (chatTquery.Fields[0].AsString = msg_src) and (not chatTquery.Eof) do
begin
Ecount := ecount + chatTquery.Fields[2].Value;
if (chatTquery.Fields[1].AsString = 'DELIVRD') or (chatTquery.Fields[1].AsString = 'E0') then
Esuccess := Esuccess + chattquery.Fields[2].Value
else
for i := lrow to row - 1 do
begin
if chatTquery.Fields[1].AsString = report.Textrc[i, 10] then
begin
report.TextRC[i, 11] := inttostr(strtoint(report.textrc[i, 11]) + chatTquery.Fields[2].asinteger);
break;
end
else
if i = row - 1 then
begin
report.textrc[row, 10] := chatTquery.Fields[1].AsString;
report.textrc[row, 11] := inttostr(chatTquery.Fields[2].value);
row := row + 1;
break;
end; end;
chattquery.Next;
end;
flag := Ecount / ret0;
if flag < 1 then
begin
flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5));
flag := flag / 1000;
end
else if flag = 1 then
flag := flag * 100;
report.SetActiveCell(arow, 5);
report.Text := floattostr(flag) + '%';
flag := Esuccess / ecount;
if flag < 1 then
begin
flag := strtofloat(copy(floattostr(flag), pos('.', floattostr(flag)) + 1, 5));
flag := flag / 1000;
end
else if flag = 1 then
flag := flag * 100;
report.TextRC[arow, 6] := floattostr(flag) + '%';
report.SetActiveCell(arow, 7);
report.Text := floattostr(100 - flag) + '%';
end;
end;
panel2.Caption := 'OK!';
end;
procedure Treportform.Button4Click(Sender: TObject);
begin
query.Close;
chatquery.Close;
tquery.close;
chatquery.Close;
application.Terminate;
end;procedure Treportform.Button2Click(Sender: TObject);
var filetype: smallint;
begin
saveasexcel.Execute;
filetype := F1FileExcel5;
if saveasexcel.FileName <> '' then
try
report.Write(saveasexcel.filename + '.xls', filetype);
except
application.messagebox(pchar('保存到文件' + saveasexcel.filename + '.xls' + '不成功!'), '提示!', 0);
end;
filename := saveasexcel.filename + '.xls';
end;procedure Treportform.Button3Click(Sender: TObject);
var
address: integer;
i: integer;
begin
if memo1.Text = '' then
begin
showmessage('没有地址!');
exit;
end;
if filename = '' then
begin
showmessage('你还没有保存文件或没有可以发送的文件!');
end;
panel2.Caption := '正在连接';
smtp.ClearParams := true;
address := pos('@', email.Text);
smtp.Host := copy(email.Text, address + 1, length(email.Text) - address);
smtp.UserID := username.Text;
smtp.TimeOut := 20000;
try
smtp.Connect;
except
panel2.Caption := '连接失败';
exit;
end;
for i := 0 to memo1.Lines.Count - 1 do
begin
panel2.Caption := 'To' + memo1.Lines.Text;
smtp.PostMessage.FromAddress := Email.Text;
smtp.PostMessage.FromName := username.Text;
smtp.PostMessage.ToAddress.Add(memo1.LineS.Strings[i]);
smtp.PostMessage.toblindcarboncopy.add('');
smtp.PostMessage.tocarboncopy.add('');
smtp.PostMessage.Subject := datetostr(date1.Date);
smtp.PostMessage.Attachments.Add(filename);
smtp.SendMail;
end;
end;procedure Treportform.Button5Click(Sender: TObject);
begin
memo1.Lines.SaveToFile('c:\Email.sys');
filename := '';
end;procedure Treportform.FormShow(Sender: TObject);
begin
adoconnection1.Connected := true;
try
memo1.Lines.LoadFromFile('c:\Email.sys');
except
end;
end;procedure Treportform.smtpDisconnect(Sender: TObject);
begin
panel2.Caption := '已经连接'
end;procedure Treportform.smtpSuccess(Sender: TObject);
begin
panel2.Caption := '已经发送完毕'
end;procedure Treportform.smtpConnect(Sender: TObject);
begin
panel2.Caption := '已经连接'
end;procedure Treportform.smtpFailure(Sender: TObject);
begin
showmessage('无法发送!');
end;procedure Treportform.ADOConnection1BeforeConnect(Sender: TObject);
begin
panel2.Caption := '正在连接数据库!';
end;procedure Treportform.ADOConnection1AfterConnect(Sender: TObject);
begin
panel2.Caption := '连接成功!';
end;end.我的所有代码
是设置为连接的!
1。你的客户端应安装了客户端组件
2。可以PING通(网络畅通)
3。其他连接方式可以连通,如数据库的客户端工具/SQL EXPLORERDENG/ODBC等
mdac的版本过低
本身网络不通
连接协议错误
用户名和密码错误
没有安装客户端程序或者缺少相应动态连接库(如果使用sql server2000)