procedure TForm1.Button4Click(Sender: TObject); var str1,str2,str3:string; Function Jisuan(): string; label a; begin str3:=ADOQuery1.fieldbyname('归位深度').AsString ; //初始化 a: str1:=ADOQuery2.fieldbyname('F4').AsString; str2:=ADOQuery2.fieldbyname('F2').AsString; if (str1 <> '') and (str2 <> '') then begin //都不为空 if (strtofloat(str3)>=strtofloat(str2)) and (strtofloat(str3)<=strtofloat(str1)) then begin //showmessage('找到了'); adoquery1.Edit; adoquery1.FieldByName('层号').AsString:=ADOQuery2.Fields[0].Text; adoquery1.FieldByName('井段').AsString:=str2+'~'+str1; end else begin //showmessage('没有合适的'); with ADOQuery2 Do begin next; if EOF then showmessage('这条数据有误,请手动修改吧!') else goto a; end; end; end else //有空的情况 begin //showmessage('有空的!'); with ADOQuery2 Do begin next; if EOF then showmessage('这条数据有误,请手动核实!') else begin goto a; end; end; end;end; begin with ADOQuery1 Do begin First; //将记录指针指向第一条记录 while not EOF do begin Jisuan(); next; //修改下一条记录 with adoquery2 do begin first; end; end; end;end;
例如:EXCEL表的F这个数据列含有特殊的符号,要将其转为文本型,只存表格一次:uses ComObj;{--------------需引用的单元}procedure TForm1.Button2Click(Sender: TObject); var v:Variant; begin if OpenDialog1.Execute then begin v := CreateOleObject( 'Excel.Application' ); v.WorkBooks.Open(OpenDialog1.FileName); v.ActiveSheet.Range[ 'F:F' ].select;{---选择整列---} v.Selection.NumberFormatLocal:='@';{---设定格式为文本--} v.ActiveWorkbook.Save; v.ActiveWorkbook.close; v.quit; end; end;
var
str1,str2,str3:string;
Function Jisuan(): string;
label a;
begin
str3:=ADOQuery1.fieldbyname('归位深度').AsString ; //初始化
a: str1:=ADOQuery2.fieldbyname('F4').AsString;
str2:=ADOQuery2.fieldbyname('F2').AsString;
if (str1 <> '') and (str2 <> '') then
begin //都不为空 if (strtofloat(str3)>=strtofloat(str2)) and (strtofloat(str3)<=strtofloat(str1)) then
begin
//showmessage('找到了');
adoquery1.Edit;
adoquery1.FieldByName('层号').AsString:=ADOQuery2.Fields[0].Text;
adoquery1.FieldByName('井段').AsString:=str2+'~'+str1;
end
else
begin
//showmessage('没有合适的');
with ADOQuery2 Do
begin
next;
if EOF then
showmessage('这条数据有误,请手动修改吧!')
else goto a;
end; end; end
else //有空的情况
begin
//showmessage('有空的!');
with ADOQuery2 Do
begin
next;
if EOF then
showmessage('这条数据有误,请手动核实!')
else
begin
goto a;
end;
end; end;end;
begin with ADOQuery1 Do begin First; //将记录指针指向第一条记录
while not EOF do
begin
Jisuan();
next; //修改下一条记录
with adoquery2 do
begin
first;
end; end;
end;end;
adoquery1.FieldByName('层号').AsString:=WideString(ADOQuery2.Fields[0].Text);
[code=Delphi(Pascal)]
var
ws:WideString;ws:=ADOQuery2.Fields[0].Text;
adoquery1.FieldByName('层号').AsString:=string(ws);/code]
要先设置EXCEL里的格式.以前我是在代码中设置的.现在不记得了.
不过我记得是调用EXCEL的ASC函数把所有列转换一下就OK了.
var
v:Variant;
begin
if OpenDialog1.Execute then begin
v := CreateOleObject( 'Excel.Application' );
v.WorkBooks.Open(OpenDialog1.FileName);
v.ActiveSheet.Range[ 'F:F' ].select;{---选择整列---}
v.Selection.NumberFormatLocal:='@';{---设定格式为文本--}
v.ActiveWorkbook.Save;
v.ActiveWorkbook.close;
v.quit;
end;
end;