急!!在delphi中如何将sql server 2000数据库中的一个表中的内容全部导到excel表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急!!在delphi中如何将sql server 2000数据库中的一个表中的内容全部导到excel表中相关的知识,希望对你有一定的参考价值。

例如将将sql server 2000数据库中表名为WORK的表中的所有记录导到excel中。可以利用ExcelApplication、ExcelWorkbook控件
若方法好,还有加分
不用查询,只是将表中的数据全存到excel中,而且我的数据库连接用的是bde,不是ado

其中BUTTON5是你界面上的“导出”按钮,而WRITEEXCEL是需要你再PRIVATE里定义的一个函数,BDE或者ADO都无所谓,你只要把你的表对应好就可以了。
procedure Tqueryform.Button5Click(Sender: TObject);
var
sname:string; //这里是用来取你界面上输入的EXCEL表名
begin
sname:=edit1.Text;
if sname<>'' then //用户输入了表名
// title:='所需数据';
writeexcel(sname)
else
writeexcel('查询结果'); //否则存为查询结果.exl
end;
procedure Tqueryform.writeexcel(sname:string);
var
j,row: integer;
filename: string;
begin
filename := concat((extractfilepath(application.exename)+'excel\'), sName, '.xls');
//保存在程序所在文件夹下的一个叫做excel的文件夹下面
//初始化
try
excelapplication1:=Texcelapplication.Create(application);
ExcelWorksheet1 := TExcelWorksheet.Create(Application);
ExcelWorkbook1 := TExcelWorkbook.Create(Application);
ExcelApplication1.Connect;
except
Application.Messagebox('Excel 没有安装!', 'Hello', MB_ICONERROR + mb_Ok);
Abort;
end;
//数据的导出
try
begin
ExcelApplication1.Workbooks.Add(EmptyParam, 0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
//给表格的每个单元附值
excelworksheet1.Cells.Item[1,1]:='工号'; //这个根据你的数据表对应的变量名
excelworksheet1.Cells.Item[1,2]:='日期';
excelworksheet1.Cells.Item[1,3]:='表型';
excelworksheet1.Cells.Item[1,4]:='地址';
excelworksheet1.Cells.Item[1,5]:='原因';
row:=2;
maindm.ADOQuery2.First;
while not maindm.ADOQuery2.Eof do
begin
for j:=1 to 5 do
begin
excelworksheet1.Cells.Item[row,j]:=maindm.ADOQuery2.Fields[j-1].AsString;
end; //end ...for
maindm.ADOQuery2.Next;
row:=row+1; //得到查询后的行数
end;
ExcelWorksheet1.SaveAs(filename);
Application.Messagebox(pchar('数据成功导出' + filename), 'Hello',mb_Ok);
end //end try...finally
//结束释放空间
finally
ExcelApplication1.Disconnect; //断开连接
ExcelApplication1.Quit; //退出EXCEL
ExcelApplication1.Free;//释放空间
ExcelWorksheet1.Free; //释放空间
ExcelWorkbook1.Free; //释放空间
end;
end;
参考技术A //传入连接字符串、表的查询语句、要保存的excel的名称就可以了。
Procedure TdqcFunction.Db_Excel_Export(Connstr_Sql,SelectSql:String;SaveName:String);
var
xlApp,xlBook,xlSheet,xlQuery: Variant;
adoConnection,adoRecordset: Variant;
Begin
Try
adoConnection := CreateOleObject('ADODB.Connection');
adoRecordset := CreateOleObject('ADODB.Recordset');
adoConnection.Open(Connstr_Sql);
adoRecordset.CursorLocation := adUseClient;
adoRecordset.Open(SelectSql,adoConnection,1,3);
xlApp := CreateOleObject('Excel.Application');
xlBook := xlApp.Workbooks.Add;
xlSheet := xlBook.Worksheets['sheet1'];
xlApp.Visible := False;
//把查询结果导入EXCEL数据
xlQuery := xlSheet.QueryTables.Add(adoRecordset,xlSheet.Range['A1']); //关键是这一句
xlQuery.FieldNames := True;
xlQuery.RowNumbers := False;
xlQuery.FillAdjacentFormulas := False;
xlQuery.PreserveFormatting := True;
xlQuery.RefreshOnFileOpen := False;
xlQuery.BackgroundQuery := True;
//xlQuery.RefreshStyle := xlInsertDeleteCells;
xlQuery.SavePassword := True;
xlQuery.SaveData := True;
xlQuery.AdjustColumnWidth := True;
xlQuery.RefreshPeriod := 0;
xlQuery.PreserveColumnInfo := True;
xlQuery.FieldNames := True;
xlQuery.Refresh;
xlSheet.SaveAs(SaveName);
Except
End;
End;

SQL Server中三个表两两关联 怎么实现查询??急!!

现有一数据库,包含三张表,每表内容如下:
管理员表
用户名、密码、区域
学员表
姓名、性别、学员号、所在学校
校区表
所在学校、区域
问题如下:
我在管理员登陆页面设置账户名、密码输入,点击登录按钮能直接把管理员所在区域的学校的学员信息检索出来。即 我通过密码、用户名选出对应的区域,通过区域选出该区域下包括的所有学校,通过所在学校再筛选出学员表的全部信息。
三个表两两相互关联,怎么能直接管理员一成功登陆就直接能在GridView里显示学员信息。
希望大家帮帮忙啊 !!!!!

select a.*

from 学员表 a

inner join 校区表 b on a.所在学校=b.所在学校

inner join 管理员表 c on b.区域=c.区域

where c.用户名=@用户名 and c.密码=@密码

注意:最好把登陆和列表查询分开来做,因为无论是从安全还是程序实现的角度来看,都比较好。

扩展资料:

mysql三张表联合查询总结

一、表结构

1、图片表(存放图片)

CREATE TABLE `tb_pic` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',

`url` varchar(255) DEFAULT NULL COMMENT '图片 url 路径',

`description` varchar(255) DEFAULT NULL COMMENT '图片描述',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='图片表';

2、标签表(存放标签)

CREATE TABLE `tb_flag` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',

`name` varchar(255) DEFAULT NULL COMMENT '标签名称',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='标签表';

3、图片标签链接表(图片、标签中间表)

CREATE TABLE `tb_pic_flag_link` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长 id',

`pic_id` int(11) DEFAULT NULL COMMENT '图片 id',

`flag_id` int(11) DEFAULT NULL COMMENT '标签 id',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='图片标签链接表';

二、实现的效果 

1、查询单张图片的描述 

效果: 

查询语句:

SELECT p.id, p.url, p.description, GROUP_CONCAT(f.`name`)

from tb_pic p, tb_pic_flag_link l, tb_flag f

where p.id = l.pic_id and l.flag_id=f.id and p.id=1;

2、查询所有图片的描述 

效果: 

查询语句:

SELECT p.id, p.url, p.description, GROUP_CONCAT(f.`name`)

from tb_pic p, tb_pic_flag_link l, tb_flag f

where p.id = l.pic_id and l.flag_id=f.id GROUP BY p.id;

参考技术A

select a.*

from 学员表 a

inner join 校区表 b on a.所在学校=b.所在学校

inner join 管理员表 c on b.区域=c.区域

where c.用户名=@用户名 and c.密码=@密码

扩展资料

在SQL Server中使用join on 【inner join on】关联多表查询

select cyb.id, xa.name 

from GeneShop.dbo.t_member_cyb cyb 

join GeneShop.dbo.xx_admin xa  on xa.id = cyb.hzjg_id 

join GeneShop.dbo.t_bg bg  on bg.cyb_id = cyb.id 

where (cyb.cybbm=402045 and bg.product_id = 121) or (cyb.cybbm=402070 and bg.product_id = 118)

具体情况若是判断逻辑关系是否正确可以使用如下代码: 

Select dbo.usersinfo.usercode,dbo.ryqxb.usercode,dbo.ryqxb.reportto,b.ename 

FROM DBO.UsersInfo,DBO.UsersInfo B,dbo.RYQXB 

where DBO.UsersInfo.UserCode=dbo.RYQXB.Usercode AND 

dbo.RYQXB.REPORTTO=B.Ename 

参考资料来源:百度百科 - SQL JOIN

参考技术B

如,现在有以下三张表:

管理员表:
用户名、密码、区域
学员表:
姓名、性别、学员号、所在学校
校区表:
所在学校、区域


现在要查询一条完整的信息,可以用这种方法写sql语句:

select * from 管理员表 a,学员表 b,校区表 c where a.区域=c.区域 and b.所在学校=c.所在学校;

注意:可以把*替换成自己想查的表的字段,但必须带上前缀,比如要查管理员表中的用户名,可以写做a.用户名。

参考技术C 首先,我建议你把登陆和列表查询分开来做,无论是从安全还是程序实现的角度来看,都是!
登陆后,用session存储区域信息,然后像以下查询
select 学员表.* from 学员表,校区表 where 学员表.所在校区 = 校区表.所在校区

当然,你非要直接做也行
select 学员表.* from 学员表,校区表,管理员表 where 学员表.所在校区=校区表.所在校区 and 校区表.区域 = 管理员表.区域 where 用户名 = ? and 密码 = ?
如果你是这样写的话,建议做一下安全性校验,不然,很容易被注入攻击追问

我想的不同区域的管理员只能看到本区域学员的信息 这样不是更安全么

追答

一样的啊..只要你控制好就行..现在没有人登陆和查询一起做的..都是登陆先单独校验权限,校验完权限再做其他操作~

参考技术D select a.*
from 学员表 a
inner join 校区表 b on a.所在学校=b.所在学校
inner join 管理员表 c on b.区域=c.区域
where c.用户名=@用户名 and c.密码=@密码本回答被提问者采纳

以上是关于急!!在delphi中如何将sql server 2000数据库中的一个表中的内容全部导到excel表中的主要内容,如果未能解决你的问题,请参考以下文章

sql server 级联更新 急急急!

如何将做好的delphi放入qq空间或网页中得到应用???急

急:sql server 2000如何映射端口才能从外网访问?

sql server 中如何查询学生表中每位学生全部科目中最高分对应的那行数据呢? 急急急 !

如何使用 Delphi 7 ADOQuery.ExecSQL 在 SQL Server 上更新 DateTime,保留毫秒?

delphi 如何在Delphi中执行将Excel表格里的内容导入数据库中相应表