是这样的:我的程序是用DELPHI 7 + ADO + SQL SERVER 2000 写的;本来是属于单机版的。程序中要加载图片,用到LoadFromFile函数.该函数的参数是具体图象的存放地址。在Sql server 2000数据库中有一张表 t_Pro 如下:
 Pno     Pname  Path
 1        a     D:\aa\a1.jpg
 2        b     D:\aa\a2.jpg
本来在单机版中 我用如下语句就可以 加载图片了:
 Image2.Picture.LoadFromFile(adoqry_mx.fieldbyName('Path').AsString);
现在 要把单机版转为C/S版的 。于是 出现了问题了 :
在客户机上写下如下代码后:
Image2.Picture.LoadFromFile(adoqry_mx.fieldbyName('PicBz').AsString);
会把客户机上的D:\aa\a1.jpg加载到Image2上 ,而客户机上不一定有这个图片,因为很明显,要加载的图片是服务器上(主机上D:\aa\a1.jpg的图片)。就算有也不一定是 ,实际上的图片。于是会出现,加载图片出错。
于是我想了个办法:在数据库表的Path字段中把服务器的IP地址(IP地址为192.168.0.110)也加上去;这样就可以明确的定到要加载的图片了。内容如下:
Pno     Pname  Path
 1        a     192.168.0.110\\D:\aa\a1.jpg
 2        b     192.168.0.110\\D:\aa\a2.jpg
然后,在客户段就算要加载图片的话也是加载服务器(192.168.0.110)上的图片。
问题是 :在这个:
Image2.Picture.LoadFromFile(adoqry_mx.fieldbyName('Path').AsString);
函数中 当adoqry_mx.fieldbyName('Path').AsString字段换成 192.168.0.110\\D:\aa\a1.jpg 就出现图片加载出错。 不能LoadFromFile.这个问题困饶了 我好几天到现在一直没有解决。不知道哪位高手 能解决这个问题;当然也可以用其他方案。但是一般情况下 不考虑使用TBLOBField字段来处理,另外 我要加载的图片都是 JPG图片。怎么解决这个问题?
同时可以参看:
http://expert.csdn.net/Expert/topic/2047/2047302.xml?temp=.7472193
http://expert.csdn.net/Expert/topic/2047/2047803.xml?temp=.4180567
这两个帖子,该问题解决后 三个帖子,一并结分。
谢谢,高手加盟。

解决方案 »

  1.   

    路径改成...前提是服务器的D是默认无用户密码共享的
    \\192.168.0.110\D\aa\a1.jpg嗯,如果在服务器上搭建一个WEB就容易多了,楼主考虑一下吧
      

  2.   

    你的是局域网吧??  写成这样试试:file://192.168.0.110\D\aa\a1.jpg
    当然还有个登陆权限问题!
    不过觉得 bluemeteor(挂月||╭∩╮(︶_︶)╭∩╮) 说的有道理,既然是C/S,就搭建一个WEB多方便~~~~~~~~
      

  3.   

    楼上说的不错,但是共享d盘太危险,不如只共享aa目录,并设置权限访问(NT/2000),访问时只要用ip or server name\\aa\xxx.jpg即可.
      

  4.   

    看看这两篇文章吧http://www.csdn.net/develop/article/19/19839.shtmhttp://www.csdn.net/develop/article/19/19840.shtm如果是用\\192.168.0.110\D\aa\a1.jpg这种方式,则必须确保在load之前能够直接的访问那台电脑
      

  5.   

    可以考虑 搭建WEB,不知道如何搭建WEB,希望指点一下。
      

  6.   

    有几种办法
    1 如楼上说用文件直接共享访问,不过不推荐
    2 将jpg图像文件而不是文件路径保存在数据库中
    3 利用web
    --这几个楼上都说了
    4 用stream等方式利用xm_cmdshell或者服务器外挂将服务器文件传入数据库或者传出到客户机
      

  7.   

    to : shadowfish(<)<-<-<<死鱼<)<-<-<) :
    你说的 “必须确保在load之前能够直接的访问那台电脑” 是什么意思?
    不设置密码?还是共享某个文件夹。
      

  8.   

    问题 是 文件共享 后 还是不能够访问呀!另外,如何利用WEB?
      

  9.   

    文件共享后,有权限才行。
    -----------------------------------
    要利用web ,服务器必须装IIS,并配置好...具体可以参考建立网站书籍.
      

  10.   

    呵呵  这方面的程序我没有写过,不好意思!
    不过我可以提醒一下,不知关机程序你写过没有??2000需要得到系统权限,我想网络共享的道理跟这个大同小异吧!?只不过你现在要得到的是另外一台电脑的登陆权限。
    var
        htoken:thandle;
        tkp:token_privileges;
        r:dword;
    begin
         openprocesstoken(getcurrentprocess(),token_adjust_privileges or token_query,htoken);
        lookupprivilegevalue(nil,'seshutdownprivilege',tkp.privileges[0].luid);
        //设定权限
        tkp.PrivilegeCount:=1;
        tkp.privileges[0].Attributes:=se_privilege_enabled;
        //得到关机权限
        adjusttokenprivileges(htoken,false,tkp,0,nil,r);   
        //关闭计算机
        exitwindowsex(ewx_shutdown or ewx_poweroff,0);
    end.
      

  11.   

    服务器上搭建一个WEB
    这样的你的路径就这样写http://yourswebserver\aa\a1.jpg