想通过上传文件到SQL SERVER数据库,并可从数据下载保存为文件,上传下载均有进度条;实现C/S模式通过数据库在线升级,碰到些问题

[复制链接]
查看11 | 回复9 | 2021-1-27 07:00:25 | 显示全部楼层 |阅读模式
上传文件到SQLSERVER数据库,并可从数据下载保存为文件,上传下载均有进度条;实现C/S模式通过数据库在线升级
碰到点问题:
cb对这个数据流的函数不太熟悉
对数据流的入库不熟,
有做过的兄弟能否指点下.
比如插入怎么插,文件太大是否需要分解?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
CB对数据库操作,最简单的方式就是ADO咯,不知道楼主干嘛把文件存入数据库中,很少见这种做法哦
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
超大文件不要直接存入数据库,小文件可以存人,毕竟方便,如果文件很大最好是分解成一段一段地存入
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
大文件不是说不能存,是不便于上传下载,最理想的做法是用一个专门的表,至少两个字段,一个存二进制流数据,一个字段存这段流的CRC校验码,这样可以实现断点继传,用的时候组合起来
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
目前主流数据库都支持很大的二进制数据存储,流行的做法一是直接存入,二是建立单独的FTP,各有优缺点
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
如果是大文件的话用数据库并不太好,因为数据库的文件io能力比不上文件系统之身的。
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
小文件来的,就是用来更新的程序而已.
几m到几十m了
内网来的,用数据库方便,不需要额外部署ftp,等
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层



分享个bcb作的上传函数
bool__fastcallTForm2::Upfile(void)
{
TFileStream*MyFStream;
TFileStream*MyFStream2;
TFileStream*FieldStrm;
TFileStream*Buffer;
intbufsize=0xF000;
intn=0xF000;//每次上传文件流为61440byte=$F000
intCounter;
intpost=0;
MyFStream=newTFileStream(Edit1->Text,fmOpenRead);
Counter=MyFStream->Size;
MyFStream2=MyFStream;
byte*fileData;
fileData=newbyte[Counter];
Stringfilename;
Stringfiletype;
filename=MyFStream->FileName;
MyFStream->Read(fileData,Counter);
AnsiStringSQLStr,rq;
AnsiStringoldver,newver,softname,tempmem,tempvid,temptime;
AnsiStringtemppath;
tempvid=FormatDateTime("MMDDhhmmss",Now());
Efileno->Text=tempvid;
oldver=Coldver->Text.Trim();
newver=Enewver->Text.Trim();
temppath=Efilepath->Text.Trim();
Efilesize->Text=Counter;
softname=Efilename->Text;
tempmem=Mfilememo->Text;
temptime=FormatDateTime("YYYY-MM-DDhh:mm:ss",Now());
SQLStr="insertintoUpdatesoft(v_id,old_ver,new_ver,softname,path,FILESIZE,memo,UPTIEM)values('"+tempvid+"','"+oldver+"','"+newver+"','"+softname+"','"+temppath+"','"+Counter+"','"+tempmem+"','"+temptime+"')";
Form2->Memo1->Lines->Add(SQLStr);
if(DM->ADOConnection->Connected)
{
if(DM->QueryExecute(SQLStr))
{
Form2->Memo1->Lines->Add("数据插入成功");
}
}
AnsiStringsSQL;
sSQL.sprintf("Select*FromUpdatesoftWherev_id='%s'",tempvid);
if(!DM->QueryOpen(sSQL))
{
ShowMessage("未找到记录!");
returnfalse;
}
if(!DM->QuerySQL->FieldByName("SOFT")->IsNull)
{
ShowMessage("KONG");
returnfalse;
}
DM->QuerySQL->Edit();

//DM->ADOQuery1->Edit();
TBlobField*pField=(TBlobField*)DM->QuerySQL->FieldByName("SOFT");
//pField->Assign(fileData);
pField->LoadFromStream(MyFStream2);
DM->QuerySQL->Post();
MyFStream2->Free();

}
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
你这都会了,还有什么问题啊,我看干脆结贴吧
回复

使用道具 举报

千问 | 2021-1-27 07:00:25 | 显示全部楼层
数据库,上传下载有进度条
这可是有点难
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行