SQL语句分别更新多条记录多个字段

通常我们使用UPDATE语句更新记录,例如:

UPDATE [MyTable] SET [MyField1]=Value1,[MyField2]=Value2 WHERE [ConditionField]=SomeValue
但有时我们需要在一条UPDATE语句中根据不同条件分别更新多条记录的多个字段,这时,我们可以使用如下示例来完成:

–更新一个字段
UPDATE [MyTable]
SET [MyField] = CASE [Id]
WHEN 1 THEN Value1
WHEN 2 THEN Value2
WHEN 3 THEN Value3
WHEN 4 THEN Value4
END
WHERE [Id] IN (1,2,3,4)
如果同时更新多个字段,可以使用如下示例来完成:

–更新多个字段
UPDATE [MyTable]
SET [MyField1] = CASE [Id]
WHEN 1 THEN Value1
WHEN 2 THEN Value2
WHEN 3 THEN Value3
WHEN 4 THEN Value4
END,
[MyField2] = CASE [Id]
WHEN 1 THEN Value5
WHEN 2 THEN Value6
WHEN 3 THEN Value7
WHEN 4 THEN Value8
END
WHERE [Id] IN (1,2,3,4)
通过以上方式就可以实现一条UPDATE语句根据不同条件更新多条记录的多个字段,减少SQL语句数量,减少数据库的查询操作次数,节约系统资源。

单片机 LCD1602 液晶

 1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图
                                图二
3`LCD1602主要技术参数:
显示容量:16×2个字符
芯片工作电压:4.5—5.5V
工作电流:2.0mA(5.0V)
模块最佳工作电压:5.0V
字符尺寸:2.95×4.35(W×H)mm
4`引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表
继续阅读
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据

单片机 矩阵键盘扫描 C语言

//矩阵键盘扫描
void Keys_Scan()
{
	uchar Tmp;
	P1=0x0f;	//高4位置0,放入4行
	DelayMS(1);
	Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1
	switch(Tmp)	//判断按键发生于0~3列的哪一列
	{
		case 1:	KeyNo=0;break;
		case 2:	KeyNo=1;break;
		case 4: KeyNo=2;break;
		case 8:	KeyNo=3;break;
		default:KeyNo=16;	//无键按下	
	}
	P1=0xf0;   //低4位置0,放入4列
	DelayMS(1);
	Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值
	switch(Tmp)	//对0~3行分别附加起始值0,4,8,12
	{
		case 1:	KeyNo+=0;break;
		case 2:	KeyNo+=4;break;
		case 4:	KeyNo+=8;break;
		case 8:	KeyNo+=12;
	}
}

单片机 串口通信 长字符串

#include <reg52.h>
/*数据定义区*/
#define uchar	unsigned char
#define uint	unsigned int
uchar		flag, a, i;
uchar code	table[]		= "I get ";
unsigned char	receive[20]	= { 0 }; /* 接收缓存 长度20 */

/*程序定义区*/
void init()
{
	TMOD	= 0x20;
	TH1	= 0xfd;
	TL1	= 0xfd;
	TR1	= 1;
	SCON	= 0x50;
	EA	= 1;
	ES	= 1;
}


void main( void )
{
	init();
	while ( 1 )
	{
		if ( flag == 1 )
		{
			ES = 0;
			for ( i = 0; i < 6; i++ ) /* 注意:若把i<6改成i<7,现象出错; */
			{
				SBUF = table[i];
				while ( !TI )
					;
				TI = 0;
			}
			i = 0;
			do /* 注意:若把i<6改成i<7,现象出错; */
			{
				SBUF = receive[i];
				while ( !TI )
					;
				TI = 0;
				i++;
			}
			while ( receive[i] != 0 );
			ES	= 1;
			flag	= 0;
			for ( i = 0; i < 19; i++ )//清空接受缓存
			{
				receive[i] = 0x00;
			}
		}
	}
}


void ser() interrupt 4
{
	static unsigned char count;
	RI = 0;
	if ( SBUF == 0x2e )//判断数据头
	{
		count = 1;
	}else if ( SBUF == 0x2d )//判断数据尾
	{
		count	= 0;
		flag	= 1;
		ES	= 0;
	}else  {
		receive[count - 1] = SBUF;//接收数据到数组receive
		count++;
	}
}


Proteus串口仿真7.0

Matlab 线性规划 linprog

x = linprog( c , A , b , Aeq , beq , lb , ub , x0 )是求解线性规划问题的命令。
c是目标函数的系数向量,A是不等式约束AX<=b的系数矩阵,b是不等式约束AX<=b的常数项
Aeq是等式约束AeqX=beq的系数矩阵,beq是等式约束AeqX=beq的常数项,lb是X的下限,ub是X的上限,X是向量[x1,x2,…xn]即决策变量。
指定迭代的初始值x0;
如果模型中不包含不等式约束条件,可用[]代替A和b表示缺省;如果没有等式约束条件,可用[]代替Aeq和beq表示缺省;如果某个xi无下界或上界,可以设定lb(i)=-inf或ub(i)=inf;
用[x , Fval]代替上述各命令行中左边的x,则可得到在最优解x处的函数值Fval;


继续阅读