2016年3月

首页2016年3月
31
Mar
0

字段默认值设置

取所有字段默认值:
SELECT SO.NAME AS "Table Name", SC.NAME AS "Column Name", SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U' AND SO.NAME = '' AND SM.TEXT IS NULL
ORDER BY SO.[name], SC.colid

如果没有则创建的方法
IF NOT EXISTS(SELECT SM.TEXT AS "Default Value"
FROM dbo.sysobjects SO INNER JOIN dbo.syscolumns SC ON SO.id = SC.id
LEFT JOIN dbo.syscomments SM ON SC.cdefault = SM.id
WHERE SO.xtype = 'U' AND SO.NAME = 'T_Move_SUPPLEMENTAMOUNT' AND SC.NAME = 'F_PRICE')
ALTER TABLE T_Move_SUPPLEMENTAMOUNT ADD DEFAULT ((0)) FOR [F_PRICE]
GO

31
Mar
0

关于《岛上书店》

不知道为什么,翻了一下网上大多关于这本书的书评,几乎无一例外的在说其中的悲伤。对我还说,这本书满本都是为了让人羡慕而写的一样。
愤世济俗的AJ除了文学博士以外,什么也没有,书店是妻子正好有的一笔基金才开的,他不喜欢的书一堆一堆的多,把大多畅销书都排除在外,对于经营只是打打混,还酗酒。这样一个人却有如此好的妻子支持他阅读的习惯,支持他没有梦想的梦想,支持他偏执。
妻子死后,一个人过着堕落的生活,这时上天给他送来一个天使,一个活泼可爱还喜欢阅读的小女孩,还得到一本价值不扉的绝版书,再后来,对其初次见面就恶劣对待的图书销售员,对他渐生好感,到最后结婚,妻子的姐姐对他还很照顾。得到脑瘤以后,想放弃自己的生命省下玛雅念大学的钱,却又鬼使神猜的失去的珍贵书籍失而复得,最重要的是玛雅和妻子并没有放弃他,他这一辈子却从未孤独过。
读这本书的过程中,充满了不平,上苍对其已经够好了,但是书的作者对其描述得却是各种悲伤,不知道作者是否是在宣扬爱哭的孩子有奶吃的道理。不过也是,在现实中,往往性别女会运用得很好,作者是要告诉大家性别男其实也可以吗?
人生总有艰难的时候,挺一挺就过去了,但困难的是一直在艰难,对美好失去了定义,失去了方向,这样的人生才算完了,读那么多书就是为了找到失去的方向吧。

26
Mar
0

Windows设置开机自启动bat脚本

开机自启动一个脚本:C:abcscript.bat。

如果直接开机启动该脚本会弹出一个黑框,我们希望能后台执行它。

此时我们需要建一个.vbs脚本来后台执行该脚本,脚本内容为:

set ws=WScript.CreateObject("WScript.Shell")
ws.Run "C:abcscript.bat /start",0

然后将该文件保存为script.vbs,放入“开始 --> 所有程序 --> 启动”内即可。

24
Mar
0

TStatusBar控件上绘图和文字

TStatusPanel的STYLE设置为psOwnerDraw

procedure TMainForm.sbBottonDrawPanel(StatusBar: TStatusBar;
Panel: TStatusPanel; const Rect: TRect);
begin
if Panel.Index = 3 then
begin

StatusBar.Canvas.Brush.Color := clBtnFace;
StatusBar.Canvas.Font.Color := clBlue;
StatusBar.Canvas.FillRect(Rect);
if tmrUpdateParameter.Tag = 0 then
  StatusBar.Canvas.TextRect(Rect,imgUpdateParameter.Width + Rect.Left + 2,Rect.Top + 2,'参数更新')
else  if tmrUpdateParameter.Tag = 1 then
  StatusBar.Canvas.TextRect(Rect,imgUpdateParameter.Width + Rect.Left + 2,Rect.Top + 2,'正在更新参数...')
else if tmrUpdateParameter.Tag = 2 then
  StatusBar.Canvas.TextRect(Rect,imgUpdateParameter.Width + Rect.Left + 2,Rect.Top + 2,'更新参数完成');
