Delphi 操作SQL server相关问题大全

2005-6-19 5:08:50
发表评语»»»

2005-6-24 14:11:07 在Sql Server的存储过程中调用Com组件 http://www.delphibbs.com/keylife/iblog_show.asp?xid=15247


2005-6-24 14:11:37 SQL Server数据汇总完全解析 http://www.delphibbs.com/keylife/iblog_show.asp?xid=15251


2005-6-24 14:20:22 sql server的备份与恢复(转) http://www.delphibbs.com/keylife/iblog_show.asp?xid=15091


2005-6-24 14:24:27 SQL 中日期的处理(收藏) http://www.delphibbs.com/keylife/iblog_show.asp?xid=14907


2005-6-24 14:26:23 SQL Server的OLE调用Delphi的COM组件 http://www.delphibbs.com/keylife/iblog_show.asp?xid=14991


2005-6-24 14:29:57 如何判断一个机器的MSSQL是否启动[个人收集] http://www.delphibbs.com/keylife/iblog_show.asp?xid=14987


2005-6-24 14:34:49 DELPHI中SQL程序的发布方法 http://www.delphibbs.com/keylife/iblog_show.asp?xid=14735


2005-6-24 14:35:37 通过ADOQuery调用SQLServer的存储过程 http://www.delphibbs.com/keylife/iblog_show.asp?xid=14706


2005-6-24 14:58:13 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法以 http://www.delphibbs.com/keylife/iblog_show.asp?xid=14310


2005-6-24 15:01:38 SQLserver小总结 http://www.delphibbs.com/keylife/iblog_show.asp?xid=14030


2005-6-24 15:02:59 sqlserver小结 http://www.delphibbs.com/keylife/iblog_show.asp?xid=11956


