unit drsj; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids; type TForm3 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; ADOQuery1: TADOQuery; DBGrid1: TDBGrid; DataSource1: TDataSource; Label1: TLabel; Edit1: TEdit; Label2: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form3: TForm3; coon: string; implementation uses jdfrm, dmfrm; {$R *.dfm} procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction); begin action := cafree; end; procedure TForm3.FormDestroy(Sender: TObject); begin Form3 := nil; end; procedure DetachString(var SaveSt: TStringList; const DetachSt, DetachCh: string); var DetachLen: Integer; St, S, Str: string; i: Integer; begin St := DetachSt; S := DetachCh; DetachLen := Length(DetachCh); if SaveSt = nil then Exit; while True do begin i := Pos(S, St); if i <= 0 then begin if St <> '' then SaveSt.Add(St); break; end; Str := Copy(St, 0, i - 1); St := Copy(St, i + DetachLen, Length(DetachSt) - i); SaveSt.Add(Str); end; end;procedure TForm3.Button1Click(Sender: TObject); var filename: string; slist, str: tstringlist; i: integer; s, rcklb, strsql: string; cxquery: Tadoquery; begin rcklb := ''; slist := Tstringlist.Create; file://存放文件所有内容--声明 if opendialog1.Execute then begin filename := opendialog1.FileName; slist.LoadFromFile(filename); file://实现 for i := 0 to slist.Count - 1 do file://循环实现对每行操作 begin str := Tstringlist.Create; s := slist[i]; Detachstring(str, s, ','); file://调用自定义函数 分割字符串(针对每行重复操作) if str.Count = 3 then file://屏蔽非标准数据 begin if not assigned(jdform) then file://标识导入进程 begin jdform := Tjdform.Create(application); jdform.Show; end; jdform.ProgressBar1.Max := slist.Count-2; file://查询数据库 得出入库出库标识 cxquery := Tadoquery.Create(self); cxquery.Connection := dmform.Adoconnection1; with cxquery do begin close; sql.Text := 'select * from ry where bh=''' + str[0] + ''''; open; if not eof then file://检查当前数据是条码还是入出库标识 begin rcklb := fieldbyname('rm').AsString; continue; file://如果是标识 此条数据不保存 保存接下来的数据 end; if rcklb <> '' then file://主要目的为屏蔽第一条标识数据 begin close; strsql := 'insert into tm(tm,ckr,smrq,smsj,sj) values(''' + str[0] + ''','; strsql := strsql + '''' + rcklb + ''',''' + str[1] + ''',''' + str[2] + ''','; strsql := strsql + '#' + FormatDateTime(' yyyy - MM - dd ', date) + '#)'; sql.Text := strsql; ExecSQL; dbgrid1.Columns[0].Width:=50; end; end; end else begin showmessage('检测到不符合格式数据,读取中止!'); str.Free; slist.Free; if jdform <> nil then jdform.Close; exit; end; str.Free; jdform.ProgressBar1.Position := i; end; slist.Free; showmessage(' 输入成功 !'); end; if jdform <> nil then jdform.Close; adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from tm order by sj desc,smrq desc,smsj desc'); adoquery1.Open; edit1.Text := inttostr(adoquery1.RecordCount); end; end.
进度条用的是ProgressBar1放到一个窗体上,然后等录入数据的时候,调用 if not assigned(jdform) then file://标识导入进程 begin jdform := Tjdform.Create(application); jdform.Show; end; 把这个窗体SHOW出来,然后在最后一段 if jdform <> nil then jdform.Close; adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('select * from tm order by sj desc,smrq desc,smsj desc'); adoquery1.Open; edit1.Text := inttostr(adoquery1.RecordCount); end; 这些读数据!·
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids;
type
TForm3 = class(TForm)
Button1: TButton;
OpenDialog1: TOpenDialog;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
coon: string;
implementation
uses jdfrm, dmfrm;
{$R *.dfm}
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := cafree;
end;
procedure TForm3.FormDestroy(Sender: TObject);
begin
Form3 := nil;
end;
procedure DetachString(var SaveSt: TStringList; const DetachSt, DetachCh: string);
var
DetachLen: Integer;
St, S, Str: string;
i: Integer;
begin
St := DetachSt;
S := DetachCh;
DetachLen := Length(DetachCh);
if SaveSt = nil then
Exit;
while True do
begin
i := Pos(S, St);
if i <= 0 then
begin
if St <> '' then
SaveSt.Add(St);
break;
end;
Str := Copy(St, 0, i - 1);
St := Copy(St, i + DetachLen, Length(DetachSt) - i);
SaveSt.Add(Str);
end;
end;procedure TForm3.Button1Click(Sender: TObject);
var
filename: string;
slist, str: tstringlist;
i: integer;
s, rcklb, strsql: string;
cxquery: Tadoquery;
begin
rcklb := '';
slist := Tstringlist.Create; file://存放文件所有内容--声明
if opendialog1.Execute then
begin
filename := opendialog1.FileName;
slist.LoadFromFile(filename); file://实现
for i := 0 to slist.Count - 1 do file://循环实现对每行操作
begin
str := Tstringlist.Create;
s := slist[i];
Detachstring(str, s, ','); file://调用自定义函数 分割字符串(针对每行重复操作)
if str.Count = 3 then file://屏蔽非标准数据
begin
if not assigned(jdform) then file://标识导入进程
begin
jdform := Tjdform.Create(application);
jdform.Show;
end;
jdform.ProgressBar1.Max := slist.Count-2;
file://查询数据库 得出入库出库标识
cxquery := Tadoquery.Create(self);
cxquery.Connection := dmform.Adoconnection1;
with cxquery do
begin
close;
sql.Text := 'select * from ry where bh=''' + str[0] + '''';
open;
if not eof then file://检查当前数据是条码还是入出库标识
begin
rcklb := fieldbyname('rm').AsString;
continue; file://如果是标识 此条数据不保存 保存接下来的数据
end;
if rcklb <> '' then file://主要目的为屏蔽第一条标识数据
begin
close;
strsql := 'insert into tm(tm,ckr,smrq,smsj,sj) values(''' + str[0] + ''',';
strsql := strsql + '''' + rcklb + ''',''' + str[1] + ''',''' + str[2] + ''',';
strsql := strsql + '#' + FormatDateTime(' yyyy - MM - dd ', date) + '#)';
sql.Text := strsql;
ExecSQL;
dbgrid1.Columns[0].Width:=50;
end;
end;
end
else
begin
showmessage('检测到不符合格式数据,读取中止!');
str.Free;
slist.Free;
if jdform <> nil then
jdform.Close;
exit;
end;
str.Free;
jdform.ProgressBar1.Position := i;
end;
slist.Free;
showmessage(' 输入成功 !');
end;
if jdform <> nil then
jdform.Close;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from tm order by sj desc,smrq desc,smsj desc');
adoquery1.Open;
edit1.Text := inttostr(adoquery1.RecordCount);
end;
end.
if not assigned(jdform) then file://标识导入进程
begin
jdform := Tjdform.Create(application);
jdform.Show;
end;
把这个窗体SHOW出来,然后在最后一段
if jdform <> nil then
jdform.Close;
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from tm order by sj desc,smrq desc,smsj desc');
adoquery1.Open;
edit1.Text := inttostr(adoquery1.RecordCount);
end;
这些读数据!·
学习!~
________________________________
你的Select语句里不要包含那个大数据的字段,只是在需要的时候一个个取不就行了.