Categories
Links
|
|
delphi 强类型数据集 |
在delphi中,访问TDataSet的子类字段通常用FindByName,其实可以用类似ado.net 强类型数据集的方法来完成,简单的例子
unit Unit10;
interface uses ADODB,classes,DB,variants,dialogs;
type TPermission=class(TADODataSet) constructor create(owner:TComponent);override; public security_key_id:TIntegerField; id:TIntegerField; group_id:TIntegerField; access_level:TIntegerField;
end;
procedure test; implementation constructor TPermission.create(owner: TComponent); begin inherited Create(owner); //创建字段 self.CommandType:=cmdTable; CommandText:='permissions';
security_key_id:=TIntegerField.Create(self); security_key_id.FieldName:='security_key_id'; id:=TIntegerField.Create(self); id.fieldName:='id' ;
group_id:=TIntegerField.Create(self); group_id.fieldName:='group_id'; access_level:=TIntegerField.create(self); access_level.fieldName:='access_level';
//设置dataset,同时会将字段加入到fields集合 security_key_id.DataSet:=self; id.DataSet:=self; group_id.DataSet:=self; access_level.dataset:=self;
end;
procedure test; var p:TPermission;
begin p:=TPermission.Create(nil); p.ConnectionString:='.................................................'; p.Active:=true; while not p.eof do begin
showmessage(vartostr(p.security_key_id.Value)); p.Next; end; end; end.
其实,如果delphi的index 属性支持字符串的话,可以定义出更高效的类,yy的
TPermission=class(TADODataSet) published property security_key_id:TField index 'security_key_id' read fieldByname; property group_id:TField index 'group_id' read fieldbyname; property id:TField:TField index 'id' read fieldbyname property access_level:TField index 'id' read fieldbyname
end;
|
| [2008-06-25 02:39:30.385256 | Author:jiangjianxiao ] [] 19 comments |
|
|
paxscript |
basic
一句话,还真不错,有很多vb.net的语法,但又有些不同,比方说 过程无需带(),写了一段调用adodb的脚本,跑起来速度不赖,同vbscript差不多。
接下去,测试了字符串连接,类似
s=s & rs.fields("field").value & "\r\n" ’后面这个\r\n应该不是vb的特征
发现速度下来了,可见字符串处理效率不高,但想到其可以调用delphi 的vcl库,试着想使用vcl的字符串类,如TStringList,发现运行到add就卡壳
imports classes 'delphi classes 单元
dim s as TStringList
s=new TStringList
s.Add("test")
不支持的特色
1. is 操作符 typeof c is integer
2. 不能在定义时创建新对象,如dim c as new MyObject
javascript
1. 注意单元引用,如 using a in './units/a.pp'
bug
var a = new Array(3) a[2] = 12; //println a; //println a.length; a[5] = 36; //println a; //println a.length; var d = a.concat([1,2,3]); println d.length; println d;
这段脚本居然丢失 a[5]. 结果为,,12,,,1,2,3 ,长度为8,显然,contact冲掉了最后一个元素
如果 写
a=[1,2,3];
a.conact([4,5,6]); //不认这个conact
看来是不能用了
|
| [2008-06-18 14:41:44.531428 | Author:jiangjianxiao ] [] 3 comments |
|
|
curl的许可 |
被infoq 上的 curl 6.0 比actionscript 3.0快8倍的消息刺激了一下,所以这几天又留心了一下curl. 说到又,是这个东西很早前就关注过,不过被它的语法搞晕了。 不过现在再来看,倒也不难,无非是一种置标语言+代码,同 xml 内嵌代码没什么区别,比方说
{CommandButton label="test"},你可以看成<CommandButton label="test"/>或是
CommandButton but=new CommandButton{label="test"}
当然这句更等效的是
{let but:CommandButton={CommandButton label="test"}}
n多的大括号:(
这东西的许可在这里,http://www.curl.com/products_licensing.php 大致看了一下,这公司大有酒香不怕巷子深的意味。
首先,基本使用是免费的,不过对照 pro的许可,会发现一些功能缺失(而且对是针对企业级应用的,像https,encryption,concurrency,所以免费使用的许可也只能说是玩具)
Https support
Complex concurrency
Running with privilege
Encryption & pCurl
Single sign-on
QTP integration
就算是免费的,在web上部署,你也需要申请许可,当然本地和localhost不需要
ide 的pro版本有60天的免费使用期,要收费的,不过你可以免费使用非pro版本
6.0是传统的ria应用,7.0 代号nitro ,选air ,加入了离线内容
对比一下,siliverlight ,走开放路线,基本可能达到免费,flex 也是走开放路线,基本可以达到免费的程度。而你这个样子,凭什么啊? |
| [2008-06-14 08:47:02.417322 | Author:jiangjianxiao ] [] 1 comments |
|
|
我的第一篇在app engine上的blog |
虽然粗糙,但都是自己一行一行 代码垒起来的,虽然代码也没有几行:), 我的数据是通过urllib post上来的,结果是没有作者字段。 app engine缺少一种通过email 获取user对象的方法。 为了将user字段补充完成。 我写了这样一个方法
@check_login def update_author(request): for blog in Blog.all(): blog.user=users.get_current_user() blog.put() return HttpResponse("Update author finish!")
结果如何,超时错误,然后换成这样
@check_login def update_author(request): user=users.get_current_user() for blog in Blog.all(): blog.user=user blog.put() return HttpResponse("Update author finish!")
pass
最近的blog都没有技术含量,呵呵 ,datastore没有一种批量更新的方法吗? 我现在没有发现,类似 update Blog set user=:1,倒是删除有针对集合的操作 ,另外,像这样的场合,使用事务处理应该会快些吧
这东西一开始用app engine自身的RequestHandler机制写的,我写了一个简单的mvc类来简化开发,记录在这里,备忘吧
main.py
application=webapp.WSGIApplication( [ ('/(?P<app>\w+?)/(?P<controller>\w+?)(?:/(?P<action>\w+?))?(?:/(?P<id>\d+?))?(?:\?\w*)?',contrib.mvc.DispatchRequestHandler)
class DispatchRequestHandler(webapp.RequestHandler): def __init__(self): super(DispatchRequestHandler,self).__init__() def dispatch(self,app,controller,action=None,id=None): module="%s.%s_controller" %(app.lower(),controller.lower()) m = __import__(module) for i in module.split(".")[1:]: m = getattr(m, i) path=os.path.dirname(m.__file__) Controller=getattr(m,"%sController" % controller.capitalize()) c=Controller(self,path) if action is None: action='index' func=getattr(c,action) if id is None: func() else: func(id) def get(self,app,controller,action=None,id=None): self.dispatch(app,controller,action,id) def post(self,app,controller,action=None,id=None): self.dispatch(app,controller,action,id)
Controller基类
class Controller(object): def __init__(self,handler,path):
self.handler=handler self.request=handler.request self.response=handler.response self.path=path self.flush=Flush() @property def method(self): return self.request.method def redirect(self,uri,t=False): self.handler.redirect(uri,t)
def error(self,code): self.response.set_status(code) self.response.clear()
def render_to_response(self,file,values=None): path=os.path.join(self.path,"templates",file)
self.response.out.write(template.render(path,values)) #new,GET请求,返回一个用于创建资源的表单 def new(self): pass #show,处理针对单个资源的GET请求 def show(self,id): pass #create,处理POST请求,并将创建一个新资源 def create(self): pass #edit,GET请求,返回一个用于更新资源的表单 def edit(self,id): pass #update,处理PUT请求,并更新指定的资源 def index(self): pass #update,处理PUT请求,并更新指定的资源 def update(self,id): pass #destroy,处理DELETE请求,销毁一个资源 def destroy(self,id): pass
|
| [2008-06-13 10:48:12.744533 | Author:jiangjianxiao ] [] 3 comments |
|
|
django小提示-FormPreview中的BooleanField |
这个问题得确是django的 bug 问题在于django 总是将BooleanField的值处理成True,False,但有个地方存在不一致的地方,就是 CheckboxInput的value_form_datadict方法
代码
- def value_from_datadict(self, data, files, name):
- if name not in data:
- # A missing value means False because HTML form submission does not
- # send results for unselected checkboxes.
- return False
- return super(CheckboxInput, self).value_from_datadict(data, files, name)
这个方法会导致一些错误,因为 data是个字符串的词典,因此,这个方法会返回bool的False(当data中没有is_test时)或字符串的'False'(当存在,但值为False时) 第一个是hash 值的计算,一开始的bool类型的False同unicode字符串的False是不同 的. 这样会导致当不核选时需要提交两次 其次是当render的时候,可以查看CheckboxInput的render方法,里面有个check_test,默认被设置为bool,这样,当调用bool('False')时,返回的就是True了
所以,修改上面的方法(或继承新建一个Checkbox2Input),让其根据实际情况返回bool值就ok了 比方说(这只是个quick and dirty的解决方法,英语好的可以提交bug,让django团队来处理这个问题)
代码
- def value_from_datadict(self, data, files, name):
- if name not in data:
- # A missing value means False because HTML form submission does not
- # send results for unselected checkboxes.
- return False
- #print data[name],"value_form_datadict",type(data[name])
- result=super(CheckboxInput, self).value_from_datadict(data, files, name)
- return True if result in ['on','ON','True','true'] else False
由于存在这两个问题,因此光传入一个check_test lambda 还不足以解决问题,我一开始就以为这个能解决,呵呵 |
| [2007-12-06 11:59:12 | Author:jiangjianxiao ] [] 2 comments |
|
|