把图片转换为二进制存入和取出sql 数据库

javaboy_2008 2009-10-25 02:38:47
做学生管理系统
1.需要先向数据库里添加学生的照片
2.查询的时候显示学生的照片
但是不会如题操作(我用的是c++builder 6.0 和sql数据库)(用DBimage 显示)
希望大家帮帮忙 谢谢 在线等


因为本人是自学 希望大家贴点简单的代码(对于问题有什么不理解的,在回复里面提,我会解释)
再次 感谢
...全文
319 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaboy_2008 2009-10-28
  • 打赏
  • 举报
回复
问题基本解决,再次谢谢大家,结贴给分(分不多不要见怪,呵呵),以后有问题还希望大家赐教
javaboy_2008 2009-10-27
  • 打赏
  • 举报
回复
谢谢
肆水東澤 2009-10-27
  • 打赏
  • 举报
回复

var
fil:string;
begin
if openpicturedialog1.FileName='' then
begin
showmessage('请选择照片!');
exit;
end;
picture:=Tpicture.Create; //声明个图片对象
picture.LoadFromFile(extractfilename(openpicturedialog1.filename));//文件打开对话框,选取你的图片文件,这个只适用于.bmp格式的图像

adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select * from picture');
adoquery1.Open;
adoquery1.Insert;
adoquery1.FieldByName('图片编号').AsString:=edit1.Text;
adoquery1.FieldByName('图片').Assign(picture);
adoquery1.Post;
picture.Free;//释放图片对象

end;



大概主要的就这些,是Delphi的代码,你转下BCB的
肆水東澤 2009-10-27
  • 打赏
  • 举报
回复
不好意思,还没找到,我用的书是 delphi+SQL server2000数据库应用系统开发与实例
这本书的第102页,有很详细的例子和代码,你先找找,我也帮你找找。
javaboy_2008 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kfrght 的回复:]
楼主还没整明白怎么弄?就是先设计一个表,把你要查询的那些信息和照片的存储部分放在一个表里面(主要是你第一次学习这样比较的简单易用)然后:

用到5个控件如下:
ADOQuery1
DataSource1
DBNavigator1
DBGrid1
DBImage1
第一步、先把DBNavigator1、DBGrid1和DBImage1的DataSource设置为DataSource1,把DataSource1的DataSet设置为ADOQuery1;
第二步、把DBImage1的DataField设置为你的存照片的数据库字段列名,设置时遇到错误的话确定就好;
第三步、用一个查询初始化ADOQuery;
第四步、准备一个按钮点击代码:DBImage1->Picture->LoadFromFile("c:\\Blue Lace 16.bmp");
第五步、准备一个bmp图片存为c:\\Blue Lace 16.bmp
然后就可以按DBNavigator上面的+按钮,DBGrid会出来一个可以输入的新行在里面输入,点击按钮传入图片,之后点击DBNavigator上面的对好按钮保存,重复上面的步骤就可以插入多个记录了。

这个方法比较的简单,也可以直接用流传入,这个要代码也可以给你。
[/Quote]
能不能给源代码给我,让我分析分析,由于是自学,有些愚钝,有劳大家了,谢谢
jone7319 2009-10-27
  • 打赏
  • 举报
回复

//将图导入数据库
String sql="select * from singnaldata";
ADOQuery1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=wsingnal.mdb;Persist Security Info=False";
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open();

for(int i=0;i<15;i++)
{
for(int j=0;j<4;j++)
{
String file="D:\\tmp\test.bmp";
if(FileExists(file))
{
ADOQuery1->Insert();
ADOQuery1->FieldByName("Kind")->AsString=pn[i];
ADOQuery1->FieldByName("Color")->AsString=cln[j];

TADOBlobStream *tStream;
TMemoryStream *temp=new TMemoryStream();
Graphics::TBitmap *pBitmap=new Graphics::TBitmap();
pBitmap->LoadFromFile(file);
pBitmap->SaveToStream(temp);
((TBlobField *)ADOQuery1->FieldByName("picture"))->LoadFromStream(temp);
}
}
}

ADOQuery1->Post();






//将图从库中导出
String sql="select * from singnaldata where Kind='"+kind+"' and Color='"+color+"'";
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open();

