[delphi] + [sql] jak wpisac do tablicy dane z bazy?

0

Mam uno pikolo problemo.
W bazie jest tabelka z polami

ID,KG,METERS

teraz musze wykonac zapytanie SQL ktore wybierze mi te dane
i zapamieta je gdzies np najlepiej w tablicy. Jaka to musi byc tablica
czy moze byc na przyklad:
id[],kg[], meters[]
i wtedy w petli wrzucam
for i:=0 to [ilosc_z_bazy] do begin
id[a] := dana z bazy id
kg[a] := dana z bazy kg
meters[a] := dana z bazy meters
end;

i po wyczytaniu tych danych tabelke nalezy updateowac
for i:=0 to [ilosc z bazy] do begin
update tabelka set kg='kg[a]' , meters ='meters[a]' where id = id[a];
end

jak wyczyscic pozniej takie tablice?
I jak wybrac kolejne pozycje z bazy?

zeby wybrac z bazy dane uzywam
Form1.PublicQueryDataSource.DataSet.FieldByName('kg').AsInteger;
ale nie wiem jak kontorlowac kolejne wybrane rzeczy zeby w petli zrobic
to poabieranie z bazy do tablic

0
type
  Tdane = record
    id: Integer;
    kg: Integer;
    m: Integer;
  end;
  TArr = array of Tdane;

var
  Arr: TArr;
  i: Integer;

begin
  with Form1.PublicQueryDataSource.DataSet do
  begin
    Open;
    First;
    SetLength(Arr, 0);
    i := 0;
    while not Eof do
    begin
      SetLength(Arr, i + 1);
      Arr[i].id := FieldByName('id').AsInteger;
      Arr[i].kg := FieldByName('kg').AsInteger;
      Arr[i].m := FieldByName('meters').AsInteger;
      Next;
    end;
  end;
end;

wyczyszczenie Arr := nil lub SetLength(Arr, 0);

0

to jest mistrzostwo swiata. Skad wy tak wszystko wiecie :]
ciesze sie ze mialem chociaz dobre myslenie jesli chodzi o zasade
ale nie wpadlbym ze to moze byc tak zrobione:

TArr = array of Tdane; to dzieki temu jest mozliwosc stosowania lacznika kropki tak? i on sam juz wie jaki typ danych mi chodzi, czyli taki rodzaj klasy?

0

Poczytaj o tablicach rekordów.

0

wykonalem ten kod

      begin
      SetLength(Arr, i + 1);
      Arr[i].id := FieldByName('id').AsInteger;
      Arr[i].kg := FieldByName('kg').AsInteger;
      Arr[i].m := FieldByName('meters').AsInteger;
      Next;
    end;

Ale wartos 'i' caly czas jest = 0

chcialem przerobic na:

     begin
      Inc(i)
      SetLength(Arr, i);
      Arr[i].id := FieldByName('id').AsInteger;
      Arr[i].kg := FieldByName('kg').AsInteger;
      Arr[i].m := FieldByName('meters').AsInteger;
      Next;
    end;

wtedy mam access violation :/
nie wiem co tu zaradzic

Ostatecznie zrobilem tak:

begin
      Inc(i);
      SetLength(Arr, i );    //+ 1
      Arr[i-1].id := FieldByName('id').AsInteger;
      Arr[i-1].kg := FieldByName('kg').AsInteger;
      Form1.Caption := Form1.Caption + IntToSTr(i) +'-';
      Next;
    end;

Zapomnialem ze tablice liczone sa od zera

0

a fakt - wyleciało mi. Powinno być tak

    begin
      SetLength(Arr, i);
      Arr[i].id := FieldByName('id').AsInteger;
      Arr[i].kg := FieldByName('kg').AsInteger;
      Arr[i].m := FieldByName('meters').AsInteger;
      Next;
      Inc(i)
    end;

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