StatusBar.Canvas.Draw(Rect.Left,Rect.Top,imgUpdateParameter.Picture.Graphic);

end;
end;

23
Mar
0

多CPU下的同步函数

InterlockedCompareExchange是把目标操作数(第1参数所指向的内存中的数)与一个值(第3参数)比较,如果相等,则用另一个值(第2参数)与目标操作数(第1参数所指向的内存中的数)交换;InterlockedExchange是不比较直接交换。

整个操作过程是锁定内存的,其它处理器不会同时访问内存,从而实现多处理器环境下的线程互斥。
InterlockedCompareExchange属于Interlocked系列互锁函数之一,常用于多线程编程。类似的还有下面的几个:
增减
(1) LONG InterlockedIncrement(IN OUT LONG volatile *lpAddend);
lpAddend为长整型变量的地址,返回值为原始值。这个函数的主要作用是原子性自增(相当于++操作)。
(2) LONG InterlockedDecrement(IN OUT LONG volatile *lpAddend);
lpAddend为长整型变量的地址,返回值为原始值。这个函数的主要作用是原子性自减(相当于--操作)。
(3) LONG InterlockedExchangeAdd( LPLONG Addend, LONG Increment );
Addend为长整型变量的地址,Increment为想要在Addend指向的长整型变量上增加的数值(可以是负数)。这个函数的主要作用是保证这个加操作为一个原子访问。
交换
(1) LONG InterlockedExchange( LPLONG Target, LONG Value );
(2) PVOID InterlockedExchangePointer( PVOID *Target, PVOID Value );
用第二个参数的值取代第一个参数指向的值。函数返回值为原始值。
比较交换
(1) LONG InterlockedCompareExchange(
LPLONG Destination, LONG Exchange, LONG Comperand );
(2) PVOID InterlockedCompareExchangePointer(
PVOID *Destination, PVOID Exchange, PVOID Comperand );
如果第三个参数与第一个参数指向的值相同,那么用第二个参数取代第一个参数指向的值。函数返回值为原始值。
参数编辑
[in, out] Destination
对目标指针的值。 该符号被忽略。
[in] Exchange 交换值。 该符号被忽略。
[in] ExchangeHigh 目标的高部分交换值。
[in] ExchangeLow 目标的下半部分交换值。
[in] Comparand 比较的值与目标。 该符号被忽略。

备注编辑
请注意,生成内部展开,需要使用 /Oi。 /Oi 提示与 /O2。
若要声明一个互锁的函数用作内部,必须声明函数使用反斜前导下划线,并且新的函数必须出现在 #pragma 内部 语句。 为了方便起见,函数的内部版本。 #define 语句中声明出现在源代码,而无需这个前导下划线。
_InterlockedCompareExchange 执行 Destination 值的基本比较与 Comparand 值。 如果 Destination 值与 Comparand 值相等, Exchange值。 Destination指定的地址存储。 否则,不执行操作。
有关此示例演示如何使用 _InterlockedCompareExchange,请参见 InterlockedDecrement。
具有根据数据类型所涉及在 _InterlockedCompareExchange 的多种变体,并处理器特定是否可捕获或使用语义版本。
当 _InterlockedCompareExchange 函数对长整数值时, _InterlockedCompareExchange16 对短整型值,并_InterlockedCompareExchange64 对 64 位整数值。 由于 _InterlockedCompareExchange64 使用 cmpxchg8b 命令,则不能在之前 Pentium 处理器,如 486。
IPF 特定 _InterlockedCompareExchange_acq、 _InterlockedCompareExchange16_acq和 _InterlockedCompareExchange64_acq 内部函数是不 acq 后缀,但操作的相应功能执行获取语义,很有用,在输入临界区时的行为相同。
_InterlockedCompareExchange_rel、 _InterlockedCompareExchange16_rel和 _InterlockedCompareExchange64_rel 内部函数是不rel 后缀,但操作的相应函数执行与版本语义,很有用,在离开临界区时的行为相同。
这些功能的行为就如同读写内存屏障 有关更多信息,请参见 ReadWriteBarrier。
这些实例只能用作内部。