Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)

[es] :: Pascal / Delphi / Kylix :: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)

[ Pregleda: 417 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 562



+10 Profil

icon Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)03.07.2025. u 18:12 - pre 7 dana i 18h
Na formu sam stavio ClientDataSet, DataSource i DBGrid komponente, i popunio odgovarajuće propertyje. Na formi sam prilkom dizajniranja imao vidljiv DBGrid, koji sam nekako (ne sećam se tačno kako) disableovao.

Ideja mi je bila da se prilikom pokretanja aplikacije i ne pojavljuje DBGrid, već onda kada korisnik klikne na "New" ili na "Open". Uspešno sam rešio to design-time, ali mi sada run-time ne radi. Mora da sam negde nešto pogrešio prilikom dizajniranja forme.

Evo nekoliko kritičnih linija.

Code:

procedure TMainForm.FileNewClick(Sender: TObject);
var
  s: String;
begin
  s := ParamStr(0);
  s := ExtractFilePath(s);
  s := s + 'New.cds';
  cds.FileName := s;
  cds.Insert;
  cds.Fields[0].AsInteger := 10;
  cds.Fields[1].AsString := 'abcd';
  cds.Fields[2].AsInteger := 12;
  cds.Fields[3].AsFloat := 12.12;
  cds.Fields[4].AsFloat := 122.24;
  cds.Active := true;
end;

procedure TMainForm.FileOpenClick(Sender: TObject);
var
  s: String;
begin
  s := ParamStr(0);
  s := ExtractFilePath(s);
  OpenDialog1.InitialDir := s;
  if OpenDialog1.Execute then
    cds.LoadFromFile(OpenDialog1.FileName);
  cds.Active;
end;


BTW, program upisuje u bazu (vidim da baza raste), ali nikako da se vidi DBGrid.
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 562



+10 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)04.07.2025. u 17:10 - pre 6 dana i 19h
Novi i mnogo važniji problem: nikako ne mogu da izmenim podatak u postojećoj bazi. Evo koda:

Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  cds.Open; { cds je TClientDataSet }
  cds.First;
  while not cds.Eof do
    begin
      cds.Fields[1].AsString := 'upis u bazu'; { * }
      cds.Next;
    end;
  cds.Close;
end;


Pukne kod reda sa zvezdicom, uz run-time poruku "cds: Dataset not in edit or inser mode".

Nešto je siiitno, ali ja na ovu vrućinu ne shvatam šta...

A pokušavao sam na mnooogo načina da otvorim bazu, ali -- jok, uvek pukne kod upisa. S druge strane, čitanje radi savršeno.
 
Odgovor na temu

iculibrk
Bačka Palanka
21400

Član broj: 321321
Poruke: 875



+162 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)04.07.2025. u 17:45 - pre 6 dana i 18h
Možda pre
Code:
cds.Fields[1].AsString := 'upis u bazu'; { * }
staviti
Code:
cds.Edit
a posle
Code:
cds.Post


Za problem iz prvog posta možda ovako:
Code:
procedure TMainForm.FileNewClick(Sender: TObject);
var
  s: String;
begin
  s := ParamStr(0);
  s := ExtractFilePath(s);
  s := s + 'New.cds';
  cds.FileName := s;
  cds.Insert;
  cds.Fields[0].AsInteger := 10;
  cds.Fields[1].AsString := 'abcd';
  cds.Fields[2].AsInteger := 12;
  cds.Fields[3].AsFloat := 12.12;
  cds.Fields[4].AsFloat := 122.24;
  cds.Active := True;

  DBGrid1.Visible := True;
end;

procedure TMainForm.FileOpenClick(Sender: TObject);
var
  s: String;
begin
  s := ParamStr(0);
  s := ExtractFilePath(s);
  OpenDialog1.InitialDir := s;
  if OpenDialog1.Execute then
  begin
    cds.LoadFromFile(OpenDialog1.FileName);
    cds.Active := True;
    DBGrid1.Visible := True;
  end;
end;


Po meni nedostaje
Code:
DBGrid1.Visible := True;


[Ovu poruku je menjao iculibrk dana 04.07.2025. u 19:10 GMT+1]
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 562



+10 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)04.07.2025. u 21:29 - pre 6 dana i 15h
Bio si u pravu oko oba Mnogo hvala

Izgubio sam sate i sate pokušavajući sam da izguglam rešenje... a pretpostavljao sam da je tako "jevtino"
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 562



+10 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)05.07.2025. u 16:37 - pre 5 dana i 19h
Ako može još malo pomoći...

Potreban mi je neki event na koji bih mogao da se "zakačim" kada god se napusti polje (ćelija). Tada treba da mi se ažurira poslednje polje.

Probao sam ovako:

Code:

procedure TMainForm.DBGrid1KeyPress(Sender: TObject; var Key: Char);
var
  updated: Extended;
begin
  if (Key = #13) or (Key = #38) or (Key = #40) then
    begin
      // neka kalkulacija čiji je rezultat updated
      cds.Edit;
      cds.Fields[4].AsFloat := updated;
      cds.Post;
    end;
end;


(#38 i #40 su kodovi za strelice gore i dole)

Međutim, ovaj event ne hvata strelice (Ne hvata ni klik mišem, ali se to valjda može srediti.)
 
Odgovor na temu

iculibrk
Bačka Palanka
21400

Član broj: 321321
Poruke: 875



+162 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)05.07.2025. u 17:06 - pre 5 dana i 19h
Umesto OnKeyPress koristi OnColExit
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 562



+10 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)06.07.2025. u 12:18 - pre 5 dana
Uh, izgleda da nije to

Naime, kada editujem polje, i pri tome pritisnem strelicu gore ili strelicu dole, ostajem u okviru iste kolone, pa se OnColExit i ne dogodi.

A kada koristim OnKeyPress, ne mogu da uhvatim strelice.

S treće strane, ne vidim da postoji OnCellExit ili nešto slično.
 
Odgovor na temu

trimrd
Software developer

Član broj: 346213
Poruke: 7
*.static.a1.hr.



Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)08.07.2025. u 14:56 - pre 2 dana i 21h
Probaj mu zadati i u kojoj si koloni:

Code:
  if Ord(Key) = 13 then
  begin
    case DBGrid1.SelectedIndex of
      0:
        begin
          DBGrid1.SelectedIndex := DBGrid1.SelectedIndex;


Debuguj prvo da li ti uopšte uleti unutra pa onda dalje.
 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 253
91.232.237.*



+1 Profil

icon Re: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)09.07.2025. u 09:51 - pre 2 dana i 2h
Mozes i na TDataSource da koristis OnDataChange. Ako ti je Assigned(Field) onda si se pomerio s jednog polja na drugo na istom record-u (po tabeli levo/desno) a ako je Field nil onda si skocio na drugi record. "Field" je parametar u OnDataChange.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Problem sa jednostavnom bazom (ClientDataset, DataSource i DBGrid)

[ Pregleda: 417 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.