TO forgot2000(忘记2000年) 是的,Component.ComponentCount的顺序是按ComponentIndex排的,但是Component.Index应该是只读的,我刚刚试了试,它好像是按.dfm里排的,就是说按起时间排的,当然,如果要是改了.dfm的话,它也可以了,这样的话,只要一个for就可以完成这个操作:)
TO Nizvoo(瓦匠泥 钟松风 100%投入中) ( ) 可是那还要它的赋之顺序啊,呵呵,当然,肯定不能用FindComponent了,如果用它的话,我还不如就写在数组里边,再者,在程序中,也不可能有Edit1,Edit2,Edit3,Edit4....这样的命名;
问题解决了,可以用一个for就做完了,一共是三句吧; TO byshaw(不要说爱我) ( ) 信誉: 同情,建议你用PB,我保存过比你更多的字段的表,达到两百多个字段, 三两句 就搞掂了 不过在调整数据窗口时就苦了,两三个小时看样子,delphi也不错啊,呵呵呵;
procedure TForm1.SendDataToDB(const Data: TData; TestTy: Integer); var IntSum,i:integer; SQLStr:Ansistring; CustomerType,FieldI:integer; {CustomerType: 0:DELL TYPE 1:HP TYPE} // aVR: array of TVarRec; STable,SBuWu,SRed,SGreen:string; IntTemp:Cardinal; StrDate:String; inif:TiniFile; CurDir:String; begin IntSum:=StrToInt(sum.text); Inc(IntSum,1); sum.text:=IntToStr(IntSum); CustomerType:=GetCustomerType(Customer.text); case CustomerType of 0: begin STable:='DellType'; SBuWu:='wx1,wy1,BY1,wx2,wy2,BY2,wx3,wy3,BY3,wx4,wy4,BY4,wx5,wy5,BY5,'; SRed:='RedX1,RedY1,RedX2,RedY2,RedX3,RedY3,RedX4,RedY4,RedX5,RedY5,'; SGreen:='GreenX1,GreenY1,GreenX2,GreenY2,GreenX3,GreenY3,GreenX4,GreenY4,GreenX5,GreenY5,'; FieldI:=5; end; 1: begin STable:='HpType'; SBuWu:=''; SRed:=''; SGreen:=''; FieldI:=0; end else begin ShowMessage('请确认此客户属于DELL类还是HP类?'); exit; end; end; SQLStr:='Insert Into '+STable; SQLStr:=SQLStr+'(riqi,Line,Model,Crt,Customer,Station,CurSum,'; SQLStr:=SQLStr+'wx,wy,Bu,'+SBuWu; SQLStr:=SQLStr+'RedX,RedY,'+SRed; SQLStr:=SQLStr+'GreenX,GreenY,'; SQLStr:=SQLStr+SGreen; SQLStr:=SQLStr+'CutoffBY,WhiteBY,WindowBY,' ; SQLStr:=SQLStr+'RasterBY,WBalance93x,WBalance93y,WBalance65x,WBalance65y)' ; SQLStr:=SQLStr+' Values('; for i:=0 to 5 do SQLStr:=SQLStr+'''%s''' + ','; SQLStr:=SQLStr+'''%d''' + ','; for i:=0 to FieldI do SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','+'''%4.1f''' + ','; for i:=0 to FieldI do SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','; for i:=0 to FieldI do SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','; for i:=0 to 3 do SQLStr:=SQLStr+ '''%4.1f''' + ','; for i:=0 to 1 do SQLStr:=SQLStr+ '''%d''' + ',' +'''%d''' + ','; SQLStr:=StuffString(SQLStr,Length(SQLStr),1,')'); try StrDate:=DateTimeToStr(Now); if copy(StrDate,1,2)<>'20' then StrDate:='20'+StrDate; case CustomerType of 0: {DELL} SQLStr:=Format(SQLStr,[StrDate,Line.Text,Model.Text,Crt.text, Customer.text,Station.text,StrToInt(sum.text) ,Data.BuWuRG[1][0].x,Data.BuWuRG[1][0].y,Data.BuWuRG[1][0].dy ,Data.BuWuRG[1][1].x,Data.BuWuRG[1][1].y,Data.BuWuRG[1][1].dy ,Data.BuWuRG[1][2].x,Data.BuWuRG[1][2].y,Data.BuWuRG[1][2].dy ,Data.BuWuRG[1][3].x,Data.BuWuRG[1][3].y,Data.BuWuRG[1][3].dy ,Data.BuWuRG[1][4].x,Data.BuWuRG[1][4].y,Data.BuWuRG[1][4].dy ,Data.BuWuRG[1][5].x,Data.BuWuRG[1][5].y,Data.BuWuRG[1][5].dy ,Data.BuWuRG[2][0].x,Data.BuWuRG[2][0].y ,Data.BuWuRG[2][1].x,Data.BuWuRG[2][1].y ,Data.BuWuRG[2][2].x,Data.BuWuRG[2][2].y ,Data.BuWuRG[2][3].x,Data.BuWuRG[2][3].y ,Data.BuWuRG[2][4].x,Data.BuWuRG[2][4].y ,Data.BuWuRG[2][5].x,Data.BuWuRG[2][5].y ,Data.BuWuRG[3][0].x,Data.BuWuRG[3][0].y ,Data.BuWuRG[3][1].x,Data.BuWuRG[3][1].y ,Data.BuWuRG[3][2].x,Data.BuWuRG[3][2].y ,Data.BuWuRG[3][3].x,Data.BuWuRG[3][3].y ,Data.BuWuRG[3][4].x,Data.BuWuRG[3][4].y ,Data.BuWuRG[3][5].x,Data.BuWuRG[3][5].y ,Data.dy[4],Data.dy[5],Data.dy[6],Data.dy[7] ,Data.BalanceW[8,0],Data.BalanceW[8,1],Data.BalanceW[9,0],Data.BalanceW[9,1] ]); 1: {HP} SQLStr:=Format(SQLStr,[StrDate,Line.Text,Model.Text,Crt.text, Customer.text,Station.text,StrToInt(sum.text) ,Data.BuWuRG[1][0].x,Data.BuWuRG[1][0].y,Data.BuWuRG[1][0].dy ,Data.BuWuRG[2][0].x,Data.BuWuRG[2][0].y ,Data.BuWuRG[3][0].x,Data.BuWuRG[3][0].y ,Data.dy[4],Data.dy[5],Data.dy[6],Data.dy[7] ,Data.BalanceW[8,0],Data.BalanceW[8,1],Data.BalanceW[9,0],Data.BalanceW[9,1] ]) else exit; end; MyThread:=TDataToDBThread.Create(false,SQLStr); MyThread.WaitFor ; MyThread.Free; ** ** --------------------------- 我写的一个,好像也是50几个字段...用这种方法...不知有没有更好的?
i:integer;
begin
for i:=0 to table1.FieldCount-1 do
table1.Fields[i].AsString:=edit1.text;
end;
i:integer;
begin
for i:=0 to table1.FieldCount-1 do
table1.Fields[i].AsString:=edit1.text;
~~~~~~~~~~~这样吗?
end;谢谢啦,呵呵,用 Self.ComponentCount?
最后谢谢你的生日祝福,谢谢!
呵呵,我去看一看:)大家都是做程序的,都是朋友,今天我们为你祝福,明天你就会我们祝福:)
能不能告诉我
ComponentCount的顺序是按什么走的?
pEdit: ^TEdit;Edit1: TEdit;
Edit2: TEdit;
....Editn: TEdit;pEdit := @Edit1;
再作个for就行。
五十多个写写也无妨
是的,Component.ComponentCount的顺序是按ComponentIndex排的,但是Component.Index应该是只读的,我刚刚试了试,它好像是按.dfm里排的,就是说按起时间排的,当然,如果要是改了.dfm的话,它也可以了,这样的话,只要一个for就可以完成这个操作:)
可是那还要它的赋之顺序啊,呵呵,当然,肯定不能用FindComponent了,如果用它的话,我还不如就写在数组里边,再者,在程序中,也不可能有Edit1,Edit2,Edit3,Edit4....这样的命名;
TO byshaw(不要说爱我) ( ) 信誉:
同情,建议你用PB,我保存过比你更多的字段的表,达到两百多个字段,
三两句 就搞掂了
不过在调整数据窗口时就苦了,两三个小时看样子,delphi也不错啊,呵呵呵;
var
IntSum,i:integer;
SQLStr:Ansistring;
CustomerType,FieldI:integer; {CustomerType: 0:DELL TYPE 1:HP TYPE}
// aVR: array of TVarRec;
STable,SBuWu,SRed,SGreen:string;
IntTemp:Cardinal;
StrDate:String;
inif:TiniFile;
CurDir:String;
begin IntSum:=StrToInt(sum.text);
Inc(IntSum,1);
sum.text:=IntToStr(IntSum); CustomerType:=GetCustomerType(Customer.text); case CustomerType of
0:
begin
STable:='DellType';
SBuWu:='wx1,wy1,BY1,wx2,wy2,BY2,wx3,wy3,BY3,wx4,wy4,BY4,wx5,wy5,BY5,';
SRed:='RedX1,RedY1,RedX2,RedY2,RedX3,RedY3,RedX4,RedY4,RedX5,RedY5,';
SGreen:='GreenX1,GreenY1,GreenX2,GreenY2,GreenX3,GreenY3,GreenX4,GreenY4,GreenX5,GreenY5,';
FieldI:=5;
end;
1:
begin
STable:='HpType';
SBuWu:='';
SRed:='';
SGreen:='';
FieldI:=0;
end
else
begin
ShowMessage('请确认此客户属于DELL类还是HP类?');
exit;
end;
end;
SQLStr:='Insert Into '+STable;
SQLStr:=SQLStr+'(riqi,Line,Model,Crt,Customer,Station,CurSum,';
SQLStr:=SQLStr+'wx,wy,Bu,'+SBuWu;
SQLStr:=SQLStr+'RedX,RedY,'+SRed;
SQLStr:=SQLStr+'GreenX,GreenY,';
SQLStr:=SQLStr+SGreen;
SQLStr:=SQLStr+'CutoffBY,WhiteBY,WindowBY,' ;
SQLStr:=SQLStr+'RasterBY,WBalance93x,WBalance93y,WBalance65x,WBalance65y)' ;
SQLStr:=SQLStr+' Values('; for i:=0 to 5 do
SQLStr:=SQLStr+'''%s''' + ','; SQLStr:=SQLStr+'''%d''' + ','; for i:=0 to FieldI do
SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','+'''%4.1f''' + ',';
for i:=0 to FieldI do
SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','; for i:=0 to FieldI do
SQLStr:=SQLStr+ '''%d''' + ',' + '''%d''' + ','; for i:=0 to 3 do
SQLStr:=SQLStr+ '''%4.1f''' + ','; for i:=0 to 1 do
SQLStr:=SQLStr+ '''%d''' + ',' +'''%d''' + ','; SQLStr:=StuffString(SQLStr,Length(SQLStr),1,')'); try
StrDate:=DateTimeToStr(Now);
if copy(StrDate,1,2)<>'20' then
StrDate:='20'+StrDate;
case CustomerType of
0: {DELL}
SQLStr:=Format(SQLStr,[StrDate,Line.Text,Model.Text,Crt.text,
Customer.text,Station.text,StrToInt(sum.text)
,Data.BuWuRG[1][0].x,Data.BuWuRG[1][0].y,Data.BuWuRG[1][0].dy
,Data.BuWuRG[1][1].x,Data.BuWuRG[1][1].y,Data.BuWuRG[1][1].dy
,Data.BuWuRG[1][2].x,Data.BuWuRG[1][2].y,Data.BuWuRG[1][2].dy
,Data.BuWuRG[1][3].x,Data.BuWuRG[1][3].y,Data.BuWuRG[1][3].dy
,Data.BuWuRG[1][4].x,Data.BuWuRG[1][4].y,Data.BuWuRG[1][4].dy
,Data.BuWuRG[1][5].x,Data.BuWuRG[1][5].y,Data.BuWuRG[1][5].dy
,Data.BuWuRG[2][0].x,Data.BuWuRG[2][0].y
,Data.BuWuRG[2][1].x,Data.BuWuRG[2][1].y
,Data.BuWuRG[2][2].x,Data.BuWuRG[2][2].y
,Data.BuWuRG[2][3].x,Data.BuWuRG[2][3].y
,Data.BuWuRG[2][4].x,Data.BuWuRG[2][4].y
,Data.BuWuRG[2][5].x,Data.BuWuRG[2][5].y
,Data.BuWuRG[3][0].x,Data.BuWuRG[3][0].y
,Data.BuWuRG[3][1].x,Data.BuWuRG[3][1].y
,Data.BuWuRG[3][2].x,Data.BuWuRG[3][2].y
,Data.BuWuRG[3][3].x,Data.BuWuRG[3][3].y
,Data.BuWuRG[3][4].x,Data.BuWuRG[3][4].y
,Data.BuWuRG[3][5].x,Data.BuWuRG[3][5].y
,Data.dy[4],Data.dy[5],Data.dy[6],Data.dy[7]
,Data.BalanceW[8,0],Data.BalanceW[8,1],Data.BalanceW[9,0],Data.BalanceW[9,1]
]);
1: {HP}
SQLStr:=Format(SQLStr,[StrDate,Line.Text,Model.Text,Crt.text,
Customer.text,Station.text,StrToInt(sum.text)
,Data.BuWuRG[1][0].x,Data.BuWuRG[1][0].y,Data.BuWuRG[1][0].dy
,Data.BuWuRG[2][0].x,Data.BuWuRG[2][0].y
,Data.BuWuRG[3][0].x,Data.BuWuRG[3][0].y
,Data.dy[4],Data.dy[5],Data.dy[6],Data.dy[7]
,Data.BalanceW[8,0],Data.BalanceW[8,1],Data.BalanceW[9,0],Data.BalanceW[9,1]
])
else
exit;
end;
MyThread:=TDataToDBThread.Create(false,SQLStr);
MyThread.WaitFor ;
MyThread.Free;
**
**
---------------------------
我写的一个,好像也是50几个字段...用这种方法...不知有没有更好的?