再次程序人生

从事烟厂,银行,电厂信息化建设

置顶随笔 #

[置顶]团队职能划分

摘要: 团队职能划分 -->以下主要是对中小型团队成员职责的划分,视团队大小可由一人负责兼任多个角色,极端情况下一个人全部搞定!项目经理老大,对项目负责,对领导负责。主要工作有三个:第一是沟通,第二是沟通,第三还是沟通。需求分析(领域专家)项目经理的左辅。翻译器,见人(客户)说人话,见鬼(程序员-.-)说鬼话。架构师项目经理的右弼。服务人员,提供构架这一高级服务,服务于需求,也服务于程序员。好的构架不仅能...阅读全文

posted @ 2008-08-07 09:23 再次程序人生 阅读(87) 评论(0) 编辑

[置顶]北京的生活

摘要: 答“月薪4000元在苏州的日子” 前不久俺朋友发给我一篇文章,俺没去查这篇文章的出处。大抵是说拿到手的工资是4000元的话没办法结婚成家。俺也不想批评他什么。下面是我当我准备恢复给我那位朋友的原话,但我一直没有发出去,因为可能会引起不必要的论争。没本事的话只能省钱。 过日子还是要会算计的。少看电影,少抽烟。少用电(买节能灯泡),少跟人打吹牛电话。我这两年没买什么衣服,还是因...阅读全文

posted @ 2006-12-30 17:25 再次程序人生 阅读(185) 评论(0) 编辑

2008年8月7日 #

团队职能划分

 

以下主要是对中小型团队成员职责的划分,视团队大小可由一人负责兼任多个角色,极端情况下一个人全部搞定!

项目经理
老大,对项目负责,对领导负责。主要工作有三个:第一是沟通,第二是沟通,第三还是沟通。

需求分析(领域专家)
项目经理的左辅。翻译器,见人(客户)说人话,见鬼(程序员-.-)说鬼话。

架构师
项目经理的右弼。服务人员,提供构架这一高级服务,服务于需求,也服务于程序员。好的构架不仅能满足系统的而要求,更重要的是让程序员能很容易的明白,好实现才好修改。

程序员
人肉代码生成器。

美工
让系统“看”起来更好一点。高级美工又称前台设计或UI设计,作用是让系统“用”起来更好一点。

测试
时刻幻想着自己就是“变态”的客户。

系统维护
需要对各类工具软件和服务器软件具有令人发指的敏锐直觉。通常是团队技术革命的引爆点。

后勤
“三个人肉代码生成器 + 一个合格的后勤 = 三个超级人肉代码生成器”。负责端茶倒水洗衣叠被的专职后勤是能让程序员写程序写的嗷嗷叫的终极激励。强烈建议优先配置。

http://www.cnblogs.com/yuandong/archive/2008/08/06/rules_in_team.html

posted @ 2008-08-07 09:23 再次程序人生 阅读(87) 评论(0) 编辑

2008年7月23日 #

【译】注释代码的13技巧

【译】注释代码的13技巧

本文发表在作者José M. Aguilar的博客Variable Not Found,后来由Timm Martin翻译成英文发表在DevTopics上。我在真见的blog那里看到,将其翻译过来share给大家,共同学习。有翻译不当之处,望大侠斧正。

以下是如何注释代码的13tips,它们会在日后帮助你更容易理解和维护代码。

1. Comment each level(每个级别的注释有统一的风格)

注释每一个代码块,并且在各个级别的代码块上,要使用统一的注释方法。例如:

  • 对于类,应包含简单的描述、作者以及最近的更改日期
  • 对于方法,应包含目的的描述、功能、参数以及返回值