2005-6-24 15:04:39 收集SQL语句使用技巧!!!( http://www.delphibbs.com/keylife/iblog_show.asp?xid=13995


2005-6-24 15:07:11 自动创建数据库结构(sql2000+D6) http://www.delphibbs.com/keylife/iblog_show.asp?xid=13955


2005-6-24 15:08:58 ACCESS数据库升迁SQLSERVER注意事项 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13905


2005-6-24 15:12:08 在SQL语句中字段名含有括号时解决方法 例如:一个表aa中字段名为“姓名(cName)”“金额(iQuantity),则在查询时,就写为:
select [姓名(cName)] from aa
select sum([金额(iQuantity)]) from aa

也就是在字段名前后加上[]即可。


2005-6-24 15:12:43 SQL Server图像字段操作 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13843


2005-6-24 15:14:01 sqlserver2k小结 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13843


2005-6-24 15:16:20 怎么能一条一条地取出一个数据库中所有的表名 用游标吧;
declare @tableName nvarchar(128)

declare myCursor cursor for
select [name] from sysobjects where xtype = 'U'

open myCursor

fetch next from mycursor into @TableName

while @@Fetch_Status = 0
begin
print @TableName

fetch next from mycursor into @TableName
end

close mycursor
deallocate mycursor


from http://www.delphibbs.com/keylife/iblog_show.asp?xid=13702


2005-6-24 15:17:46 SQL Server相关操作 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13621


2005-6-24 15:23:16 SQL Server2000数据库文件损坏时如何恢复 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13576


2005-6-24 16:30:03 SQLSERVER 数据库置疑问题 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13576


2005-6-24 16:30:56 sql语句解决分页问题 select top @pagesize b.* from (select top @tre_pagesize 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

/*
@recordcount = 记录数
@pagesize = 每页记录数
@page = 当前页
@tre_pagesize = (@recordcount/@pagesize - page + 1) * @pagesize
*/


from: http://www.delphibbs.com/keylife/iblog_show.asp?xid=13574


2005-6-24 16:32:20 安装附加SQL数据库
s:='EXEC sp_attach_db @dbname = N'+char(39)+'数据库名'+char(39)+','+
'@filename1 = N'+char(39)+ExtractFilePath(paramstr(0))+'数据库文件_Data.MDF'+char(39)+
','+'@filename2 = N'+char(39)+ExtractFilePath(paramstr(0))+'数据库日志_Log.LDF'+char(39);
ADOCommand.CommandText := s;
ADOCommand.Execute();
Messagebox(handle,'数据库安装成功!','提醒',MB_OK+MB_ICONINFORMATION);
上例数据库文件必须在安装目录下,如果在其他文件夹,修改ExtractFilePath(paramstr(0))
例如:
EXEC sp_attach_db @dbname = N'KindMeet',
@filename1 = N'E:/ifly/work/SaiWei/KidMeet/database/KidMeet_Data.MDF',
@filename2 = N'E:/ifly/work/SaiWei/KidMeet/database/KidMeet_Log.LDF'


from: http://www.delphibbs.com/keylife/iblog_show.asp?xid=13568


2005-6-24 16:34:43 : 海量数据库的查询优化及分页算法方案 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13472


2005-6-24 16:40:49 SQL与Oracle对比 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13372


2005-6-24 17:26:17 SQL SERVER贴子 http://www.delphibbs.com/keylife/iblog_show.asp?xid=13046


2005-6-24 18:02:32 C/S程式访问远程数据库SQL SERVER2000的问题 http://www.delphibbs.com/keylife/iblog_show.asp?xid=12924


2005-6-25 7:24:47 在DELPHI中创建存储过程最简单的例子 http://www.delphibbs.com/keylife/iblog_show.asp?xid=15356


2005-6-25 17:32:34 转贴:T-SQL直接实现数据库的导入导出(收藏) http://www.delphibbs.com/keylife/iblog_show.asp?xid=14013


2005-6-25 17:48:07 好贴收藏-数据库类 http://www.delphibbs.com/keylife/iblog_show.asp?xid=12455


2005-6-27 8:59:35 标题 : ACCESS SQL 大全 http://www.delphibbs.com/keylife/iblog_show.asp?xid=12478


2005-6-27 10:23:05 理解SQL Server 2000的信任连接(Trusted connection) http://www.delphibbs.com/keylife/iblog_show.asp?xid=12236


2005-7-2 10:18:33 sql编程命名规范 http://www.delphibbs.com/keylife/iblog_show.asp?xid=1040


2005-7-2 10:21:26 SQL Server 体系结构的工作原理 http://www.delphibbs.com/keylife/iblog_show.asp?xid=982


2005-7-4 10:10:36 基于Delphi 6.0在SQL Server中存取图形文件的实现 http://www.delphibbs.com/keylife/iblog_show.asp?xid=15544

unit uBackUpNRestrre;

interface
uses
Adodb;

//**************************************************************
// 注意:在还原数据库的时候最好将ADOConnection的数据库设为Master
//**************************************************************

//备份指定的数据库到指定的文件
function BackUpSQLServerDbToFile(AdoConn:TAdoconnection;DataBaseName:String;FileName:String):Boolean;
//从指定的文件恢复指定的数据库
function RestoreSQLServerDbFromFile(AdoConn:TAdoconnection;DataBaseName:String;FileName:String):Boolean;

implementation

function BackUpSQLServerDbToFile(AdoConn:TAdoconnection;DataBaseName:String;FileName:String):Boolean;
begin
Try
Result:=False;
AdoConn.Execute('BackUp DATABASE '+DataBaseName+' TO Disk = '''+FileName+'''');
Result:=True;
finally
end;
end;


function RestoreSQLServerDbFromFile(AdoConn:TAdoconnection;DataBaseName:String;FileName:String):Boolean;
begin
Try
Result:=False;
AdoConn.Execute('use master'+#13
+'ALTER DATABASE '+DataBaseName+' SET OFFLINE WITH ROLLBACK IMMEDIATE'+#13
+'Restore DATABASE '
+DataBaseName+' From Disk = '''+FileName+''''+#13
+'ALTER DATABASE '+DataBaseName+' SET ONLINE WITH ROLLBACK IMMEDIATE'+#13);
Result:=True;
finally
end;
end;

end.
2005-9-13 23:05:16 分页查询的通用存储过程(sql server)

KeyLife富翁笔记
作者 : pingmeme
标题 : 转:分页查询的通用存储过程(sql server)
关键字:
分类 : 个人专区
密级 : 公开
(评分: , 回复: 0, 阅读: 2) »»
alter PROCEDURE sp_SelectPage
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
AS
begin
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
if @PageIndex = 1
begin
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['

+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['

+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['

+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '

+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

end

end
-- print @strSQL
exec (@strSQL)
end
===============================================================
总结:
还是要ID字段,排序字段就是ID字段
EXEC cccc @tblName = '成绩',@fldName='标识',@PageIndex=4,@PageSize=3



2005-8-25 20:58:31
发表评语&raquo;&raquo;&raquo;

2005-8-31 20:30:06 SELECT TOP 页大小 *

FROM Table1

WHERE not exists

(select * from (select top (页大小*页数) * from table1 order by id) b where b.id=a.id )

order by id


2005-9-11 19:27:34 這是一個返回分頁顯示SQL語句的代碼:
聲明:
function GetPageSQL(Tablename,KeyField:string;PageSize,PageIndex:Integer;GetFields:string='*';WhereStr:string='';OrderType:Integer=0):string;
參數說明:
Tablename:表名;
KeyField: 關鍵字段名;
PageSize:每頁大小;
PageIndex:顯示第几頁
GetFields:要返回的字段
WhereStr:附加查詢條件
OrderType:排序類型,0:ASC 1:DESC

//實現
function TMain_Form.GetPageSQL(Tablename, KeyField:string;PageSize,PageIndex:Integer;
GetFields: string;WhereStr:string; OrderType: Integer): string;
var
OrderStr,str:string;
begin
Result:='';
if OrderType=0 then
begin
str:='>(select max';
OrderStr:=' order by '+KeyField;
end
else
begin
OrderStr:=' order by '+KeyField+' DESC';
str:=' <(select min';

end;
if PageIndex=1 then
Result:='SELECT TOP '+IntToStr(PageSize)+' '+GetFields+' FROM '+TableName+' '+WhereStr+' '+OrderStr
else
begin
Result:='SELECT TOP '+IntTostr(PageSize)+' '+GetFields+' FROM '+TableName;
if WhereStr<>'' then Result:=Result+' '+WhereStr+' and '
else Result:=Result+' where ';
Result:=Result+KeyField+' '+str+'('+KeyField+') FROM (SELECT TOP '+IntTostr((PageIndex-1)*PageSize)+' '
+KeyField+' FROM '+tableName;
if WhereStr<>'' then Result:=Result+' '+WhereStr+' '+OrderStr+') as tblTmp)'+OrderStr
else Result:=Result+' '+OrderStr+') as tblTmp)'+OrderStr;
end;
end;

調用:
ADODataSet1.Close;
ADODataSet1.CommandText:=Main_Form.GetPageSQL('CK_Material','W_NO',100,50);
ADODataSet1.Open;





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi可以使用ADO(ActiveX Data Objects)来操作SQL Server服务器,包括文件上传和下载。通常情况下,上传和下载文件都是通过SQL Server的BLOB(Binary Large Object)数据类型来实现的。 在上传文件时,可以使用ADODB.Stream对象来将文件数据读入到BLOB字段中。下面是一个示例代码: var FS: TFileStream; Stream: TStream; BLOBStream: TStream; cn: TADOConnection; qry: TADOQuery; chunkSize, bufSize, bytesRead: LongInt; buffer: PByte; filePath: string; begin // 创建连接 cn := TADOConnection.Create(nil); cn.ConnectionString := 'Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=SSPI;'; cn.LoginPrompt := False; cn.Connected := True; // 创建查询 qry := TADOQuery.Create(nil); qry.Connection := cn; qry.SQL.Text := 'INSERT INTO YourTableName (FileName, FileData) VALUES (:FileName, :FileData)'; qry.Parameters.ParseSQL(qry.SQL.Text, True); // 打开文件 filePath := 'C:\YourFilePath\YourFileName.ext'; FS := TFileStream.Create(filePath, fmOpenRead or fmShareDenyWrite); // 读取数据到BLOB字段中 chunkSize := 4096; // 每次上传的块大小 bufSize := chunkSize * SizeOf(Byte); buffer := AllocMem(bufSize); try Stream := FS; BLOBStream := qry.CreateBlobStream(qry.Parameters.ParamByName('FileData'), bmWrite); repeat bytesRead := Stream.Read(buffer^, bufSize); if bytesRead > 0 then BLOBStream.Write(buffer^, bytesRead); until bytesRead < bufSize; qry.Parameters.ParamByName('FileName').Value := ExtractFileName(filePath); qry.ExecSQL(); finally FreeMem(buffer); FS.Free; qry.Free; cn.Free; end; end; 在下载文件时,可以使用TStreamAdapter对象将BLOB字段中的数据读入到TFileStream对象中。下面是一个示例代码: var cn: TADOConnection; qry: TADOQuery; filePath: string; begin // 创建连接 cn := TADOConnection.Create(nil); cn.ConnectionString := 'Provider=SQLOLEDB;Data Source=YourServerName;Initial Catalog=YourDatabaseName;Integrated Security=SSPI;'; cn.LoginPrompt := False; cn.Connected := True; // 创建查询 qry := TADOQuery.Create(nil); qry.Connection := cn; qry.SQL.Text := 'SELECT FileData FROM YourTableName WHERE FileName = :FileName'; qry.Parameters.ParseSQL(qry.SQL.Text, True); qry.Parameters.ParamByName('FileName').Value := 'YourFileName.ext'; qry.Open(); // 写入文件 filePath := 'C:\YourFilePath\YourFileName.ext'; with TFileStream.Create(filePath, fmCreate) do try TStreamAdapter.Create(qry.CreateBlobStream(qry.FieldByName('FileData'), bmRead)).CopyTo(Self, 0); finally Free; end; end; 以上就是Delphi操作SQL Server服务器上传下载文件的基本步骤。注意,代码中使用的连接字符串、表名、字段名等需要替换成实际情况下的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值