首页 > phper

用SQL Server为Web浏览器提供图像

微软SQL Server数据库服务器能够在SQL数据库里保存图片和大量的文本。图片和文本使用的数据类型分别是image图片类型和text文本类型。假如使用VB或VC开发前端应用程序,在windows操作系统上运行,那么可以容易地从SQL数据库里提取图片数据,把它放入一个文件,并在屏幕上显示出来。但是,要是想从SQL Server得到图片,并在Web浏览器里显示,就不那么容易了。虽然在微软SQL Server 6.5里提供了Web助理和存储过程 sp_makewebtask、sp_runwebtask,它们能够把SQL数据库里的数据转化成HTML文件,但是我们有更好的解决办法。使用Web助理的一个问题是,它不接受图片数据类型的字段。另一方面,存储过程 sp_makewebtask 的参数太多,很难使用,而且也很难对Web页面进行自定义。
 
我们在这里提供了一个解决方案,把图片从SQL数据装载到Web浏览器,这个方案要比sp_makewebtask好。我们用一个ActiveX 动态链接库和ASP页面开发了一个Web项目。动态链接库负责打开到保存图片的SQL数据库的连接,从数据库提取图片并把它们保存在临时文件里。ASP和动态链接库进行通信,取得临时图片文件的位置。这样,当访问者点击Web站点时,图片就会下载到他的浏览器。在这篇文章里,我们要介绍设置SQL数据库的步骤。然后,我们还要介绍如何利用VB5和活动数据对象ADO 1.5建立ActiveX动态链接库。最后,我们还要讨论建立ASP Web项目、连接到SQL数据库以及编写ASP文件的处理过程。
 

阅读全文

SQL SERVER应用问题解答13例(二)

问:Tempdb In Ram的配置出错怎么办?
  答:SQL Server提供了将Tempdb存放在内存中的机制,以提高系统效率。但是,如果把“Tempdb In Ram”的值设置过
大,会导致SQL Server无法正常启动。如果遇到这类问题,您可以:
  在命令行提示下以最小资源模式启动SQL Server(如:C:MSSQLBINNSQLSERVR-f)。
  切换到Windows界面,以SA帐户通过ISQL_W连接到SQL Server,并执行下列命令。
  Sp_configure'Allow Update', 1
  Reconfigure with override
  Go
  Sp_configure'Tempdb In Ram', 0
  Go
  Sp_configure'Allow Update', 0
  Reconfigure with override
  使用Ctrl-C终止命令行中运行的SQLSERVR程序。以通常方式再次启动SQL Server。
  此时的Tempdb建立在磁盘上,大小约为2M。这时就可以通过SQL Enterprise Manager将Tempdb调整为合适的大小。
  问:在启动MSSQLSERVER或SQLEXECUTIVE时出现"错误1069,由于登录失败而无法启动服务"时怎么办?
  答:在控制面板中选取'服务'MSSQLSERVER / SQLEXECUTIVE'启动…',检查帐户名和密码是否正确。
  问:安装SQL Server时用Setup /t RegistryRebuild = On有何用途?
  答:Setup命令在使用该参数将只重写SQL Server在注册表中所使用的有关键值,而不重新安装SQL Server。

阅读全文

SQL SERVER应用问题解答13例(三)

问:SQL Server启动事务有几种方式?
  答:有三种。第一种是显式声名的事务,这种事务要以BEGIN TRANSACTION为事务的起始标志。第二种是自动提交事
务,这是SQL Server的缺省设置。每一个T-SQL语句在执行完成后会被自动提交。第三种是隐含事务,在这种方式下,
SQL Server会在当前事务被提交或回滚后自动启动一个新的事务,这个新事务直到用户执行COMMIT或ROLLBACK为止,这时系
统又会启动一个新事务。这样就形成了一个连续的事务链。
  问:Cluster Index和Noncluster Index的区别是什么?
  答:Cluster Index和Noncluster Index的结构都是平衡树。它们的主要区别是Cluster Index的叶子节点是DATA PAGE
而Noncluster Index的叶子节点是数据在DATA PAGE中的指针。
  问:在SQL Server6.5,7.0中能否修改Table的名字?
  答:可以使用SP_RENAME来修改Table的名字。
  例如:
  use pubs
  create table test( a char(10))
  sp_rename test,newtest
  这个例子将新建的名为test的Table改为newtest。
  问:修改SQL Server7.0所在机器的机器名后,不能启动SQL Server,这种情况该如何处理?
  答:在这种情况下,要运行SQL Server7.0 Setup程序。Setup程序会根据新的机器名重新设置SQL Server。
  问:如果没有成功的安装SQL Server7.0,我该怎么办?
  答:如果您没有成功的安装SQLServer7.0,有几个文件可以帮助您确定是那一步出的错。首先在windows目录下的
SQLstp.log文件包含有setup过程的详细信息。查看这个文件可以确定Setup是在那一步出错的。
  如果Setup过程是在配置的部分出错,那么查看在MSSQL7Log目录下的错误日志和在MSSQL7Install目录下的
