关闭

Excel To SqlServer huaervvhuaer(原作)

624人阅读 评论(0) 收藏 举报

uses
  ComObj, Grids, Db, DBTables, ADODB;


procedure load(rowCount,colCount:integer; fileName:String; var grid:TStringGrid);
//从Excel中读取数据到 Grid
var
  v:variant;
  i,j:integer;
begin
  grid.RowCount:=rowCount;
  grid.ColCount:=colCount;
  v:=createoleobject('Excel.Application');//创建OLE对象
  try
    V.workBooks.Open(fileName);
    for i:=1 to rowCount do
      for j:=1 to colCount do
        grid.Cells[j-1,i-1]:=v.workbooks[1].sheets[1].cells[i,j];
    v.workbooks[1].close;
  finally
    v.quit;
  end
end;

procedure save(tableName:String;grid:TStringGrid);
// 将 Grid 中的数据保存到 SQL Server 数据表中
var
  valuesStr:string;
  i,j:integer;
begin
  if not CreateTable(tableName,grid.ColCount) then
  begin
    showmessage('Error On CreateTable');
    exit;
  end;
  for i:=1 to grid.RowCount-1 do
  begin
    valuesStr:=inttostr(i)+',';
    for j:=0 to grid.ColCount-1 do
      valuesStr:=valuesStr+Grid.Cells[j,i]+',';

    if not insertone(tableName,valuesStr) then
    begin
      showmessage('Error On Row('+inttostr(i)+')');
      exit;
    end;
  end;
  showmessage('数据导入成功');
end;

function insertone(const tableName, ValuesStr: string): boolean;
// 插入一条记录
var
  tmpstr,s:string;
  p:integer;
begin
  result:=true;
  tmpstr:=ValuesStr;
  with query1 do
  begin
    close;
    sql.Clear;
    sql.Add('insert into '+tableName+' values(');
    s:='';
    while tmpstr<>'' do
    begin
      p:=pos(',',tmpstr);
      s:=s+''''+copy(tmpstr,1,p-1)+''',';
      system.Delete(tmpstr,1,p);
    end;
    s:=copy(s,1,length(s)-1);
    sql.Add(s);
    sql.Add(')');
    try
      execsql;
    except
      result:=false;
    end;
  end;
end;

function CreateTable(const tableName:String; aFieldCount: integer): boolean;
// 创建表
var
  tmpstr:string;
  i:integer;
begin
  result:=true;
  tmpstr:='if exists (select * from sysobjects where Name='''
    +tableName+''') drop table '+tableName+' create table '+tableName+'(';

  for i:=1 to aFieldCount do
    tmpstr:=tmpstr+'F'+inttostr(i)+' varchar(50),';
  delete(tmpstr,length(tmpstr),1);
  tmpstr:=tmpstr+')';

  with query1 do
  begin
    close;
    sql.Clear;
    sql.Add(tmpstr);
    try
      execsql;
    except
      result:=false;
    end;
  end;
end;

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:391870次
    • 积分:5484
    • 等级:
    • 排名:第4830名
    • 原创:134篇
    • 转载:132篇
    • 译文:1篇
    • 评论:21条
    文章分类
    最新评论