填充数据库会产生奇怪的结果

时间:2016-12-17 10:31:19

标签: database delphi

我有一个数据库,我需要在每一行填充它的前两列。第一列是日期,第二列是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。但我上面的代码有问题:它在数据库中给了我一些奇怪的输出,如下图所示:

descriptor protocol

我做错了什么?

1 个答案:

答案 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)的结果填充到带有前导零的固定长度。