简单问题。。。。。 ( 积分: 50 )

  • 主题发起人 主题发起人 sstsgqyj
  • 开始时间 开始时间
S

sstsgqyj

Unregistered / Unconfirmed
GUEST, unregistred user!
有表一
字段数4列
A B C D
有表二
字段数40列
h i j k l m n o p q.........
如何实现以下输出打印
A B C D h i j k l ....(表二前20列字段输出)
。。。。。。。。
。。。。。。。。
。。。。。。。。
上面所有字段记录输出完后空几行继续打印表二后20列字段
A B C D u v w .......(表二后20列字段输出)
。。。。。。。。
。。。。。。。。
。。。。。。。。
--------------------------------------------------------
抱歉,让大家误会了我的意思,其实是表一的字段和表二的字段是一对一关系的
 
有表一
字段数4列
A B C D
有表二
字段数40列
h i j k l m n o p q.........
如何实现以下输出打印
A B C D h i j k l ....(表二前20列字段输出)
。。。。。。。。
。。。。。。。。
。。。。。。。。
上面所有字段记录输出完后空几行继续打印表二后20列字段
A B C D u v w .......(表二后20列字段输出)
。。。。。。。。
。。。。。。。。
。。。。。。。。
--------------------------------------------------------
抱歉,让大家误会了我的意思,其实是表一的字段和表二的字段是一对一关系的
 
先查询列:
1、select D1.A,D1.B,D1.C,D1.D,D2.h,D2.i......from D1,D2
2、select D1.A,D1.B,D1.C,D1.D,D2.u,D2.v......from D1,D2
通过报表打印或自定义打印。
 
可以具体点吗?
 
用EXCEL吧,这样方便点。
因时间问题,可能乱了点。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Buttons;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
procedure printf;
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure Tform1.printf;
var
iCount, jCount,i: Integer;
XLApp: Variant;
Sheet: Variant;
begin
Screen.Cursor := crHourGlass;
if not VarIsEmpty(XLApp) then
begin
XLApp.DisplayAlerts := False;
XLApp.Quit;
VarClear(XLApp);
end;

try
XLApp := CreateOleObject('Excel.Application');
except
Screen.Cursor := crDefault;
Exit;
end;

xLApp.WorkBooks.Add[XLWBatWorksheet];
XLApp.WorkBooks[1].WorkSheets[1].Name := '';
Sheet := XLApp.Workbooks[1].WorkSheets[''];
if not Target.DataSource.DataSet.Active then
begin
Screen.Cursor := crDefault;
Exit;
end;

with adoquery1do
begin
close;
sql.Clear ;
sql.Append('select D1.A,D1.B,D1.C,D1.D,D2.h,....from D1,D2');
open;
if recordcount>0 then
begin
first;
for iCount := 0 to Fields.Count-1do
Sheet.cells[1, iCount + 1] :=Fields.FieldName;
jCount := 1;
while not Eofdo
begin
for iCount := 0 to Fields.Count-1do
Sheet.cells[jCount+1, iCount + 1] := fieldbyname(Fields.FieldName).AsString ;
Inc(jCount);
Next;
end;

jcount:=jcount+5;
//空五行
close;
sql.Clear ;
sql.Append('select D1.A,D1.B,D1.C,D1.D,D2.u,....from D1,D2');
open;
if recordcount>0 then
begin
first;
for iCount := 0 to Fields.Count-1do
Sheet.cells[jcount, iCount + 1] :=Fields.FieldName;
while not Eofdo
begin
for iCount := 0 to Fields.Count-1do
Sheet.cells[jCount+1, iCount + 1] := fieldbyname(Fields.FieldName).AsString ;
Inc(jCount);
Next;
end;
end;
end;
end;

Sheet.Columns.EntireColumn.AutoFit ;
Sheet.Range['A1','L2000'].HorizontalAlignment:= xlCenter ;
XlApp.Visible := True;
Screen.Cursor := crDefault;
end;
 
你可以使用视图啊,很简单,
 
本人也感觉用视图比较方便;
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
849
DelphiTeacher的专栏
D
D
回复
0
查看
799
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部