使用统一的注释规则对于一个团队是非常重要的。当然,更加推荐使用注释的约定和工具(例如,C#XMLJavaJavadoc),它们会是注释变得更加容易。

2. Use paragraph comments(对段落注释)

将代码块分成若干完成独立功能的“段落”,并在每个“段落”前添加注释,向读者说明“即将发生什么”。

// Check that all data records
// are correct
foreach (Record record in records)
{
    if (rec.checkStatus()==Status.OK)
    {
        . . .
    }
}
// Now we begin to perform
// transactions
Context ctx = new ApplicationContext();
ctx.BeginTransaction();
. . .

3. Align comments in consecutive lines(对齐注释行)

对于拥有后缀式注释的多行代码,排版注释代码,使各行注释对齐到同一列。

const MAX_ITEMS = 10; // maximum number of packets
const MASK = 0x1F;    // mask bit TCP

一些开发人员使用tab来对齐注释,有些则使用空格。但是由于tab在不同的编辑器或者IDE上会有所不同,最好还是使用空格。

4. Don't insult the reader's intelligence(不要侮辱读者的智商)

不要写没用的注释,例如:

if (a == 5)      // if a equals 5
    counter = 0; // set the counter to zero

写这种无用的注释不但浪费你的时间,而且读者在读这种很容易理解的代码时,很容易被你的注释转移注意力,浪费了时间。

5. Be polite(要有礼貌)

不要写不礼貌的注释代码,例如“注意,愚蠢的使用者输入了一个负数”,或者“修正由于最初的开发者的可怜且愚蠢的编码所造成的副作用”。这样的注释冒犯了作者,而且你并不知道谁会在将来读到这段注释——你老板、客户或者是你在注释中冒犯的那个可怜且愚蠢的开发人员。

6. Get to the point(简明扼要)

不要在注释中写的过多,不要写玩笑、诗和冗长的话。总之,注释需要简单直接。

7. Use a consistent style(风格一致)

一些人认为注释应该能让非程序员也能看懂,但是也有些人认为注释仅仅是指导程序员的。不管怎么说,像《Successful Strategies for Commenting Code》中所说,真正重要的是注释始终面向同一个读者,在这点上,应该保持一致。个人认为,我很怀疑会有非程序人员阅读代码,所以应该把阅读注释的对象定位为开发人员。

8. Use special tags for internal use(在内部使用特殊的标签)

团队中处理代码时,在程序员之间应采用一系列统一的‘标签注释’进行交流。例如,很多团队使用“TODO”来表示一段需要额外工作的代码。

int Estimate(int x, int y)
{
    // TODO: implement the calculations
    return 0;
}

 ‘标签注释’并不解释代码,而是引起主意或者传递信息。但是,使用这种方法时,务必要完成‘标签注释’传递的信息。

9. Comment code while writing it(写代码的同时,完成注释)

写代码的同时添加注释,因为此时你的思路最为清晰。如果你把注释的任务留到最后,那么你相当于经历了两次编码。“我没有时间注释”“我太忙了”“项目耽误了”这些往往是不写注释的理由。所以,程序员们认为,最理想的解决方法是‘写代码前先写注释’。例如:

public void ProcessOrder() 
{
    // Make sure the products are available
    // Check that the customer is valid
    // Send the order to the store
    // Generate bill
}

10. Write comments as if they were for you (in fact, they are)把代码的读者想象成你自己(实际情况往往如此)

注释代码时,不仅仅要为将来可能维护你代码的人考虑,而且要考虑到读注释的可能是你。伟大的Phil Haack说过:“每当有偶一行代码被敲上屏幕,你都要从维护的角度审视一边这段代码。” "As soon as a line of code is laid on the screen, you’re in maintenance mode on that piece of code."(著名的话不敢不附上原句)

结果,我们自己往往是我们良好注释的受益者,或者是烂注释的受害人。

11. Update comments when you update the code(更新代码时,记得更新注释)

如果不能随着代码的更新而更新注释,那么即使再准确的注释也毫无意义。代码和注释必须同步,否则这些注释对于维护你代码的程序人员来说简直是折磨。在使用refactoring工具自动更新代码时,应尤其注意,它们会自动更新代码而不会改变注释,这些注释自然就过期了。

 

12. The golden rule of comments: readable code(可读性良好的代码是最好的注释)

对于许多程序员来说,基本的原则之一就是:让代码自己说话。有人可能会怀疑这是那些不爱写注释的程序员的借口,然而这确实是一个不争的事实。自我解释良好的代码对于编码来说大有益处,不但代码容易理解甚至使注释变得没有必要。举例来说,在我的文章《Fluid Interfaces》中展示了什么是清晰的自我解释型代码:

Calculator calc = new Calculator();
calc.Set(0);
calc.Add(10);
calc.Multiply(2);
calc.Subtract(4);
Console.WriteLine( "Result: {0}", calc.Get() );

在本例中,注释是没必要的,并且会违背tip#4 。为了使代码更加可读,应该考虑使用适当的名字(像在经典的《Ottinger's Rules》描述的),确保正确的缩进和代码风格栏线(代码风格栏线是类似于#region #endregion这类的东西吧?)。如果这一点做的不好,直接后果是,你的注释看起来就像是在为晦涩难懂的代码而道歉。

13. Share these tips with your colleagues(与你的同事share这些tips

尽管tip#10中曾说过良好的注释会是自己从中收益,但是这些tips会使所有开发人员收益,尤其是在团队合作的环境中。因此大方的与同事分享这些注释的技巧,让我们都能写出易懂而且好维护的代码。

http://www.cnblogs.com/Willson/archive/2008/07/23/1249805.html

posted @ 2008-07-23 17:59 再次程序人生 阅读(60) 评论(0) 编辑

2007年7月18日 #

Oracle导入程序Imp的使用详解

Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],以下例举imp常用用法。


1. 获取帮助

 imp help=y

2. 导入一个完整数据库

 imp system/manager file=bible_db log=dible_db full=y ignore=y

3. 导入一个或一组指定用户所属的全部表、索引和其他对象

 imp system/manager file=seapark log=seapark fromuser=seapark imp 
 system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

4. 将一个用户所属的数据导入另一个用户

 imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
 imp system/manager file=tank log=tank fromuser=(seapark,amy)
 touser=(seapark1, amy1)

5. 导入一个表

 imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

6. 从多个文件导入

 imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) 
