工序名 机型 项目名 参数值 工序名 机型 项目名 参数值
清花 A035E 电动机皮带轮 Φ135 梳棉 FA231C 号数 J14.6
清花 A035E 豪猪打手皮带轮内/外 Φ247mm 梳棉 FA231C 梳棉湿重 17.79
清花 A035E 第二U形打手皮带轮 Φ160mm 梳棉 FA231C 回潮率 7.80
清花 A035E 第一U形打手皮带轮 Φ190mm 梳棉 FA231C 梳棉干重 16.5
清花 A035E 梳棉帘电动机变换齿轮19T 梳棉 FA231C 公制号数 3581
清花 A035E U1~尘棒进口 10mm 梳棉 FA231C 重量牵伸 116.7
梳棉 FA231C 机械牵伸 120.2
梳棉 FA231C 棉条张力变轮Z5 20
以上是EXCEL中的表,将EXCEL导入界面后,显示也如上格式。数据库表里的字段是(工序名 机型 项目名 参数值),将八列保存到数据表中的四列中。代码如下:
procedure TfrmDaGongYiZhiZuo.cxButton2Click(Sender: TObject);
var
i,j,k: Integer;
a,b,c,d,e,f,g: string;
adosave:TADOStoredProc;
begin
adotable1.Active := true;
if cxGrid1DBTableView1.ColumnCount < 1 then
begin
Application.MessageBox('无相关信息,数据库无更新!','提示',MB_ICONWARNING);
exit;
end;
if qry.RecordCount < 1 then exit;
k:=0;
for j:=k to k+3 do
begin
for i := 0 to cxGrid1DBTableView1.datacontroller.RecordCount - 1 do // Iterate begin
if cxGrid1DBTableView1.DataController.Values[i,j]<>'' then
begin
adosave:=TADOStoredProc.Create(nil);
adosave.Connection:=DMDATA.GongyiCon;
adosave.ProcedureName:='MFCCS_P_工艺制作信息表保存';
adosave.Parameters.Refresh;
adosave.Parameters.ParamByName('@品种').Value:=Trim(cxMaskEdit2.Text);
adosave.Parameters.ParamByName('@工序名').value:=cxGrid1DBTableView1.DataController.Values[i,j];
adosave.Parameters.ParamByName('@机型').value:=cxGrid1DBTableView1.DataController.Values[i,j+1];
adosave.Parameters.ParamByName('@项目名').value:=cxGrid1DBTableView1.DataController.Values[i,j+2];
adosave.Parameters.ParamByName('@标准值').value:=cxGrid1DBTableView1.DataController.Values[i,j+3];
adosave.Parameters.ParamByName('@版本号').value:=Trim(cxMaskEdit1.Text);
adosave.Parameters.ParamByName('@创建时间').Value:=Trim(cxDateEdit2.Text);
adosave.ExecProc;
end
else
k:=K+4; end; end;
showmessage('数据导入成功!');
cxMaskEdit1.Clear;
cxDateEdit2.Clear;
end;为什么有空格的情况下,不自动跳到第五列呢?K:=K+4不执行啊?
清花 A035E 电动机皮带轮 Φ135 梳棉 FA231C 号数 J14.6
清花 A035E 豪猪打手皮带轮内/外 Φ247mm 梳棉 FA231C 梳棉湿重 17.79
清花 A035E 第二U形打手皮带轮 Φ160mm 梳棉 FA231C 回潮率 7.80
清花 A035E 第一U形打手皮带轮 Φ190mm 梳棉 FA231C 梳棉干重 16.5
清花 A035E 梳棉帘电动机变换齿轮19T 梳棉 FA231C 公制号数 3581
清花 A035E U1~尘棒进口 10mm 梳棉 FA231C 重量牵伸 116.7
梳棉 FA231C 机械牵伸 120.2
梳棉 FA231C 棉条张力变轮Z5 20
以上是EXCEL中的表,将EXCEL导入界面后,显示也如上格式。数据库表里的字段是(工序名 机型 项目名 参数值),将八列保存到数据表中的四列中。代码如下:
procedure TfrmDaGongYiZhiZuo.cxButton2Click(Sender: TObject);
var
i,j,k: Integer;
a,b,c,d,e,f,g: string;
adosave:TADOStoredProc;
begin
adotable1.Active := true;
if cxGrid1DBTableView1.ColumnCount < 1 then
begin
Application.MessageBox('无相关信息,数据库无更新!','提示',MB_ICONWARNING);
exit;
end;
if qry.RecordCount < 1 then exit;
k:=0;
for j:=k to k+3 do
begin
for i := 0 to cxGrid1DBTableView1.datacontroller.RecordCount - 1 do // Iterate begin
if cxGrid1DBTableView1.DataController.Values[i,j]<>'' then
begin
adosave:=TADOStoredProc.Create(nil);
adosave.Connection:=DMDATA.GongyiCon;
adosave.ProcedureName:='MFCCS_P_工艺制作信息表保存';
adosave.Parameters.Refresh;
adosave.Parameters.ParamByName('@品种').Value:=Trim(cxMaskEdit2.Text);
adosave.Parameters.ParamByName('@工序名').value:=cxGrid1DBTableView1.DataController.Values[i,j];
adosave.Parameters.ParamByName('@机型').value:=cxGrid1DBTableView1.DataController.Values[i,j+1];
adosave.Parameters.ParamByName('@项目名').value:=cxGrid1DBTableView1.DataController.Values[i,j+2];
adosave.Parameters.ParamByName('@标准值').value:=cxGrid1DBTableView1.DataController.Values[i,j+3];
adosave.Parameters.ParamByName('@版本号').value:=Trim(cxMaskEdit1.Text);
adosave.Parameters.ParamByName('@创建时间').Value:=Trim(cxDateEdit2.Text);
adosave.ExecProc;
end
else
k:=K+4; end; end;
showmessage('数据导入成功!');
cxMaskEdit1.Clear;
cxDateEdit2.Clear;
end;为什么有空格的情况下,不自动跳到第五列呢?K:=K+4不执行啊?
你没有跳出这个循环吧。
改为这样
else
begin
inc(k,4);
break;
end;
var
i,j,k: Integer;
a,b,c,d,e,f,g: string;
adosave:TADOStoredProc;
begin
adotable1.Active := true;
if cxGrid1DBTableView1.ColumnCount < 1 then
begin
Application.MessageBox('无相关信息,数据库无更新!','提示',MB_ICONWARNING);
exit;
end;
if qry.RecordCount < 1 then exit;
k:=0;
for j:=k to k+3 do
begin
for i := 0 to cxGrid1DBTableView1.datacontroller.RecordCount - 1 do // Iterate begin
if cxGrid1DBTableView1.DataController.Values[i,j] <>'' then
begin
adosave:=TADOStoredProc.Create(nil);
adosave.Connection:=DMDATA.GongyiCon;
adosave.ProcedureName:='MFCCS_P_工艺制作信息表保存';
adosave.Parameters.Refresh;
adosave.Parameters.ParamByName('@品种').Value:=Trim(cxMaskEdit2.Text);
adosave.Parameters.ParamByName('@工序名').value:=cxGrid1DBTableView1.DataController.Values[i,j];
adosave.Parameters.ParamByName('@机型').value:=cxGrid1DBTableView1.DataController.Values[i,j+1];
adosave.Parameters.ParamByName('@项目名').value:=cxGrid1DBTableView1.DataController.Values[i,j+2];
adosave.Parameters.ParamByName('@标准值').value:=cxGrid1DBTableView1.DataController.Values[i,j+3];
adosave.Parameters.ParamByName('@版本号').value:=Trim(cxMaskEdit1.Text);
adosave.Parameters.ParamByName('@创建时间').Value:=Trim(cxDateEdit2.Text);
adosave.ExecProc;
end else begin
k:=K+4;
end; end;
showmessage('数据导入成功!');
cxMaskEdit1.Clear;
cxDateEdit2.Clear;
end; cxGrid1DBTableView1.DataController.Values[i,j] <>'' then 问题在这行
里面有东西不为空罗辑上没有问题,显示里面的是什么是空格还是回车换行什么的要不你转成字符或计算字符长度再跳转
我自己已经解决这个问题了,代码如下:
procedure TfrmDaGongYiZhiZuo.cxButton2Click(Sender: TObject);
var
i,j,k,s: Integer;
adosave:TADOStoredProc;
adodelete :TADOQuery;
begin adosave:=TADOStoredProc.Create(nil);
adodelete:=TADOQuery.Create(nil);
adotable1.Active := true;
if cxGrid1DBTableView1.ColumnCount < 1 then
begin
Application.MessageBox('无相关信息,数据库无更新!','提示',MB_ICONWARNING);
exit;
end;
if qry.RecordCount < 1 then exit;
k:=0;
for s:= 1 to 9 do
begin
for i := 0 to cxGrid1DBTableView1.DataController.RecordCount - 1 do // 行数
begin
for j:=k to k do //列数
begin
if cxGrid1DBTableView1.DataController.Values[i,j]<>'' then
begin
adosave.Connection:=DMDATA.GongyiCon;
adosave.ProcedureName:='MFCCS_P_工艺制作信息表保存';
adosave.Parameters.Refresh;
adosave.Parameters.ParamByName('@品种').Value:=Trim(cxComboBox3.Text);
adosave.Parameters.ParamByName('@工序名').Value:=cxGrid1DBTableView1.DataController.Values[i,j];
adosave.Parameters.ParamByName('@机型').Value:=cxGrid1DBTableView1.DataController.Values[i,j+1];
adosave.Parameters.ParamByName('@项目名').Value:=cxGrid1DBTableView1.DataController.Values[i,j+2];
adosave.Parameters.ParamByName('@标准值').Value:=cxGrid1DBTableView1.DataController.Values[i,j+3];
adosave.Parameters.ParamByName('@版本号').Value:=Trim(cxMaskEdit1.Text);
adosave.Parameters.ParamByName('@创建时间').Value:=Trim(cxDateEdit2.Text);
adosave.Parameters.ParamByName('@制作人').Value:=UserInfo.UserName;
adosave.ExecProc;
end;
end;
end; adodelete.Connection:=DMDATA.GongyiCon;
adodelete.Close;
adodelete.SQL.Add('delete from T_工艺_大工艺制作 where 工序名 is null and 版本号='''+cxmaskedit1.text+'''');
adodelete.ExecSQL;
k:=K+4;
end;
showmessage('数据导入成功!');
cxComboBox3.Clear;
cxMaskEdit1.Clear;
cxDateEdit2.Clear;end;
注:导入转换行后,空格行要使用adodelete将空行删去,有没有更好的办法呢!我还有个问题就是:当此种EXCEL表导进CXGRID中,标准值列的数据有几个不能导进来,比如带%,如下:但另外有的是可以导进来的,有什么好办法吗?
工序名4 机型4 项目名4 参数值4
精梳 CJ60 锡林定位 34.5分度
精梳 CJ60 钳板最前位置 20分度
精梳 CJ60 梳理隔距 0.35mm
精梳 CJ60 主牵伸区隔距 3.5mm
精梳 CJ60 毛刷插入锡林深度 2.0mm
精梳 CJ60 牵伸皮辊加压(bar) 3.5×5.5×4.5
精梳 CJ60 集棉器 4mm
精梳 CJ60 落棉率 15+1%
从EXCEL导入到CXGRID代码如下:
procedure TfrmDaGongYiZhiZuo.cxButton1Click(Sender: TObject);
var
stablename,sfilename : string;
slist : Tstringlist ;
begin
if cxDateEdit2.Text='' then
begin
ShowMessage('请选择创建日期!');
Exit;
end;
if not(Opendlg.Execute) then exit;
sfilename := Opendlg.FileName; //表名
adocon_excel1.Connected := false;
adocon_excel1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName+';Extended Properties="Excel 8.0;HDR=YES;IMEX=1";Persist Security Info=True ';
adocon_excel1.Connected := true; //连接
slist := Tstringlist.Create;
adocon_excel1.GetTableNames(slist); //连接表名
stablename := slist[0];
If Pos('$', sTableName)>0 Then sTableName := '[' + sTableName + ']'; //定位表标签
qry.Close;
qry.SQL.Clear;
qry.SQL.Text := 'select * from ' + stablename;
qry.ExecSQL;
qry.Open;
cxGrid1DBTableView1.ClearItems;
cxGrid1DBTableView1.DataController.CreateAllItems(true);
cxGrid1DBTableView1.ApplyBestFit();
BH;
yanzheng;
end;
学习吗?再说我确实是22岁的女程序员啦, 不过跟大师们比,差远啦,接触dephi七个月了
var
ExcelApp,WorkBook:Olevariant;
ExcelSheetCount,i,k:Integer;
begin
inherited;
if RzButtonEdit1.Text <>'' then
begin
if (ExtractFileExt(RzButtonEdit1.Text)<>'.xls') then
begin
MessageDlg('請選擇要導入的Excel檔案!',mtWarning,[mbOK],0);
RzButtonEdit1.Clear;
end
else
begin
try
Application.ProcessMessages;
ExcelApp:=CreateOleObject('Excel.Application');
WorkBook:=ExcelApp.WorkBooks.Open(RzButtonEdit1.Text);
ExcelApp.Visible:=False;
ExcelSheetCount:=WorkBook.WorkSheets.Count;
for i:=1 to ExcelSheetCount do
begin
Screen.Cursor:=crSQLWait;
WorkBook.WorkSheets[i].Activate;
a:=ExcelApp.Cells[4,2].Value;
b:=ExcelApp.Cells[8,2].Value;
c:=ExcelApp.Cells[14,2].Value;
d:=ExcelApp.Cells[21,2].Value;
e:=ExcelApp.Cells[22,2].Value;
f:=ExcelApp.Cells[23,2].Value;
if ((Copy(Trim(a),1,3)<>'ECR') and (b<>'')) and ((Copy(Trim(a),1,3)<>'DCR') and (b<>'')) then
begin
MessageDlg('檔案格式錯誤!',mtWarning,[mbOK],0);
InsertErrorLOG;
Screen.Cursor:=crDefault;
Exit;
end; with adoq_ecrn do
begin
Close;
SQL.Text:='select * from RES_ECR_TYPE where ECRNO='''+ a+'''';
Open;
if RecordCount=1 then
begin
MessageDlg('請檢查:導入檔案時編號"'+ a+'"的記錄重復!',mtWarning,[mbOK],0);
InsertRepeatLOG;
Screen.Cursor:=crDefault;
Exit;
end;
end; with adoq_ecrn do
begin
Close;
SQL.Clear;
SQL.Add('insert into RES_ECR_TYPE(ECRNO,DESOFCHANGE,RELEASEDATE,RESPEOPLE,ISSUEDEPT,MODEL) values(:a,:b,:c,:d,:e,:f)');
Parameters.ParamByName('a').Value:=a;
Parameters.ParamByName('b').Value:=b;
Parameters.ParamByName('c').Value:=Trim(Copy(c,1,19));
Parameters.ParamByName('d').Value:=d;
Parameters.ParamByName('e').Value:=e;
Parameters.ParamByName('f').Value:=f;
ExecSQL;
end;
InsertECRLOG; ProgressBar1.Min:=0;
ProgressBar1.Max:=ExcelSheetCount;
for k:=33 to WorkBook.WorkSheets[i].usedrange.rows.count do
begin
g:=ExcelApp.Cells[K,1].Value;
q:=ExcelApp.Cells[k,2].Value;
w:=ExcelApp.Cells[k,3].Value;
v:=ExcelApp.Cells[k,4].Value;
r:=ExcelApp.Cells[k,5].Value;
t:=ExcelApp.Cells[k,6].Value;
y:=ExcelApp.Cells[k,7].Value;
u:=ExcelApp.Cells[k,8].Value;
o:=ExcelApp.Cells[k,9].Value;
if (q<>'')and(w<>'') then
with adoq_item do
begin
Close;
SQL.Clear;
SQL.Add('insert into RES_ECR_ITEM(GROUPID,ECRNO,ITEMNO,ITEMDESPTION,FZRELATION,CHANGETYPE,BEFORECHANGE,AFTERCHANGE,PROPOSE,REMARK) values(:g,:p,:q,:w,:v,:r,:t,:y,:u,:o)');
Parameters.ParamByName('g').Value:=g;
Parameters.ParamByName('p').Value:=a;
Parameters.ParamByName('q').Value:=q;
Parameters.ParamByName('w').Value:=w;
Parameters.ParamByName('v').Value:=v;
Parameters.ParamByName('r').Value:=r;
Parameters.ParamByName('t').Value:=t;
Parameters.ParamByName('y').Value:=y;
Parameters.ParamByName('u').Value:=u;
Parameters.ParamByName('o').Value:=o;
ExecSQL;
ProgressBar1.Position:=ProgressBar1.Position+1;
end;
end;
Screen.Cursor:=crDefault;
Application.ProcessMessages;
ProgressBar1.Position:=0;
RefreshECRN;
RefreshGroupItem;
SendToEmail;
Zt:=1;
end;
finally
ExcelApp.ActiveWorkBook.Saved:=True;
WorkBook.Close;
ExcelApp.Quit;
end;
end;
end
else
begin
MessageDlg('請選擇要導入的Excel檔案!',mtWarning,[mbOK],0);
Exit;
end;
end;