table1: noid为主健noid name jdk je num
a001 张三 类型一 9000 1
a002 李四 类型一 3000 1
a003 刘波 类型一 2000 1
a004 黄喇 类型一 1000 1
a005 爱夺 类型一 5000 1 table2: noid和suq为主健 与table1对应noid noid suq mxje
a001 1 3000
a001 2 2999
a001 3 3001
a002 1 1200
a002 2 1800
a003 1 900
a003 2 1100
a004 1 300
a004 2 700
a005 1 5000要把它导出到文本文件里去一行就生成以name字段命名的一个文件,这个文件包括table1和table2里的数,各字段用逗号分开,比如:
张三.txt
a001,张三,类型一,9000,1
a001,1,3000
a001,2,2999
a001,3,3001李四.txt
a002,李四,类型一,3000,1
a002,1,1200
a002,2,1800
a001 张三 类型一 9000 1
a002 李四 类型一 3000 1
a003 刘波 类型一 2000 1
a004 黄喇 类型一 1000 1
a005 爱夺 类型一 5000 1 table2: noid和suq为主健 与table1对应noid noid suq mxje
a001 1 3000
a001 2 2999
a001 3 3001
a002 1 1200
a002 2 1800
a003 1 900
a003 2 1100
a004 1 300
a004 2 700
a005 1 5000要把它导出到文本文件里去一行就生成以name字段命名的一个文件,这个文件包括table1和table2里的数,各字段用逗号分开,比如:
张三.txt
a001,张三,类型一,9000,1
a001,1,3000
a001,2,2999
a001,3,3001李四.txt
a002,李四,类型一,3000,1
a002,1,1200
a002,2,1800
导出一个表,
var
pMasterFlds:array of string;
pMasterTypes:array of string;
pMasterValues:array of variant;
i:Integer;
begin
VariantPack:=VarArrayCreate([0,3],varVariant);
setlength(pMasterFlds,Length(MasterInfo));
setlength(pMasterTypes,Length(MasterInfo));
setlength(pMasterValues,Length(MasterInfo));
for i:=low(MasterInfo) to high(MasterInfo) do
begin
pMasterFlds[i]:=MasterInfo[i].strFldName;
pMasterTypes[i]:=MasterInfo[i].strFldType;
pMasterValues[i]:=PriMemData.FieldByName(MasterInfo[i].strFldName).Value;
end;
VariantPack[0]:=strTalbeName;
VariantPack[1]:=pMasterFlds;
VariantPack[2]:=pMasterTypes;
VariantPack[3]:=pMasterValues;
end;Function varPack(var VariantPack: Variant;DetailInfo:RJbDjMxTableInfo;PriMemData:TdxMemData;MainMemData:TdxMemData;strTalbeName:String;strPkFld:String;strPkValue:String):Integer;overload;
var
pDetailFlds:array of string;
pDetailTypes:array of string;
pDetailValues:array of variant;
pDetailValue:array of variant;
i,j,k:integer;
begin
//明细数据
k:=0;
for j:=low(DetailInfo) to high(DetailInfo) do
begin
if DetailInfo[j].intFldKind<>0 then
Continue;
Inc(k);
end;
VariantPack:=VarArrayCreate([0,3],varVariant);
setlength(pDetailFlds,k);
setlength(pDetailTypes,k);
k:=0;
for j:=low(DetailInfo) to high(DetailInfo) do
begin
if DetailInfo[j].intFldKind<>0 then
Continue;
pDetailFlds[k]:=DetailInfo[j].strFldName;
pDetailTypes[k]:=DetailInfo[j].strFldType;
Inc(k);
end;
pDetailValues:=nil;
PriMemData.First;
setlength(pDetailValues,PriMemData.RecordCount);
for i:=0 to PriMemData.RecordCount-1 do
begin
setlength(pDetailValue,Length(pDetailFlds));
for j:=low(pDetailFlds) to high(pDetailFlds) do
begin
pDetailValue[j]:=PriMemData.FieldByName(pDetailFlds[j]).Value;
if pDetailFlds[j]=strPkFld then
pDetailValue[j]:=MainMemData.FieldByName(strPkFld).AsString;
end;
pDetailValues[i]:=pDetailValue;
PriMemData.Next;
end;
VariantPack[0]:=strTalbeName;
VariantPack[1]:=pDetailFlds;
VariantPack[2]:=pDetailTypes;
VariantPack[3]:=pDetailValues;
end;Function SaveDataPack(const VariantIn:Variant;const Filter:String):Integer;
var
FileName:String;
F:TextFile;
i,j,k:Integer;
MasterArr,FieldNameArr,FieldTypeArr,FieldValueArr,FieldValueDetailArr:Array of variant;
FieldNameStr,FieldTypeStr,FieldValueStr:String;
SaveDialogDataPack:TSaveDialog;
DetailRecordCount:Integer;
CurFilter:String;
procedure SavePack(FileLabel:String;VariantRec:Variant);
var
j,k:Integer;
begin
FieldNameStr:='';
FieldNameArr:=nil;
FieldNameArr:=VariantRec[1];
FieldTypeStr:='';
FieldTypeArr:=nil;
FieldTypeArr:=VariantRec[2];
FieldValueArr:=nil;
FieldValueArr:=VariantRec[3];
if VarType(FieldValueArr[0])<>varEmpty then
DetailRecordCount:=Length(FieldValueArr)
else
DetailRecordCount:=0;
Writeln(F,FileLabel+SPLIT);
Writeln(F,VarToStr(VariantRec[0])+SPLIT+IntToStr(Length(FieldNameArr))+SPLIT+IntToStr(DetailRecordCount)+SPLIT);
for j:=low(FieldNameArr) to High(FieldNameArr) do
begin
FieldNameStr:=FieldNameStr+VarToStr(FieldNameArr[j])+SPLIT;
FieldTypeStr:=FieldTypeStr+VarToStr(FieldTypeArr[j])+SPLIT;
end;
Writeln(F,FieldNameStr);
Writeln(F,FieldTypeStr);
if VarType(FieldValueArr[0])=varEmpty then
Exit;
for j:=low(FieldValueArr) to high(FieldValueArr) do
begin
FieldValueStr:='';
FieldValueDetailArr:=nil;
FieldValueDetailArr:=FieldValueArr[j];
for k:=low(FieldValueDetailArr) to high(FieldValueDetailArr) do
begin
FieldValueStr:=FieldValueStr+VarToStr(FieldValueDetailArr[k])+SPLIT;
end;
Writeln(F,FieldValueStr);
end;
end;
begin
Result:=0;
SaveDialogDataPack:=TSaveDialog.Create(nil);
CurFilter:='*.'+Filter+'|*.'+Filter;
SaveDialogDataPack.Filter:=CurFilter;
SaveDialogDataPack.FileName:=VariantIn[0][1]+'.'+Filter;
if (SaveDialogDataPack.Execute) and (Trim(SaveDialogDataPack.FileName)<>'') then
begin
FileName:=SaveDialogDataPack.FileName;
if Pos(Filter,FileName)=0 then
FileName:=FileName+'.'+Filter;
end
else begin
SaveDialogDataPack.Free;
Result:=0;
Exit;
end;
try
AssignFile(F,FileName);
Rewrite(F);
Writeln(F,'单据编号'+SPLIT);
Writeln(F,VarToStr(VariantIn[0][0])+SPLIT+VarToStr(VariantIn[0][1])+SPLIT);
Writeln(F,'主表数据'+SPLIT);
MasterArr:=VariantIn[1];
FieldNameStr:='';
FieldNameArr:=nil;
FieldNameArr:=MasterArr[1];
FieldTypeStr:='';
FieldTypeArr:=nil;
FieldTypeArr:=MasterArr[2];
FieldValueStr:='';
FieldValueArr:=nil;
FieldValueArr:=MasterArr[3];
Writeln(F,VarToStr(MasterArr[0])+SPLIT+IntToStr(Length(FieldNameArr))+SPLIT);
for i:=low(FieldNameArr) to high(FieldNameArr) do
begin
FieldNameStr:=FieldNameStr+VarToStr(FieldNameArr[i])+SPLIT;
FieldTypeStr:=FieldTypeStr+VarToStr(FieldTypeArr[i])+SPLIT;
FieldValueStr:=FieldValueStr+VarToStr(FieldValueArr[i])+SPLIT;
end;
Writeln(F,FieldNameStr);
Writeln(F,FieldTypeStr);
Writeln(F,FieldValueStr); Writeln(F,'明细数据'+SPLIT);
Writeln(F,VarToStr(VariantIn[2])+SPLIT);
MasterArr:=nil;
MasterArr:=VariantIn;
for i:=0 to VariantIn[2]-1 do
SavePack('明细数据'+IntToStr(i),VariantIn[3+i]);
{if VariantIn[2]>1 then
SavePack('配码数据',VariantIn[2+VariantIn[2]-1]);
if VariantIn[2]>2 then
SavePack('装箱数据',VariantIn[2+VariantIn[2]]); }
except
Result:=-1;
ShowMessage('另存异常!');
end;
CloseFile(F);
SaveDialogDataPack.Free;
end;
i: Integer;
slist: TStringList;
begin
slist := TStringList.Create;
adoQuery.active:=false;
adoQuery.sql.text:='select * from table1 '
adoQuery.active:=true;
adoQuery_main.First;
while not adoQuery_main.eof do
begin
sList.clear;
sList.Add(adoQuery_main.FieldByName('noid').AsString + ','
+ adoQuery_main.FieldByName('name').AsString);
with adoQuery_sub do
begin
active:=false;
sql.text:='select * from table where noid='''
+adoQuery_main.fieldbyname('noid').asstring+'''';
active:=true;
first;
while not eof do
begin
sList.add(adoQuery_main.FieldByName('noid').AsString + ','
+ adoQuery_main.FieldByName('suq').AsString)
end;
next;
end;
slist.SaveToFile(adoQuery_main.FieldByName('name').AsString+'.txt');
adoQuery_main.next;
end;
slist.free;
end;