TMemoryStream *temp=new TMemoryStream();
((TBlobField *)ADOQuery1->FieldByName("Picture"))->SaveToStream(temp);
temp->Position=0;
temp->SaveToFile(picfile);
宝龙哥 2009-10-27
  • 打赏
  • 举报
回复
今天回答的太详细了
宝龙哥 2009-10-27
  • 打赏
  • 举报
回复
楼主还没整明白怎么弄?就是先设计一个表,把你要查询的那些信息和照片的存储部分放在一个表里面(主要是你第一次学习这样比较的简单易用)然后:

用到5个控件如下:
ADOQuery1
DataSource1
DBNavigator1
DBGrid1
DBImage1
第一步、先把DBNavigator1、DBGrid1和DBImage1的DataSource设置为DataSource1,把DataSource1的DataSet设置为ADOQuery1;
第二步、把DBImage1的DataField设置为你的存照片的数据库字段列名,设置时遇到错误的话确定就好;
第三步、用一个查询初始化ADOQuery;
第四步、准备一个按钮点击代码:DBImage1->Picture->LoadFromFile("c:\\Blue Lace 16.bmp");
第五步、准备一个bmp图片存为c:\\Blue Lace 16.bmp
然后就可以按DBNavigator上面的+按钮,DBGrid会出来一个可以输入的新行在里面输入,点击按钮传入图片,之后点击DBNavigator上面的对好按钮保存,重复上面的步骤就可以插入多个记录了。

这个方法比较的简单,也可以直接用流传入,这个要代码也可以给你。
javaboy_2008 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fqzlala 的回复:]
晚上回家给你找找源代码
[/Quote]
大哥,代码找到了吗(救救我啊,感激...)
javaboy_2008 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhouzhangkui 的回复:]
引用 3 楼 zengyuzhi083 的回复:
引用 2 楼 zhouzhangkui 的回复:
http://topic.csdn.net/t/20020920/15/1040069.html

我试了代码,编译没有错误,但是点击读入按钮的时候,数据库 image 字段没有添加内容
希望大侠能帮我分析一下,问题解决了加分感谢,谢谢

你用的哪段代码有问题?
[/Quote]
现在编译的时候出现(无效位图)
图片的路径我也写了,图片的格式是。bmp
能不能给点建议,谢谢
javaboy_2008 2009-10-26
  • 打赏
  • 举报
回复
先谢谢各位啊,有好的意见继续啊
肆水東澤 2009-10-26
  • 打赏
  • 举报
回复
晚上回家给你找找源代码
肆水東澤 2009-10-26
  • 打赏
  • 举报
回复
我做过用DELPHI+SQL2000存图片,显示,和打印数据库的图片,方法都一样了,楼上用的是可行的
宝龙哥 2009-10-26
  • 打赏
  • 举报
回复
DBimage控件需要设置:
1.DataField
2.DataSource
两项
宝龙哥 2009-10-26
  • 打赏
  • 举报
回复
其它的弄个DBNavigator控件,插入,保存等就是现成的了
宝龙哥 2009-10-26
  • 打赏
  • 举报
回复
DBimage控件本身需要和数据库控件挂接的,用它自身的LoadFromFile即可完成图片的插入,先设置好控件的链接关系,然后具体代码:
DBImage1->Picture->LoadFromFile("c:\\Blue Lace 16.bmp");
这样就可以载入一张图片了,要注意的是文件要存在,并且是DBimage支持的格式。
周药师 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zengyuzhi083 的回复:]
引用 2 楼 zhouzhangkui 的回复:
http://topic.csdn.net/t/20020920/15/1040069.html

我试了代码,编译没有错误,但是点击读入按钮的时候,数据库 image 字段没有添加内容
希望大侠能帮我分析一下,问题解决了加分感谢,谢谢
[/Quote]
你用的哪段代码有问题?
javaboy_2008 2009-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhouzhangkui 的回复:]
http://topic.csdn.net/t/20020920/15/1040069.html
[/Quote]
我试了代码,编译没有错误,但是点击读入按钮的时候,数据库 image 字段没有添加内容
希望大侠能帮我分析一下,问题解决了加分感谢,谢谢
javaboy_2008 2009-10-25
  • 打赏
  • 举报
回复
自己先顶一个,各位发表意见啊

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