Tworzenie programowo tabeli

0

Witam.
Tworze programowo table za pomocą kodu:

var
    tTab:TTable;
begin
  tTab:=TTable.Create(nil);
  tTab.DatabaseName:='bleble';
  tTab.TableType:=ttDBase;
  tTab.TableLevel:=4;
  tTab.TableName:=fName+'.dbf';
  tTab.FieldDefs.Clear;

  
  tTab.FieldDefs.Add('Nazwa1',ftInteger,0,False);
  tTab.FieldDefs.Add('Nazwa2',ftInteger,0,False);

  tTab.CreateTable;
end;

Tworzy się tabela, wszystkie pola, z tym, że pola Integer mają długość 4.
Podanie "Size" przy ftInteger kończy się błędem.
Jak wymusić większą długość dla pól typu Integer?????

0

Przecież integer normalnie zajmuje 4 bajty, więc o co chodzi? Jak chcesz coś więcej, to weź inny typ.

0

nie znam tego komponentu, ale masz większe typy danych jak longint, cardinal(tylko naturalne liczby), comp(zmienno przecinkowe)

0

Pole w bazie ma długość 4, a z helpa wynika ftInteger = 32-bit integer field wiec chyba powinno to pozwolić na zapisanie troche większej liczby niz 9999

0

Typ zmiennej Rozmiar w bajtach Zakres
ShortInt 1 Liczby całkowite [-128, 127].
Byte 1 Liczby całkowite [0, 255].
Char 1 Znaki pojedyncze + liczby z zakresu [0, 255].
WideChar 2 Znaki pojedyncze + liczby [0, 65535].
SmallInt 2 Liczby całkowite od [-32768, 32767].
Word 2 Liczby całkowite [0, 65535].
LongInt 4 Liczby całkowite [-2 147 483 648, 2 147 483 647].
Int64 8 Liczby całkowite [-9 223 372 036 854 775 808, 9 223 372 036 854 775 807].
Integer 4 Taki sam jak LongInt...
Cardinal 4 Liczby całkowite [0, 4 294 967 295].
LongWord 4 Taki sam jak Cardinal...
Single 4 Liczby rzeczywiste [1,5x10-45, 3,4x1038].
Double 8 Liczby rzeczywiste [5,0x10-324, 1,7x10308].
Real 8 Taki sam jak Double.
Real148 6 Liczby rzeczywiste [2,9x10-39, 1,7x1038].
Extended 10 Liczby rzeczywiste [3,4x10-4932, 1,1x104932].
Comp 8 Liczby rzeczywiste [-9 223 372 036 854 775 808, 9 233 372 036 854 775 807].
Currency 8 Liczby rzeczywiste [-922 337 203 685 477 5808, 922 337 203 685 477 5807] - zmiennej tego typu używa się podczas operacji na walutach.
Boolean 1 True albo False (prawda lub fałsz).
String ??? Ciąg znaków.
ShortString ??? Ciąg znaków - maksimum 255.
Variant 16 Zmienny

0

4 bajty nie 4 znaki.. bajty!

0

ftInteger = 32 bit = 4 byte = LongInt=Integer = Liczby całkowite [-2 147 483 648, 2 147 483 647] a ja mogę wpisać liczbę 9999

0

Przecież nie zapisuje do bazy binarnie.

robie tTab.FieldByName('Nazwa1').asInteger:=10000 i zonk.

Otwieram dbf np dbfViwer i definicji tabeli ma pola Integer długość 4

0
toshhi napisał(a)

robie tTab.FieldByName('Nazwa1').asInteger:=10000 i zonk.

a jaki błąd?

0

asInteger to wymysł programisty który pisał komponent. Do pliku pewnie nie zaglądałeś.
Jakby nie patrzeć to smallint nawet ma większy zakres.

Ostatnio gdy musiałem mieścić się z integer w takim zakresie używałem Pascala 3 :)

Dal linka do plików z definicją TTable, oraz napisz jaki błąd wyskakuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1