Cnfgsvr.out文件。SQLServer7.0Setup运行一个名为Cnfgsvr.exe的应用程序来配置SQLServer。这个程序启动SQLServer,
连接SQLServer并运行初始安装脚本。在这一过程中出现的任何错误都会被写入Cnfgsvr.out文件。
  如果您无法确定造成安装失败的原因,保存上述的文件并和微软产品支持部门联系,支持SQLServer的专业人员会协助
您解决问题。

阅读全文

SQL SERVER应用问题解答13例(一)

问:如何在SQL Enterprise Manager version 6.5下操作SQL Server 6.0的服务器?
  答:在使用SQL Enterprise Manager version 6.5来操作SQL Server 6.0之前,首先要在6.0的服务器下运行
SQLOLE65.SQL,该文件在MSSQLINSTALL的目录下。
  问:在将SQL Server 6.0升级到SQL Server 6.5之前,为什么首先要执行Chkupg65.exe这个实用工具?
  答:Chkupg65.exe会自动检测SQL Server 6.0的数据库是否处于正常状态,数据库中的各个对象是否使用了SQL
Server 6.5中的新关键字。并将检测到的出错信息记录到以OUT为后缀的输出文件中去。
  问:在SQL Servr7.0中如何将一个数据库的文件从一个磁盘移到另一个磁盘上?
  答:可以使用SP_DETACH_DB和SP_ATTACH_DB系统存储过程来实现。其步骤如下:
  运行SP_DETACH_DB将目的数据库与SQL Server分离。
  将目的数据库的数据文件(.MDF)和日志文件(.LDF)拷贝到目的磁盘上。
  运行SP_ATTACH_DB将目的磁盘上的文件恢复到SQL Server中。
  问:如何修改SQL Server7.0数据库的Character Set?
  答:使用rebuildm.exe可以修改Character Set和Sort Order。修改Character Set会影响SQL Server管理的所有数据
库,即所有数据库都会使用新的Character Set。
  问:如何在两台机器上从SQL Server6.5升级到SQL Server7.0?
  答:首先要将SQL Server6.5的运行帐户设为一个域帐户,并且在另一台机器上安装的SQL Server7.0也使用该域帐
户。其次这个域帐户要属于这两台机器的管理员组。最后,运行SQL Server6.5和SQL Server7.0的机器要在同一个域中。

阅读全文

长期使用中型Access数据库的一点经验

Access数据库在用的过程中, 经常不断的进行删除和增加记录的操作,会出现以下问题:
1. 可能会使Update语句更新失败, 明明一条记录存在, 也可以select到,但在用Update时出现找不到记录, 更新失败的错误信息.
2. 会使数据库增大, 并且降低数据库操作的效率
3. 在删除记录时也不会减少数据库的大小, 并且没有可以改善数据库的相应语句
解决办法
下载Access数据库, 用Access软件打开, 并用"修复和压缩数据库"工具进行处理, 保存后再重新上传并覆盖掉原来的数据库即可解决以上的所有问题. 这种办法比较只适合于中小型的数据库, 大的如果采用上下载的办法太慢了.

阅读全文

SQL Server里面的变更周期

今天在用存储过程调用程序时, 发现SQL的时间或日期并不是跟计算机的时钟同步. 比如我把当前时间12:00改为13:00,如果马上用SQL Server的GetDate得到的时间仍为12:00. 但在经常约一分钟(也许只有半分钟),SQL时间才转到系统的正常时间上去.我的系统是Win2K SQL Server7.0, 不知你们是否也有这个问题, 欢迎跟我交流测试.

阅读全文

如何在Oracle 中实现类似自动增加 ID 的功能?

我们经常在设计数据库的时候用一个系统自动分配的ID来作为我们的主键,但是在ORACLE 中没有这样的 功能,我们
可以通过采取以下的功能实现自动增加ID的功能
1.首先创建 sequence
create sequence seqmax increment by 1
2.使用方法
select seqmax.nextval ID from dual
就得到了一个ID
如果把这个语句放在 触发器中,就可以实现 和 ms sql 的自动增加ID相同的功能!


阅读全文

关于在 win2000 下安装 mysql 的一些问题!

前一段时间,发表了一编安装mysql的文章,结果有很多的朋友来问相关的问题。(太多了,应付不了)
1. 关于在其他目录安装mysql
ljf@sinonets.net.cn的朋友问:
我在win 2000下安装 mysql-shareware-3.22.32-win,希望改变路径,如d:win32appmysql但导致mysql服务无法启动,改变:d:my.cnf文件里所有相关路径为d:win32appmysql也不行
方法如下:
如你把目录转移就要这样来启动mysql
D:win32appmysqlinmysqld --basedir D:win32appmysql
net start mysql
2.从旧的版本升级
windymail@sina.com的朋友问:
我按照您的文章 win2000下安装mysql-shareware-3.22.32-win时遇到几个问题想请教您一下
我在运行c;mysqlinmysql-shareware --install时出现了failed to service 的信息
我以前安装的是3.11的版本
方法如下
请把原 3.11 的文件和reg里关于它的东西完全清除。然后再安装.
在清除之前要把你的 mysql 停止(
net stop mysql
mysqladmin --user=root --password=your password shutdown
),否则的话~~~~~
3.mysql的数据库在那里??LINUX那里吗?
dao,mysql安装在win2000上那数据库当然是在……
4.那里可以下载?
在这里就有啊
我的
e-mail:freeboy@popsun.com
欢迎来韶关热线找我讨论关于服务器和asp的问题。在bbs或者chitchat都可以找到。我的ID是freeboy。到了就说找网管就OK了。

