回 帖 发 新 帖 刷新版面

主题:DELPHI+SQL+EXCL,有酬劳,求教了!

求教,我们部门有这么一需求,各个客户端都可以建立一个EXCL文件,输入一些数据,最后保存的时候要把EXCL转换成一个表(表的字段是动态的)保存到服务器上,下次如果有谁根据表名查询的时候,又能从数据库转换成EXCL,并且锁定(就是第一个打开表的人有修改权限),后面的人只能只读,就这么个简单的实现,可偶实现不了,现在求教网络达人,有一点报酬(500元),表心意!先谢谢

回复列表 (共2个回复)

沙发

我用的是adoquery和adostoreproc
存储过程如下
Create proc InFromExcel
    @table_name nvarchar(1000)=Null,
    @sql nvarchar(1000)=Null
As
declare @sql1 nvarchar(1000)
begin
    if exists(select * from sysobjects where id=object_id(N'[dbo].['+@table_name+']')
        and objectproperty(id,N'IsUserTable')=1)
    begin
             Set @Sql1='drop table '+ @table_name
             exec sp_executesql @sql1        
    end
    exec sp_executesql @sql
end
    
GO
procedure TForm1.SpeedButton5Click(Sender: TObject);
var
  I: Integer;
  sqltemp,sqltemp1,sqltemp2,table_name:string;
begin
        if not Qry1.Active then Exit;
        table_name:=InputBox('输入表名','','u_excel');
        if table_name='' then
        begin
                Application.MessageBox('请输入要保存的表的名称 !','信息',MB_ICONINFORMATION+MB_OK);
                Exit;
        end;
        for I := 0 to DBGrid1.FieldCount-1 do    // Iterate
        begin
                sqltemp1:=sqltemp1+'['+DBGrid1.Fields[i].FullName+'],';
                sqltemp:=sqltemp+'['+DBGrid1.Fields[i].FullName+'] varchar(1000),';
        end;    // for
        sqltemp1:=Copy(sqltemp1,1,Length(sqltemp1)-1);
        sqltemp:=Copy(sqltemp,1,Length(sqltemp)-1);
        sqltemp:='Create table '+Trim(table_name)+' (id varchar(10),'+sqltemp+')';
        //建立表
        with SP1 do
        begin
                Close;
                ProcedureName:='InFromExcel;1';
                Parameters.Refresh;
                Parameters.ParamByName('@table_name').Value:=Trim(table_name);
                Parameters.ParamByName('@sql').Value:=sqltemp;
                ExecProc;
                Close;
        end;    // with
        //导入数据
        Qry1.First;
        while not Qry1.Eof do
        begin
                with Qry2 do
                begin
                        sqltemp2:='';
                        for I := 0 to Qry1.FieldCount - 1 do    // Iterate
                        begin
                                sqltemp2:=sqltemp2+''''+Qry1.Fields[i].AsString+''',';
                        end;    // for
                        sqltemp2:=Copy(sqltemp2,1,Length(sqltemp2)-1);
                        Close;
                        SQL.Clear;
                        SQL.Add('insert into u_excel(id,'+sqltemp1+') ');
                        SQL.Add('values ('+''''+Edit1.Text+''','+sqltemp2+')');
                        ExecSQL;
                end;    // with
                Qry1.Next;
        end;    // while
        Application.MessageBox('成功导入到SQL Server 2000中 !','信息',MB_ICONINFORMATION+MB_OK);
end;
//希望对你有帮助

板凳

联系我:QQ:317383432(注明:Programfan)

我来回复

您尚未登录,请登录后再回复。点此登录或注册