请问为什么我做的ActiveX,上传到网站上,没带数据库连接的就可以显示.如果有数据库的,就自动关闭IE呢?如以下这个例子:
http://www.kwpi.com/pc/PC_DATA/PC_DATAProj1.htm有人可以帮我看看吗?

解决方案 »

  1.   

    ActiveX 和 Web在Windows 操作系统下,有一个重要的机制,就是OLE ,就是可以让某
    个应用程序(OLE Controller)访问其它应用程序(OLE Server)所提供的
    功能,这样做的好处是,如果已经有了完成某项功能的程序,你就不必再为
    某项功能编写特定的应用程序,可以直接通过OLE 调用。
    一、 制作用Web 调用的ActiveX首先设置一个虚拟目录,定名为Delphi1)进入Delphi,Close all
    2)New -> Other -> ActiveX -> ActiveX Form ->Name: MyActiveX
    OK
    3)出现一个普通的Form界面,放入
    TButton
    TListBox
    TEdit
    三个控件,设计目标是,点Button后ListBox添加一个Edit的内容。
    4)Save all 到虚拟目录的 ActiveX\Ac2\ 子目录下。
    5)双击Button,在Button1Click事件程序下写:ListBox1.items.add(edit1.text);6)这就完成了,保存。7)Porject ->Build All 编译8)Porject -〉Web Deployment Options 设置分发参数
    第一项:OCX保存的目录 (虚拟目录\ActiveX\ac2\)
    第二项:OCX保存在哪个相对路径中 
    (http://127.0.0.1/delphi/ActiveX/ac2/)
    第三项:Delphi产生的HTML 保存路径(虚拟目录\ActiveX\ac2\)
    Ok
    9)产生嵌入ActiveXForm的HTML文件
    Porject -〉Web Deploy现在保存这个工程然后退出观察效果打开IE浏览器, 把网址写为:http://127.0.0.1/delphi/activex/ac2/
    就可以看到下面的文件列表:[To Parent Directory] 
    2000年5月27日 9:10 750 MyActiveImpl1.~dfm 
    2000年5月27日 9:11 9160 MyActiveImpl1.~pas 
    2000年5月27日 9:31 16936 MyActiveImpl1.dcu 
    2000年5月27日 9:16 51 MyActiveImpl1.ddp 
    2000年5月27日 9:14 778 MyActiveImpl1.dfm 
    2000年5月27日 9:15 9307 MyActiveImpl1.pas 
    2000年5月27日 9:11 334 MyActiveProj1.~dpr 
    2000年5月27日 9:11 6424 MyActiveProj1.~tlb 
    2000年5月27日 9:27 386 MyActiveProj1.cfg 
    2000年5月27日 9:27 1436 MyActiveProj1.dof 
    2000年5月27日 9:11 334 MyActiveProj1.dpr 
    2000年5月27日 9:29 382 MyActiveProj1.htm 
    2000年5月27日 9:31 477696 MyActiveProj1.ocx 
    2000年5月27日 9:27 1836 MyActiveProj1.res 
    2000年5月27日 9:11 6424 MyActiveProj1.tlb 
    2000年5月27日 9:11 15377 MyActiveProj1_TLB.~pas 
    2000年5月27日 9:31 11952 MyActiveProj1_TLB.dcu 
    2000年5月27日 9:11 15377 MyActiveProj1_TLB.pas其中:MyActiveProj1.htm 就是刚才内嵌的HTML文件,点击这个超级
    链接,就可以看到包含ActiveX的网页了。 
    打开这个网页的源代码,可以看到这个HTML文件中真正重要的是下面
    的一段,把这一段镶嵌到任何一个网页中,都可以调用这个ActiveX 。而
    其它部分可以用诸如Frontpage 等网页设计软件来完成。<OBJECT
    classid="clsid:937B0348-FF1E-4E70-9244-3375EF9AF5E5"
    codebase="http://127.0.0.1/delphi/ActiveX/Ac2/MyActiveProj1.ocx#version=1,0,0,0"
    width=313
    height=248
    align=center
    hspace=0
    vspace=0
    >
    </OBJECT>真正使用的时候,codebase要使用下面的地址codebase="http://127.0.0.1/delphi/ActiveX/Ac2/MyActiveProj1.ocx要改成OCX文件存放的真正的网址。
      

  2.   

    二、在ActiveX程序中访问远程数据库从表面上看,ActiveX 程序只要做成访问数据库的形式,再放到网页
    上就可以了,实际上不然,首先是你无法保证
    三、如何分发(Peploy)完成的ActiveX应用程序多层结构必须把MIDAS.DLL复制到前台计算机,还包括其他种类的文件。
    例如,必须包括MIDAS.DLL文件,所以,就需要在打开网页的同时,同时
    下载相关文件。
    方法:
    1) 建立ActiveX控件;
    2) [project]->[Web Deployment Options]打开选项卡;
    3) 用前面的方法,设置好OCX和HTML文件的URL 和目录位置。
    4) 选中最后一个多选框(共六个,Deploy additional file)
    这样就可以自动分发相关文件。
    5) 选取Additional File选项卡,加入文件(Add),分发文件的位置,
    和OCX和HTML相同就可以了。
    6) 打开[project]->[Web Deploy]命令,产生分发的HTML文件。
    7) 问题是分发的文件都会下载到C;\Windows\Occache下,也就是IE浏
    览器下载OCX 临时文件夹,但如果下载MIDAS.DLL页下载到这个文件夹, 数
    据库系统将无法正常工作的。 
    8) 重新看一下网页的源代码:
    <HTML>
    <H1> Delphi 6 ActiveX Test Page </H1><p>
    You should see your Delphi 6 forms or controls embedded in the form below.
    <HR><center><P>
    <OBJECT
    classid="clsid:18EA6FB4-5694-491E-818B-10F22C2EDDF7"
    codebase="http://127.0.0.1/cgi/act/act1/MyActiveProj1.inf"
    width=281
    height=254
    align=center
    hspace=0
    vspace=0
    >
    </OBJECT>
    </HTML>
    --------------------------------------------------------------------我们会发现codebase="http://127.0.0.1/delphi/ActiveX/Ac2/MyActiveProj1.ocx
    变成了:
    codebase="http://127.0.0.1/cgi/act/act1/MyActiveProj1.inf"--------------------------------------------------------------------
    其中MyActiveProj1.inf是一个文本文件,打开来看一下:
    --------------------------------------------------------------------
    ;Delphi-generated INF file for MyActiveProj1.ocx
    [Add.Code]
    MyActiveProj1.ocx=MyActiveProj1.ocx
    MIDAS.DLL=MIDAS.DLL[MyActiveProj1.ocx]
    file=http://127.0.0.1/cgi/act/act1/MyActiveProj1.ocx
    clsid={18EA6FB4-5694-491E-818B-10F22C2EDDF7}
    RegisterServer=yes[MIDAS.DLL]
    file=http://127.0.0.1/cgi/act/act1/MIDAS.DLL
    -------------------------------------------------------------------- 
    现在把最后一段改一下 
    [MIDAS.DLL]
    file=http://127.0.0.1/cgi/act/act1/MIDAS.DLL
    DestDir=11DestDir=11用来指定下载的目的路径,11代表C:/windows/system,
    如果出现了 RegisterServer=yes,要把它删掉,因为这表明要注册,
    而MIDAS.DLL是不需要注册的。
    好了,现在可以正常工作了。四、TCP/IP协议和Socket前面所讨论的多层结构,都是应用了DCOM机制,这种机制在局域网上传输,
    特别是在Windows NT/2000 服务器下,是没有任何问题的,但是,如果要在广
    域网上实现多层结构,就带来了一个问题,因为广域网现在采用的是TCP/IP协
    议,DCOM机制在广域网上无法使用,如何解决这个难题呢?
    为了解决这个问题,Delphi提供了一个Socket(插座)的类,专门用于解
    决这个问题,它的基本思想为:
    在客户端,用一个新的控件TSocketConnection代替原来的TDCOMConnection,
    其余的连接不变,这就大大简化了客户端的设计。但是,TSocketConnection
    走的是TCP/IP,它自然会对应到服务器端的某个端口(Service Port),所以,
    在服务器端也应该设置一个相应的服务程序,监听用户的端口号,并在号码相
    同时,提供对应的服务。
    这样一来,已经设计好的服务器应用程序不需要做任何变动就可以使用了,
    实际上这样的多层服务程序既可以在局域网上使用也可以在广域网上使用。
    实例:
    1)在服务器端打开C:\WINNT\system32\drivers\etc\Services这是一个文本文件,可用记事本打开,查看当前服务器上已经有哪些Service,
    这些Service又用到了哪些端口号(port number),例如:# Copyright (c) 1993-1999 Microsoft Corp.
    #
    # This file contains port numbers for well-known services defined by IANA
    #
    # Format:
    #
    # <service name> <port number>/<protocol> [aliases...] [#<comment>]
    #echo 7/tcp
    echo 7/udp
    discard 9/tcp sink null
    discard 9/udp sink null
    systat 11/tcp users #Active users
    systat 11/tcp users #Active users
    daytime 13/tcp
    daytime 13/udp
    qotd 17/tcp quote #Quote of the day
    qotd 17/udp quote #Quote of the day
    chargen 19/tcp ttytst source #Character generator
    chargen 19/udp ttytst source #Character generator
    ftp-data 20/tcp #FTP, data
    ftp 21/tcp #FTP. control
    telnet 23/tcp
    smtp 25/tcp mail #Simple Mail Transfer Protocol
    time 37/tcp timserver
    time 37/udp timserver.........................您下面要选择的端口号不能与这些号码相重复。2)在服务器端,找到Delphi的目录,找到:
    Program Files\Borland\Delphi 6\Bin\Scktsrvr.exe
    运行,就可以在Windows可以看到一个TCP/IP的Service以启动的图标(
    插座的形状)。在图标上右键,选Properties,就出现一个对话框:
    Listen on Port(侦听端口):默认是211,可以根据情况选新的号。
    这个号码,也就是客户机做Socket 连接时所必须使用的号。
    这样就可以把Delphi提供的多层结构数据库Post到Internet上了。这是手动安装的情况,但是,手动安装的Socked Server在服务器每次
    关机后,必须重新安装才能启动,十分不方便。所以,还有另一种把
    Socked Server变成NT Server的方法,在DOS Prompt下,执行下列命令:
    Program Files\Borland\Delphi 6\Bin > Scktsrvr/inatall
    安装成功后您就可以看到一个安装成功的信息显示。
    这时打开[控制面板]-〉[管理工具]-〉[服务]工具程序
    您可以发现一个 Socked Server , 这就是刚才加入进来的项目,它
    的默认启动状态是“自动”,这就是以后服务器启动后,Socked Server
    也将自动被打开了。 3)客户端:
    制作一个标准的Form,加入:
    DataSnap页:
    TSocketConnection(以取代原来的DCOMConnection)
    DataAccess页:
    TClientDataSet
    TDataSource
    Data Controls页:
    TDBGrid设置属性:
    SocketConnection1属性:
    Address=服务器IP地址,本机时:127.0.0.1
    Host=服务器名(可以通过网上邻居查找)
    Address和host只要用一种方法就可以了。
    Port=端口号(这里为211)
    ServerName=服务器端应用程序名 
    Connected=true表示连上
    ClientDataSet1属性:
    RemoteServer=SocketConnection1
    ProviderName=DataSetProvider1(具体名字由
    服务器端提供)
    Active=true(表示连上)
    DataSource1属性:
    DataSet=ClientDataSet1
    DBGrid1属性:
    DataSource=DataSource1
    运行一下,可以看到和走DCOM通道是一样的,但现在是走的TCP/IP协
    议的通道。
    如果在服务器上关闭Borland Socked Server, 立刻就可以发现客户
    端的联系中断了。
    更复杂的情况,包括走广域网的ActiveX控件。都可以采用这种方法,
    不过,在广域网上并不太赞成使用ActiveX控件。
      

  3.   

    TO: zhangheaaa(竹) 我所做的ActiveX控件如果没有用到ADO连接数据库,显示是正常的.但如果一用到连接,就不能打开啦.请问ActiveX控件是不是和普通窗体一样用ADO连接数据库?