2014.12.28
程序清单:
FunctionSQLTableInsert(aFileNameI:string):string;
var
Tablelist: TStringlist; //TStringslist是字符串列表类型
ERowCount,EColCount,TableListL: integer; //列、行数
MyAdo1: TAdoQuery;
nPos: integer;
i,j,x,x_1or2,y: integer; //整型
wordname,tablename,Paraname,middle_vary,aFileNameC: string; //字符串型
SQLExcel,SExcWorkBook: Variant; //Variant 变量存储任何数据类型
Reg: TRegistry;
//获取该数据库所有表名
begin
TableList := TStringList.Create; //Tablelist启用
Form1.ADOCon.GetTableNames(TableList); //获取表名,并存储在TableList中
TableListL := TableList.Count; //TableListL指数据库中表的数量
ifTableListL=0 then
MessageBox(0, '数据库无表!',PChar('提示'),MB_OK or MB_ICONWARNING)
else
//.....................分割线...................................................
// if list.Count<>0 then
begin
//将Ecel文件名与sql数据库表名一一作对比
forj:=0 to TableListL-1 do
begin
middle_vary := TableList[j]; //表名
showmessage(middle_vary+#13+aFileNameI); //测试语句
aFileNameC := ChineseFileName(aFileNameI); //将文件名只留下汉字
nPos:=AnsiPos(aFileNameC,middle_vary);
// showmessage(aFileNameI); //测试语句
//判断npos的值,若不为0,则进行插入文件数据操作;为0,则不进行任何操作
//.....................下为AnsiPos函数测试语句.................................
// if nPos<>0 then
// MessageBox(0, 'cheng',PChar('提示'),MB_OK or MB_ICONWARNING)
// else
// MessageBox(0, '失败',PChar('提示'),MB_OK or MB_ICONWARNING);
//.....................分割线...................................................
if nPos<>0 then
begin
try
SQLExcel:= CreateOleObject('Excel.Application'); //需要在interface uses下声明Comobj
SQLExcel.Visible := false;//设置Excel是否可见
SExcWorkBook:= SQLExcel.WorkBooks.Open('D:\Myapp\R1.0\注:只存放导入文件(暂支持.txt,.xls后缀)\'+aFileNameI);
ERowCount:=SExcWorkBook.worksheets[1].Usedrange.Rows.count; //hang
EColCount:= SExcWorkBook.worksheets[1].Usedrange.columns.count; //lie
ShowMessage('excelhave'+inttostr(ERowCount)+'Row'+inttostr(EColCount)+'Col');
//判断Excel表第一行是否为标题,SameText()比较两字符串是否相等
// if SameText(trim(SQLExcel.Cells[1,1].Value),trim(list[j])) then
x_1or2:= 2;
// else
// x_1or2:= 1;
//.......................excel数据导入sql数据库表...............................
tablename:=trim(TableList[j]);
ShowMessage(tablename+#13+'从第'+inttostr(x_1or2)+''+'行开始');
MyAdo1:=TAdoQuery.Create(nil);
//创建一个ADO数据控件TADOQuery的对象,对象名MyAdo ,对象的所有者为空
MyAdo1.Connection:=Form1.ADOCon;
for x:=x_1or2+1 to ERowCount-2 do //行循环
begin
if trim(SQLExcel.Cells[x,1].Value)<>'' then
//....当excel表第x行第一列不为空时,进行赋值操作;反之不进行任何操作............
begin
for y:=2 to EColCount do //列循环
begin
iftrim(SQLExcel.Cells[x_1or2,y].Value)<>'' then
//....当EXCEl表标题哪列不为空时进行赋值操作,反之不进行任何操作 ................
begin
if y>2 then
begin
wordname:= Concat(''+wordname+','+trim(SQLExcel.Cells[x_1or2,y].Value)+'');
if(Trim(SQLExcel.Cells[x,y].Value))<>'' then
paraname:=Concat(''+paraname+','+#39+Trim(SQLExcel.Cells[x,y].Value)+#39+'')
else
paraname:=Concat(''+paraname+','+#39+'NULL'+#39+'');
end;
if y=2 then
begin
wordname:=trim(SQLExcel.Cells[x_1or2,y].Value);
// ShowMessage(wordname);
paraname:=''+#39+Trim(SQLExcel.Cells[x,y].Value)+#39+'';
// ShowMessage(paraname);
end;
end;
end;
ShowMessage(wordname+#13+paraname); //测试sql插入语句
with MyAdo1 do
begin
close;
SQL.Clear;
SQL.add('insert into'+tablename+' ('+wordname+') values ('+paraname+')');
//SQL.add('insert into'+tablename+'('+wordname+') values('+#39+paraname+#39+')');
//插入:insert into table1(field1,field2) values(value1,value2)
// parameters.ParamByName(''+wordname+'').Value:=Trim(SQLExcel.worksheets[1].Cells[x,y].value);
ExecSQL;
end;
end;
end;
//.....................分割线...................................................
// SEx,cWorkBook.Close;
SQLExcel.Quit;
showMessage('导入数据成功');
Except
SQLExcel.Quit;
Exit;
end;
end
else
//..............异常机制处理:判断系统是否安装了MS Excel ......................
showMessage('开始检测系统是否安装有Excel');
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CLASSES_ROOT;
if Reg.OpenKey('\Excel.Sheet\CurVer',False) then
showMessage('已安裝Excel!')
else
showMessage('沒安裝Excel!');
Reg.Free;
end;
Exit;
MessageBox(0, '失败',PChar('提示'),MB_OK or MB_ICONWARNING);
//.....................分割线...................................................
end;
end;
TableList.Free; //释放
end;
程序思路:
1、各参数,控件初始化定义
2、获取SQLR1.0数据库所有表名,并判断SQLR1.0数据库有无表,无表提示用户新建表;有表,则进行插入数据操作
3、将文件名与表名作比较,若与文件名无对应的表名,则提示用户该文件名未插入数据成功;反之,进行下一步操作
4、依照3,若成功进入下一步操作,则进行真正的数据插入功能,成功插入数据后提示用户已操作完毕;未成功插入数据则提示操作失败