excel中数据安插到sql数据库表中程序
excel中数据插入到sql数据库表中程序
大家帮忙看下
程序如下:
try
//获取excel表的行列数,下面代码获取的excel中的行数和列数,不包括开头的空行和空列
ERowCount:= SExcWorkBook.worksheets[1].Usedrange.Rows.count;
EColCount:= SExcWorkBook.worksheets[1].Usedrange.columns.count;
//判断Excel表第一行是否为标题,SameText()比较两字符串是否相等
if SameText(trim(SQLExcel.Cells[1,1].Value),trim(list[j])) then
x_1or2:= 2
else
x_1or2:= 1;
ShowMessage('从第'+inttostr(x_1or2)+''+'行开始');
//.......................excel数据导入sql数据库表...............................
for x:=x_1or2+1 to EColCount+1 do //行循环
// begin
// MyAdo1:=TAdoQuery.Create(nil);
//创建一个ADO数据控件TADOQuery的对象,对象名MyAdo ,对象的所有者为空
// MyAdo1.Connection:=ADOConsql;
for y:=1 to ERowCount+1 do //列循环
begin
wordname:= trim(SQLExcel.Cells[1,1].Value); //这行出的问题,找了半天也不知道怎么回事
{ with MyAdo1 do
begin
close;
SQL.Clear;
SQL.add('insert into trim(list[j])(wordname) values (:wordname)');
parameters.ParamByName('wordname').Value:=Trim(SQLExcel.worksheets[1].Cells[x,y].value);
ExecSQL;
end;
}
end;
end;
//.....................分割线...................................................
// SExcWorkBook.Close;
SQLExcel.Quit;
Except
MessageBox(self.Handle,'数据导入失败!','系统提示',0);
SQLExcel.Quit;
Exit;
end;
wordname:= trim(SQLExcel.Cells[1,1].Value); //这行出的问题,找了半天也不知道怎么回事
报错如下图

------解决思路----------------------
SQL语句,是一个文本语言。它头尾只用一个单引号;
它引用数据都要转换成字符,对于具体数据都要变换成字符串形式,所以头尾要加入单引号。
字符串中的单引号,Pascal语言是通过两个单引号表示。
对于引用变量,(1)变量应是字符串类型,(2)变量要头尾要使用单引号。
注意:引用也可以使用#39,它就是一个单引号。
'insert into 表名 (字段名1,字段名2 ...) values(字符数据1,字符数据2...)'
你的可能错误:
1、list[j] 是否是字符串,是否是引用的表名,可以通过ShowMessage(list[j])检查一下。
2、values引用数据都是转换成字符串,如果使用变量,变量的头尾加上单引号;
所以,你的SQL应修改为:
wordname word名
wordText Word文本值
'insert into trim(list[j]) (wordname) values (‘+#39+wordText+#39+‘)'
大家帮忙看下
程序如下:
try
//获取excel表的行列数,下面代码获取的excel中的行数和列数,不包括开头的空行和空列
ERowCount:= SExcWorkBook.worksheets[1].Usedrange.Rows.count;
EColCount:= SExcWorkBook.worksheets[1].Usedrange.columns.count;
//判断Excel表第一行是否为标题,SameText()比较两字符串是否相等
if SameText(trim(SQLExcel.Cells[1,1].Value),trim(list[j])) then
x_1or2:= 2
else
x_1or2:= 1;
ShowMessage('从第'+inttostr(x_1or2)+''+'行开始');
//.......................excel数据导入sql数据库表...............................
for x:=x_1or2+1 to EColCount+1 do //行循环
// begin
// MyAdo1:=TAdoQuery.Create(nil);
//创建一个ADO数据控件TADOQuery的对象,对象名MyAdo ,对象的所有者为空
// MyAdo1.Connection:=ADOConsql;
for y:=1 to ERowCount+1 do //列循环
begin
wordname:= trim(SQLExcel.Cells[1,1].Value); //这行出的问题,找了半天也不知道怎么回事
{ with MyAdo1 do
begin
close;
SQL.Clear;
SQL.add('insert into trim(list[j])(wordname) values (:wordname)');
parameters.ParamByName('wordname').Value:=Trim(SQLExcel.worksheets[1].Cells[x,y].value);
ExecSQL;
end;
}
end;
end;
//.....................分割线...................................................
// SExcWorkBook.Close;
SQLExcel.Quit;
Except
MessageBox(self.Handle,'数据导入失败!','系统提示',0);
SQLExcel.Quit;
Exit;
end;
wordname:= trim(SQLExcel.Cells[1,1].Value); //这行出的问题,找了半天也不知道怎么回事
报错如下图
------解决思路----------------------
SQL语句,是一个文本语言。它头尾只用一个单引号;
它引用数据都要转换成字符,对于具体数据都要变换成字符串形式,所以头尾要加入单引号。
字符串中的单引号,Pascal语言是通过两个单引号表示。
对于引用变量,(1)变量应是字符串类型,(2)变量要头尾要使用单引号。
注意:引用也可以使用#39,它就是一个单引号。
'insert into 表名 (字段名1,字段名2 ...) values(字符数据1,字符数据2...)'
你的可能错误:
1、list[j] 是否是字符串,是否是引用的表名,可以通过ShowMessage(list[j])检查一下。
2、values引用数据都是转换成字符串,如果使用变量,变量的头尾加上单引号;
所以,你的SQL应修改为:
wordname word名
wordText Word文本值
'insert into trim(list[j]) (wordname) values (‘+#39+wordText+#39+‘)'