log=paycheck, filesize=1G full=y

7. 使用参数文件

 imp system/manager parfile=bible_tables.par

bible_tables.par参数文件:

 #Import the sample tables used for the Oracle8i Database Administrator's 
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import

8. 增量导入

 imp system./manager inctype= RECTORE FULL=Y FILE=A
Oracle imp/exp

C:Documents and Settingsadministrator>exp help=y

Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

通过输入 EXP 命令和用户名/口令,您可以
后接用户名/口令的命令:

例程: EXP SCOTT/TIGER

或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
按照不同参数。要指定参数,您可以使用关键字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)

OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)
FEEDBACK 每 x 行的显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名

在没有警告的情况下成功终止导出。
==================================================

C:Documents and Settingsadministrator>imp help=y

Import: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:06:54 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

可以通过输入 IMP 命令和您的用户名/口令
后接用户名/口令的命令:

例程: IMP SCOTT/TIGER

或者, 可以通过输入 IMP 命令和各种参数来控制“导入”
按照不同参数。要指定参数,您可以使用关键字:

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)
例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表
FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)
STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)

下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户

成功终止导入,但出现警告。

oracle的imp和exp的一些用法- -

Oracle8i/9i EXP/IMP使用经验
一、8i EXP常用选项

1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:

exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y

2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:

exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT

3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。

需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。

如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。

4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。

5、如何使用SYSDBA执行EXP/IMP?

这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:

exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n

6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和'都需要使用u26469屏蔽它们的特殊含义:

exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"

如果是windows平台,则使用下面的格式:

exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""

二、8i IMP常用选项

1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。

2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。

另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。

三、Oracle9i EXP功能描述

Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:

1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。

2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。

3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。

4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。

5、TEMPLATE - 用于支持iAS。

6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。

四、不同版本的EXP/IMP问题?

一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:

1、在高版本数据库上运行底版本的catexp.sql;

2、使用低版本的EXP来导出高版本的数据;

3、使用低版本的IMP将数据库导入到底版本数据库中;

4、在高版本数据库上重新运行高版本的catexp.sql脚本。

但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261,你可以到METALINK上去查看有关此BUG的详细信息。

BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。

CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,

decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')

|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')

|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')

|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),

r.check_opt, r.enable_flag,

DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where u.user# = o.owner#

and r.obj# = o.obj#

and (uid = 0 or

uid = o.owner# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

)

/

grant select on sys.exu81rls to public;

/

五、其他问题

本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考Metalink文档:“Overview of Export and Import in Oracle7”(文档号:61949.1)。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。

另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。