阅读全文

讨论SELECT TOP N 问题

Hi, everyone:
    本贴讨论SELECT TOP N问题.
    现在正在一家计算机公司兼职,开发ASP应用. 在最近的一个商业项目里有这样一个需求:用户在查询时,只需要按照某(些)列排序后TOP 20的纪录. SQL SERVER 7很好地支持了TOP N 操作,但考虑到系统移植问题, 我又考虑在其他几个主流DBMSs中如何实现. 鉴于只有DB2 UDB 7,ORACLE 8i,SQL SERVER 7,本贴仅讨论这三个DBMS.
    简单地说,TOP N问题就是:在SELECT中,仅选择按照某(些)列排序后TOP N的纪录. 考虑到等值问题,又可以分为两种: 一是仅仅返回N条纪录(M 1), 二是还包括所有于第N条等值的纪录(M 2). 当然最内层的子查询也可以有其他的子句, 或者TOP N也可以应用在没有ORDER BY的情况下,这样更简单.
1. SQL SERVER 7: 用 TOP N (WITH TIES)
M1:
SELECT TOP N * FROM MYTABLE ORDER BY ORD_COL;
M2:
SELECT TOP N    WITH TIES * FROM MYTABLE ORDER BY ORD_COL;
注: SQL SERVER 7提供了PERCENT N WITH TIES, ACCESS 中提供了TOP N,但含义是M 2.
2. ORACLE 8i: 用 ROWNUM<=N
M1:
SELECT * FROM
     ( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
WHERE ROWNUM<=N
M2:
SELECT * FROM MYTABLE WHERE ORD_COL>=
     (SELECT MIN(ORD_COL) FROM
        ( SELECT * FROM MYTABLE ORDER BY ORD_COL DESC)
    WHERE ROWNUM<=N)
ORDER BY ORD_COL DESC
注意以下两种错误用法:
WRONG 1:
SELECT * FROM MYTABLE
WHERE    ROWID<=N
ORDER BY ORD_COL DESC;
WRONG 2:(因为WHERE ROWNUM<=N 在ORDER BY 前执行)
SELECT * FROM MYTABLE
WHERE    ROWNUM<=N
ORDER BY ORD_COL DESC;
3: DB2
用FETCH FIRST N ROWS ONLY
M1:
SELECT * FROM MYTABLE
ORDER BY ORD_COL DESC
FETCH FIRST N ROWS ONLY
M2:
没有找到,因为DB2不允许在FROM中嵌套有ORDER BY子句的子查询.
还不清楚ORACLE的M 2有没有更好的办法,以及其他的DBMS如何实现TOP N操作,请其他朋友补充.

阅读全文

在SQL2000查询中使用XDR的例子

XDR不会不知道吧?就是简化的XML-Data啦。现在示范一个如何实现这样的查询
SELECT o.OrderID, o.OrderDate from Orders o, Customers c,
WHERE o.CustomerID = c.CustomerID and c.CompanyName = ?
Code:
<%@ Language=VBScript %>
<%
Dim sConn
sConn = "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=Northwind; User ID=SA;Password=;"

Dim adoConn
Set adoConn = Server.CreateObject("ADODB.Connection")
adoConn.ConnectionString = sConn
adoConn.CursorLocation = 3 'adUseClient
adoConn.Open

Dim adoCmd
Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandText = "Customer[@CompanyName=""Tortuga Restaurante""]"
adoCmd.Dialect = "{ec2a4293-e898-11d2-b1b7-00c04f680c56}"

adoCmd.Properties("Mapping Schema") = "Orders.xml"
adoCmd.Properties("Base Path") = "C:INETPUBWWWROOTPBA"
adoCmd.Properties("Output Stream") = Response

Response.write "<XML ID='MyDataIsle'>"
adoCmd.Execute , , 1024 'adExecuteStream
Response.write "</XML>"
%>
Result:
<XML ID="MyDataIsle">
<Customer CustomerID="TORTU" CompanyName="Tortuga Restaurante">
<Order CustomerID="TORTU" OrderID="10276" OrderDate="1996-08-08T00:00:00" />
<Order CustomerID="TORTU" OrderID="10293" OrderDate="1996-08-29T00:00:00" />
<Order CustomerID="TORTU" OrderID="10304" OrderDate="1996-09-12T00:00:00" />
<Order CustomerID="TORTU" OrderID="10319" OrderDate="1996-10-02T00:00:00" />
<Order CustomerID="TORTU" OrderID="10518" OrderDate="1997-04-25T00:00:00" />

阅读全文