我有一个数据库,我需要在每一行填充它的前两列。第一列是日期,第二列是id。
我的代码如下:
>>> f.__get__(A()) # bind f to an instance
<bound method f of <__main__.A object at 0x10cf9f630>>
>>> A.__dict__['f_unchanged'] # bypass the protocol
<function f at 0x10cfb6510>
>>> A.__dict__['f_static'] # bypass the protocol
<staticmethod object at 0x10cf60f28>
>>> A.__dict__['f_static'].__get__(A()) # activate the protocol
<function f at 0x10cfb6510>
所以基本上我需要在一年中的所有日子都拥有所有的ID。但我上面的代码有问题:它在数据库中给了我一些奇怪的输出,如下图所示:
我做错了什么?
答案 0 :(得分:0)
如果您的ID字段应该标识数据行,最好将它在数据库中声明为整数列,而不是字符/字符串。
它也会更好&amp;不容易出错,不尝试从循环变量中计算它,而是使用正在运行的计数器
procedure TForm.populate_database;
var
i,j,m,n: Integer;
ID : Integer;
begin
ID := 0;
for i := 1 to 12 do
for j := 1 to febr29[i] do
for m := 1 to 9 do
for n := 1 to 15 do begin
Inc(ID);
database.tbl1.Append;
database.tbl1['date']:= inttostr(j)+'.'+inttostr(i)+'.2016';
database.tbl1['id'].AsInteger :=ID;
database.tbl1.Post;
当然,如果你必须拥有&#39; a&#39;前缀和字符coumn类型由于某种原因,你可以做
database.tbl1['id'].AsString :='a' + IntToStr(ID);
但即使这样也可能会给你一些你不期望的结果,除非将IntToStr(ID)的结果填充到带有前导零的固定长度。