[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.

[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.

在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度


来源:
http://blog.csdn.net/wumourong/archive/2007/05/23/1623301.aspx

posted @ 2007-07-18 15:21 再次程序人生 阅读(551) 评论(0) 编辑

2007年5月11日 #

ORACLE 两个表结构相同,一个做为源表,一个做为补录表,同步补录表数据到源表的SQL语句

表结构
-- Create table 源表
create table INPUT_FWMJ
(
  JGBH CHAR(5) not null,
  JGMC VARCHAR2(50) not null,
  BMBH CHAR(10) not null,
  BMMC VARCHAR2(50) not null,
  FWMJ NUMBER(20,2) not null,
  ZLBZ CHAR(1) not null
)
-- Create/Recreate primary, unique and foreign key constraints
alter table INPUT_FWMJ
  add constraint 机构编号和部门编号 primary key (JGBH, BMBH)

--补录表
-- Create table
create table INPUT_FWMJ_CHANGE
(
  TASKID     NUMBER not null,
  STATE      VARCHAR2(100),
  JGBHSOURCE CHAR(5),
  BMBHSOURCE CHAR(10),
  JGBH       CHAR(5) not null,
  JGMC       VARCHAR2(50) not null,
  BMBH       CHAR(10) not null,
  BMMC       VARCHAR2(50) not null,
  FWMJ       NUMBER(20,2) not null,
  ZLBZ       CHAR(1) not null
)

-- Create/Recreate primary, unique and foreign key constraints
alter table INPUT_FWMJ_CHANGE
  add constraint PK_INPUT_FWMJ_CHANGE primary key (JGBH, BMBH, TASKID)

              
--增加
                insert
          into input_fwmj(jgbh, jgmc, bmbh, bmmc, fwmj, zlbz)
                select jgbh, jgmc, bmbh, bmmc, fwmj, zlbz
                  from input_FWMJ_change
                 where state = 'Added'
                --删除
                 delete input_fwmj
                 where jgbh || bmbh in
                       (select JGBHSOURCE || BMBHSOURCE
                          from input_FWMJ_change
                         where input_FWMJ_change.State = 'Deleted')
                --修改
                 update input_fwmj set
                 input_fwmj.fwmj =
                       (select input_FWMJ_change.fwmj
                          from input_FWMJ_change
                         where input_FWMJ_change.State = 'Updated'
                           and input_FWMJ_change.JGBHSOURCE =
                               input_fwmj.jgbh
                           and input_FWMJ_change.BMBHSOURCE =
                               input_fwmj.bmbh),
                 input_fwmj.zlbz =
                       (select input_FWMJ_change.zlbz
                          from input_FWMJ_change
                         where input_FWMJ_change.State = 'Updated'
                           and input_FWMJ_change.JGBHSOURCE =
                               input_fwmj.jgbh
                           and input_FWMJ_change.BMBHSOURCE =
                               input_fwmj.bmbh)
                 where exists((select 1
                                from input_FWMJ_change
                               where input_FWMJ_change.State = 'Updated'
                                 and input_FWMJ_change.JGBHSOURCE =
                                     input_fwmj.jgbh
                                 and input_FWMJ_change.BMBHSOURCE =
                                     input_fwmj.bmbh))

posted @ 2007-05-11 18:17 再次程序人生 阅读(796) 评论(0) 编辑

2007年1月17日 #

一个数据源赋给多个COMBOX控件绑定,改变一个COMBOX值时其它几个也跟着改变(已有解决方案)

     问题:
     下面代码实现一个数据表中所有列的信息绑定在KEYCOLUMN,VALUESCOLUMN,DESCCOLUMN三个COMBOX控件上,方便定义一个数据字典的表让其选择KEYCOLUMN,VALUESCOLUMN,DESCCOLUMN三个列分别对应数据表的那个列
  绑定后发现只要改变一个COMBOX值时其它几个也跟着改变
                   this.CO_KEYCOLUMN.DataSource = this._persistCustomDataTable.Columns;
                    this.CO_KEYCOLUMN.DisplayMember = "Name";
                    this.CO_KEYCOLUMN.ValueMember = "ID";
                    this.CB_VALUESCOLUMN.DataSource =this._persistCustomDataTable.Columns;
                    this.CB_VALUESCOLUMN.DisplayMember = "Name";
                    this.CB_VALUESCOLUMN.ValueMember = "ID";
                    this.CB_DESCCOLUMN.DataSource =this._persistCustomDataTable.Columns;
                    this.CB_DESCCOLUMN.DisplayMember = "Name";
                    this.CB_DESCCOLUMN.ValueMember = "ID";
注:this._persistCustomDataTable.Columns为数据表列的集合

解决后的程序   
1.重新定义注:this._persistCustomDataTable.Columns为数据表列的集合分别为每个COMBOX绑定独立的数据源
                    List<UDCP.Core.DataColumn> comboxDataColumn1 = new  List<UDCP.Core.DataColumn>();
                    List<UDCP.Core.DataColumn> comboxDataColumn2 = new List<UDCP.Core.DataColumn>();
                    List<UDCP.Core.DataColumn> comboxDataColumn3 = new List<UDCP.Core.DataColumn>();
                    comboxDataColumn1.InsertRange(0,this._persistCustomDataTable.Columns);
                    comboxDataColumn2.InsertRange(0, this._persistCustomDataTable.Columns);
                    comboxDataColumn3.InsertRange(0, this._persistCustomDataTable.Columns);

                    //值列,显示列,描述列
                    this.CO_KEYCOLUMN.DataSource = comboxDataColumn1;//this._persistCustomDataTable.Columns;
                    this.CO_KEYCOLUMN.DisplayMember = "Name";
                    this.CO_KEYCOLUMN.ValueMember = "ID";
                    this.CB_VALUESCOLUMN.DataSource = comboxDataColumn2;//this._persistCustomDataTable.Columns;
                    this.CB_VALUESCOLUMN.DisplayMember = "Name";
                    this.CB_VALUESCOLUMN.ValueMember = "ID";
                    this.CB_DESCCOLUMN.DataSource =comboxDataColumn3; //this._persistCustomDataTable.Columns;
                    this.CB_DESCCOLUMN.DisplayMember = "Name";
                    this.CB_DESCCOLUMN.ValueMember = "ID";

posted @ 2007-01-17 16:56 再次程序人生 阅读(1056) 评论(0) 编辑

2007年1月13日 #

面向对象基本概念

摘要: 面向对象基本概念乔高峰 于深圳整理(2007-01-13)面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。面向对象方法(Object-Oriented Method)是一种把...阅读全文

posted @ 2007-01-13 21:53 再次程序人生 阅读(575) 评论(0) 编辑

2007年1月7日 #

checkedListBox 如何赋多值

摘要: for (int i = 0; i < checkedListBox1.Items.Count; i++) { if (checkedListBox1.Items[i].ToString() == "1" || checkedListBox1.Items[i].ToString() == "2") { MessageBox.Show(checkedListBox1.Items[i].ToSt...阅读全文

posted @ 2007-01-07 22:12 再次程序人生 阅读(601) 评论(0) 编辑

2006年12月30日 #

北京的生活

摘要: 答“月薪4000元在苏州的日子” 前不久俺朋友发给我一篇文章,俺没去查这篇文章的出处。大抵是说拿到手的工资是4000元的话没办法结婚成家。俺也不想批评他什么。下面是我当我准备恢复给我那位朋友的原话,但我一直没有发出去,因为可能会引起不必要的论争。没本事的话只能省钱。 过日子还是要会算计的。少看电影,少抽烟。少用电(买节能灯泡),少跟人打吹牛电话。我这两年没买什么衣服,还是因...阅读全文

posted @ 2006-12-30 17:25 再次程序人生 阅读(185) 评论(0) 编辑

2006年12月28日 #

35岁前成功的12条黄金法则(http://www.javaresearch.org/article/60374.htm)

摘要: 35岁前成功的12条黄金法则 yqi_xian 原创更新:2006-12-26 18:25:56版本: 1.0 要离开程序了,心里面很多失落,未来的路到底怎么样.贴一段激励自己,也激励所有的IT人员吧!!  第一章:一个目标  一艘没有航行目标的船,任何方向的风都是逆风  1、你为什么是穷人,第一点就是你没有立下成为富人的目标  2、你的人生核心目标是什么?  杰出人士与平庸之辈的根本差别并不是天...阅读全文

posted @ 2006-12-28 12:50 再次程序人生 阅读(244) 评论(0) 编辑

2006年12月27日 #

网络广告策划(http://uuroom.blog.sohu.com/21208083.html)

摘要: 网络广告策划过程网络媒体的特点决定了网络广告策划的特定要求。如网络的高度互动性使网络广告不再只是单纯地创意表现与信息发布,广告主对广告回应度的要求会更高;网络的时效性非常重要,网络广告的制作时间短,上线时间快,受众的回应也是立即的,广告效果的评估与广告策略的调整也都必须是即时的。因此,传统广告的策划步骤在网络广告上运用可以说是应有很大的不同,因此网络广告有自己的策划过程,具体如下: 一、确定网络...阅读全文

posted @ 2006-12-27 16:21 再次程序人生 阅读(194) 评论(2) 编辑