由于SQL Server 2008会使用Visual Studio 2008 SP1的某些功能,你可以理解为.NET FX 3.5 SP1 的功能,所以会发生冲突,即如果你的机器上已经安装了Visual Studio 2008 或.NET FX 3.5但是没有安装Visual Studio 2008 SP1 或.NET FX 3.5 SP1,那么你在安装SQL Server 2008的时候,会导致SQL Server 2008安装失败。
所有你有三个选项:
- 1. 如果你还没有安装过Visual Studio 2008或.NET FX 3.5,那么你可以安装SQL Server 2008,不受影响,因为SQL Server 2008安装程序带有所需要的所有组件。
- 2. 如果你已经安装过Visual Studio 2008或.NET FX 3.5,那么你必须安装Visual Studio 2008 SP1 或.NET FX 3.5 SP1之后再安装SQL Server 2008。否则使用选项三
- 3. 如果你不想Visual Studio 2008 SP1 或.NET FX 3.5 SP1,那么安装SQL Server 2008时需要使用手动安装,比如不要选择SQL Server的Analysis Services、Integration Services 或 Business Intelligence Development Studio 功能。
posted @
2009-01-10 13:18 龙霖 阅读(1066) |
评论 (0) |
编辑 收藏
一直很期待 SQL Server 2008 的发布,昨天在微软网站找到了下载地址,3.28G,之所以这么大,是因为该 ISO 文件同时包含了 IA64、64、x86 三种版本,x86 约占 1.5G 多一些,直接下载地址如下:
http://download.microsoft.com/download/B/8/0/B808AF59-7619-4A71-A447-F597DE74AC44/SQLFULL_CHS.iso
如果你的机器上已安装有 Visual Studio 2008,在安装之前最好安装 Visual Studio 2008 SP1,为什么这么做?偶也不知道,只是 SQL Server 2008 发行说明中有此一条,我也没试过不安装 SP1 有什么后果。
开始安装,启动,WOW,出现了一个 CMD 窗口,真不知道微软的开发人员是怎么想的,用命令行程序做载入和系统检查,而且这个 CMD 窗口会一直持续到安装结束。
安装程序风格变化很大,相较 2005 也有很大变化,见图(点击看大图):
上图为安装主界面,包含了有关 SQL Server 2008 的各种信息,很直观,开始安装选择:全新 SQL Server 独立安装或向现有安装添加功能;
一些必需条件检查;
然后是产品序列号输入,这也是 SQL Server 首次采用此种授权管理方式;从微软网站下载的版本其实和正式版本无异,你如果有正式的序列号,在此输入即可成为正式版;当然在此处你也可以选择安装企业评估版,待以后通过上图的安装中心界面可将试用版升级为其它版本的正式版。
SQL Server 2008 企业版授权协议;
安装组件选择,默认情况下什么也没有选中,根据情况选择即可;
配置实例并选择安装路径;从图中可以看出,虽然实例安装到了 D 盘,但只用了 177M,将近 2G 的内容都安装到了 C 盘;
配置各 SQL Server 服务的帐户名和启动类型,对开发人员来说非常实用;
配置身份验证模式,和以往版本没有什么不同;但新增了一个“指定 SQL Server 管理员”的必填项,该管理员是指 Windows 帐户,你可以新建一个专门用于 SQL Server 的帐户,或点击“添加当前用户”添加当前用户为管理员;同时“数据目录”页可指定各种类型数据文件的存储位置;
安装信息汇总,安装前的最后一步;
开始安装并安装完成用时大约 1 小时,当然这取决于你安装的组件。
安装完成后的开始菜单,Windows PowerShell 1.0 也同时被安装了:
启动 SQL Server Management Studio,除了 splash 变化以外,SSMS 在界面上和 SQL Server 2005 没有任何不同:
posted @
2009-01-10 13:07 龙霖 阅读(541) |
评论 (0) |
编辑 收藏
Picaview
PicaView 2.0 是 ACD System 公司出品的高性能的看图程序。您不需要打开一个看图程序,只需在图形文件上点击鼠标右键,内容相关菜单上就会出现这个图形文件的缩略图、格式、尺寸,您也可以选择查看全尺寸的图像,您还可以直接打印、转换该图形文件!
它支持查看 BMP、DCX、GIF、IFF-ILBM、JPEG、JP2、PCX、Photo-CD、SoftImage PIC、PNG、PhotoShop PSD、RAS、RSB、SGI、TGA、TIFF 和 WMF image 等多种常见的图形文件格式!另外还支持右键预览 MIDI、MP3、WMA、WAV 等常见媒体文件。
本版在使用上相对比较独立,如果不是完全安装,则不与其他任何 ACD Systems 的软件关联,并且插件采用了 ACDSee 8.0 Pro 的部分新版插件。使用 ACDSee 8.0 Pro 的插件,能解决很多看图问题,比如不能正常显示 PNG 透明通道、不能查看或者查看 XP 图标有毛刺等等。强烈推荐。
文件详细列表:
文件名 作用 版本
CX_AdjustLevels.apl 调整色阶 1.11
CX_ContactSheet.apl 联系表实用程序 1.1
CX_DFinder.apl 查找重复的文件 1.01
CX_Email.apl 电子邮件 1.07
CX_JPEGTrans.apl 无损 JPEG 旋转 1.01
RealOptimizer.apl 图片压缩插件(极品) 1.8
ID_ART.apl AOL ART 图像导入库 1.04
ID_DCRaw.apl 数据相机 RAW 插件 1.1
ID_DjVu.apl DjVu 图像解码/编码库 2.1
ID_EPS.apl EPS 图像导入库 1.0
ID_Font.apl TTF 图像导入库(查看字体) 1.01
ID_ICN.apl ICN 图像导入库 2.11
ID_ICO.APL ICO & ICL 图像导入库 3.0
ID_Mag.apl Mag 图像导入库 1.01
ID_Media.apl 媒体插件(音乐,电影) 2.2
ID_MrSid.apl LizardTech MrSID 图像导入库 2.0
ID_PhotoCD.apl 柯达 Photo CD 图像导入库 2.11
ID_PIC.apl PIC 图像导入库 1.01
ID_Pict.apl PICT 图像导入库 1.04
ID_PIX.apl PIX 图像导入库 1.01
ID_PNM.apl PNM 图像导入库 1.01
ID_PS.apl PS/EPS/PDF 图像导入库 1.12
ID_PSP.apl PSP 图像导入库 2.1
ID_RAS.APL SUN Rasterfile 图像导入库 1.11
ID_Susie.apl Susie 图像插件抽象层 1.01
ID_X.apl XBM/XPM 图像导入库 1.11
IDE_ACDStd.apl 标准图像解码库 3.26
IDE_Adobe.apl Adobe Photoshop 文件导入插件提取层 1.01
IDE_IFF.apl IFF 图像导入库 1.01
IDE_JP2.apl JPEG 2000 图像解码库 2.12
IDE_PSD.apl PSD 图像导入库 3.13
IDE_RAS.apl SUN 光栅文件图像导入库 1.11
IDE_RSB.apl Red Storm 译码插件 1.03
IDE_SGI.apl SGI 图像导入库 2.11
另外加入微软xppowertoys中的右键调整图片大小小工具(这个功能只能用在XP操作系统之上的),图片处理功能更全了,可以批量压缩(优化),调整亮度对比等,调整大小,调整方向,还可以右键听音乐,看电影(比较费资源,低配置的朋友建议在设置中关闭)......
XnView Shell Extension XnView Shell Extension ,几乎可以取代acdsee的工具Picaview,除了没有picaview的设置多,如果只想在右键菜单上浏览图片,完全可以有这
个工具完成。 XnView Shell Extension 安装后只有一个XnViewShellExt.dll
posted @
2009-01-10 09:30 龙霖 阅读(413) |
评论 (0) |
编辑 收藏
#include "assert.h"
//计算字符串src的长度
int strlen(const char* str)
{
int i = 0;
while(*(str+i) != ''\0'')
{
i++;
}
return i;
}
//将字符串src copy 到 des中
char* strcpy(char* des, const char* src)
{
assert((des != NULL) && (src != NULL));//确认des和src均不是空指针
char* desAddress = des;
//copy
while ((*des++ = *src++) != ''\0'')
{
NULL;
}
return desAddress;
}
//将src连接到des后面
char* strcat(char* des, const char* src)
{
char* desAddress = des;
//des指针移动到最后
while (*des++ != ''\0'')
{
NULL;
}
//指针后退一位,指向''\0''的位置
des--;
//concat
while ((*des++ = *src++) != ''\0'')
{
NULL;
}
return desAddress;
}
//截取src的第s到e个字符,将得到的子串返回
char* SubString(char* des, const char* src, int s, int e)
{
assert((des != NULL) && (src != NULL));
char* desAddress = des;
//如果e的值超出字符串的长度,则截取从s到字符串最后的字符
int maxlength = (int)strlen(src);
if (e > maxlength)
{
e = maxlength;
}
//得到从e开始到s的长度为e-s的字符串
int tk = 0;
while (tk <= e-s)
{
*(des+tk) = *(src+tk+s);
tk++;
}
//结束字符串
*(des+tk) = ''\0'';
return desAddress;
}
//将src插入到des的第p个字符之后
char* StringInsert(char* des, const char* src, int p)
{
assert((src != NULL) && (des != NULL) && (p >= 0));
char* desAddress = des;
//如果位置p超出字符串的最大长度,则直接将src连接到des后面
if (p >= (int)strlen(des))
{
strcat(des,src);
return desAddress;
}
int srcLength = (int)strlen(src);
//存储第p个字符后面的字符串,存储在tempps中
char* tempps = new char[strlen(des)-p+1];
strcpy(tempps,des+p);
//指针pps指向第p+1个字符
char* pps = des+p;
//将src copy到第p个字符后面
while ((*pps++ = *src++) != ''\0'')
{
NULL;
}
//指针前移一位,指向字符串结束符''\0''
pps--;
//循环,将tempps copy 到pps后面,此时pps指向des+p+srcLength-1
while ((*pps++ = *tempps++) != ''\0'')
{
NULL;
}
//pps--;
//strcat(pps,tempps);
return desAddress;
}
//交换两个字符
void swap(char& sc, char& dc)
{
char temp = sc;
sc = dc;
dc = temp;
}
//交换字符串str中的第i,j个字符,以字符串数组返回
char* swapchars(const char* str, const int i, const int j)
{
assert(str != NULL);
char* dstr = new char[strlen(str)+1];
strcpy(dstr,str);
swap(*(dstr+i),*(dstr+j));
return dstr;
}
//倒置字符串,例如将"abcdef"变为"fedcba"
char* strrev(char* str)
{
assert(str != NULL);
int len = (int)strlen(str);
char* p = str;
char* data = new char[len+1];
//char* q = data;
//while (*p++ != ''\0'')
//{
// NULL;
//}
//p--;
//while((*data++ = *p--) != NULL)
//{
// NULL;
//}
//*(data+len) = ''\0'';
for (int i = len-1; i>=0; i--)
{
*(data+i) = *p++;
}
*(data+len) = ''\0'';
return data;
}
//将字符串按照单词进行倒序,例如将"just do it"变为"it do just"
char* wordrev(char* str)
{
assert(str != NULL);
char* p = str;
int len = (int)strlen(str);
int s = 0;
int e = len;
int k = 0;
char* data = new char[len+1];
for (int i = len-1; i >= 0; i--)
{
/*if ((str[i] != '' '') && (i != 0)) continue;
else
{
s = i + 1;
if (i == 0)
{
s = i;
}
for (int j = s; j < e; j++)
{
data[k++] = str[j];
}
data[k++] = '' '';
e = i;
}*/
if ((*(str+i) != '' '') && (i != 0)) continue;
else
{//找到空格
s = i + 1;
if (i == 0)//如果处理到第一个字符
{
s = i;
}
//将获得的单词(源串中从第s到第e个字符)
for (int j = s; j < e; j++)
{
*(data+k++) = *(str+j);
}
*(data+k++) = '' '';//补齐空格
e = i;
}
}
*(data+k) = ''\0'';
return data;
}
//从一个字符串中删除另一个字符串中出现的字符
char* delchars(char* str, const char* src)
{
assert((str != NULL) && (src != NULL));
int len = (int)strlen(str);
char* data = new char[len+1];
char* p = data;
//对原数据进行一个copy,防止源数据为只读
while ((*data++ = *str++) != ''\0'')
{
NULL;
}
char* res = p;
int srclen = (int)strlen(src);
while (*res != ''\0'')//对源串进行循环
{
for (int i = 0; i < srclen; i++)//依次与src中的每个字符进行比较
{
if (*res == *(src+i))//如果当前字符与src中的某个字符相等
{
int i = 0;
while (*(res+i) != ''\0'')//将当前字符后面的所有字符前移一位
{
*(res+i) = *(res+i+1);
i++;
}
}
}
res++;
}
return p;
}
//输出字符串中第一个不重复字符
char firstnorepeat(const char* str)
{
assert(str != NULL);
int len = (int)strlen(str);
char* ch = new char[len+1]; //"有重复字符"数组
char* q = ch;
int k = 0;
bool flag = true; //是否是"第一个不重复字符"的标记
for (int i = 0; i < len-1; i++) //对str进行循环
{
flag = true;//默认当前字符为"第一个不重复的字符"
//判断当前字符是否已经存在于"有重复字符"数组中
for (int m = 0;m < (int)strlen(ch); m++)
{
if (*(str+i) == ch[m])
{
flag = false; //如果当前字符存在于"有重复字符"数组中,则标记为false
}
}
//如果当前字符不再"有重复字符"数组中,则与当前字符后面的每个字符进行比较
for(int j = i+1; j < len && flag; j++)
{
if (*(str+i) == *(str+j)) //如果当前字符与其后面的某个字符相等,则这个字符不是第一个不重复字符
{
flag = false; //则这个字符不是第一个不重复字符
ch[k++] = *(str+i); //将这个字符添加到"有重复字符"数组中
}
}
if(flag) //如果当前字符既不在"有重复字符"数组中,也不与其后面的任何一个字符相等
{
return *(str+i); //当前字符就是"第一个不重复字符"
}
}
return ''\0''; //如果所有的字符都有重复,返回''\0''
}
//判读一个字符是否在一个字符串中,如果在,返回字符在字符串中首次出现的下标,否则返回-1
int IsExistInString(const char* str,char c)
{
assert(str != NULL);
int i = 0;
while (*(str+i) != ''\0'')
{
if (*(str+i) == c)
{
return i;
}
i++;
}
return -1;
}
//统计一个字符串str中所有字符的出现次数,
//data记录str中的所有不重复字符,
//num记录与data下标相对应的字符出现的次数
void StatisticChars(char* str, char* data, int* num)
{
assert(str != NULL); //确保字符串str不是空串
int len = (int)strlen(str);
//对记录次数的数组赋初值0
for (int i = 0; i < len; i++)
{
num[i] = 0;
}
//将str中的第一个字符加入到data中
data[0] = str[0];
num[0] = 1;
int k = 1;
//从第一个字符开始搜索字符串
for (int i = 1; i < len; i++)
{
//找出第i个字符在data中的位置
int j = IsExistInString(data,str[i]);
if (j < 0) //如果第i个字符不在data中
{
num[k]++;
data[k++] = str[i];
data[k] = ''\0'';
}
else //如果第i个字符是data中下标为j的字符
{
num[j]++;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//使用的例子说明
char* ch = "abca defdb ghicefghiquikelaaaaa";
char* dch = NULL;
dch = new char[50];
dch[0] = ''b'';
dch[1] = ''h'';
dch[2] = ''3'';
dch[3] = ''\0'';
//char* catc = SubString(dch,ch,1,3);
//StringInsert(dch,ch,1);
//printf("%s\n",dch);
//char* catc = strcat(dch,ch);
//printf("%s\n",catc);
//char* cch = NULL;
//cch = new char[100];
//cch[0] = ''1'';
//strcpy(cch,ch);
//printf("%s\n",cch);
//char* tc = strrev(ch);
//printf("%s\n",tc);
//char* tc = wordrev(ch);
//printf("%s\n",tc);
//char* dc = delchars(ch,dch);
//printf("%s\n",dc);
//char c = firstnorepeat(ch);
//printf("%c\n",c);
//int i = IsExistInString(ch,''a'');
//printf("%d\n",i);
//int len = (int)strlen(ch);
//int* num = new int[len+1];
//char* data = new char[len+1];
//data[0] = ''\0'';
//StatisticChars(ch,data,num);
//for (int i = 0; i < (int)strlen(data); i++)
//{
// printf("%c\t%d\n",data[i],num[i]);
//}
return 0;
}
文章出处:http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997_2.html
文章出处:http://www.diybl.com/course/3_program/c++/cppsl/20071128/87997.html
posted @
2008-11-23 11:50 龙霖 阅读(501) |
评论 (0) |
编辑 收藏
问题:
使得在访问页面的时候能够沿用上次的设置,或者在不同的页面间共享数据。比如用户在访问网站的时候设置了页面字体的大小,那么会希望下次访问的时候仍然能使用同样的设置进行浏览,而不用重复设置。
解决方案:
在用户浏览页面并进行设置时,将这些设置保存在cookie中,下次访问的时候读取cookie中的设置。
参考下面的脚本:
// utility function to retrieve an expiration data in proper format;
function getExpDate(days, hours, minutes)
{
var expDate = new Date();
if(typeof(days) == "number" && typeof(hours) == "number" && typeof(hours) == "number")
{
expDate.setDate(expDate.getDate() + parseInt(days));
expDate.setHours(expDate.getHours() + parseInt(hours));
expDate.setMinutes(expDate.getMinutes() + parseInt(minutes));
return expDate.toGMTString();
}
}
//utility function called by getCookie()
function getCookieVal(offset)
{
var endstr = document.cookie.indexOf(";", offset);
if(endstr == -1)
{
endstr = document.cookie.length;
}
return unescape(document.cookie.substring(offset, endstr));
}
// primary function to retrieve cookie by name
function getCookie(name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while(i < clen)
{
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
{
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if(i == 0) break;
}
return;
}
// store cookie value with optional details as needed
function setCookie(name, value, expires, path, domain, secure)
{
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
((secure) ? "; secure" : "");
}
// remove the cookie by setting ancient expiration date
function deleteCookie(name,path,domain)
{
if(getCookie(name))
{
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
使用getCookie(name)函数来读取cookie中保存的值,参数name为cookie项的名称。如果该cookie项不存在则返回一个空字符串。
使用setCookie()函数来保存cookie项的值,其中第一、二两个参数分别为cookie项的名称和值。如果想为其设置一个过期时间,那么就需要设置第三个参数,这里需要通过getExpDate()获得一个正确格式的参数。
最后,使用deleteCookie()来删除一个已存在的cookie项,实际上是通过让该项过期。
cookie将数据保存在客户端。页面的脚本只能读取所在域和服务器的cookie值,如果域内有多个服务器,那么需要设置第五个参数,以指定服务器。浏览器的容量一般限定为每服务器20个name/value对,每个cookie项不超过4000个字符,更现实点,单个cookie项应少于2000字符,也就是说不要用cookie在客户端保存大容量数据。
不同的浏览器保存cookie的方式也有所不同。IE为每个域的cookie建立一个文本文件,而Netscape则将所有的cookie存储在同一个文本文件中。
注意:cookie存放在客户端,所以会受到浏览器设置的影响,比如用户可能会禁用cookie。要检测浏览器是否支持cookie,使用属性navigator.cookieEnabled来判断。
参考: (Oreilly) Java Script And Dhtml Cookbook.chm
http://www.cnblogs.com/anderslly/archive/2006/10/11/javascriptcookie.html
posted @
2008-10-28 12:12 龙霖 阅读(179) |
评论 (0) |
编辑 收藏