Pobieranie danych z DBGrid

0

Witam mam pewien problem chce pobrac dane z grida i wstawic je do editów. Problem polega na tym że dane się pobierają i wstawiaja w edity jednak podswietlenie w dbgridzie zawsze zjezdza na koniec i nie moge wybrac i wstawić ostatniej pozycji z dbgrida:/ nie wiem czy dobrze sie wyraziłem. to kod programu

procedure TForm7.DBGrid1CellClick(Column: TColumn);
var id:string;
begin
id:=dbgrid1.Fields[0].asString;

form6.edit11.clear;
form6.edit12.Clear;
form6.combobox1.Clear;
form6.combobox2.Clear;
form6.combobox10.Clear;
form6.edit14.Clear;
form2.ibdysk.First;
while not form2.ibram.Eof do
begin
if form2.ibram.fieldvalues['id_ramu']=id then
begin
if form2.ibdysk.fieldvalues['id_dysku']<>''then form6.edit1.text:=form2.ibdysk.fieldvalues['id_dysku'];
if form2.ibram.fieldvalues['ilosc']<>''then form6.edit12.text:=form2.ibram.fieldvalues['ilosc'];
if form2.ibram.fieldvalues['rodzaj']<>''then form6.combobox1.Text:=form2.ibram.fieldvalues['rodzaj'];
if form2.ibram.fieldvalues['pojemnosc_pamieci']<>''then form6.combobox2.text:=form2.ibram.fieldvalues['pojemnosc_pamieci'];
if form2.ibram.fieldvalues['czestotliwosc_szyny']<>''then form6.combobox10.text:=form2.ibram.fieldvalues['czestotliwosc_szyny'];
if form2.ibram.fieldvalues['dodatkowe_informacje']<>''then form6.edit14.text:=form2.ibram.fieldvalues['dodatkowe_informacje'];

   end;

form2.ibram.Next;
end;
end;

0
form2.ibdysk.First;  //tu przechodzisz do pierwszego rekordu
while not form2.ibram.EOF do //tu masz pętle aż nie dojdziesz do ostatniego rekordu
begin
  // [...]
  form2.ibram.Next; //a tu przechodzisz do następnego rekordu
end;

ten kod tylko w jednym wypadku przepisze Ci do drugiej formy poprawne dane - kiedy będziesz miał zaznaczony ostatni rekord. Jak chcesz przepisać aktualnie wybrany rekord to pomiń te linie, które Ci powyżej podałem

BTW naucz się formatować kod, bo to co podałeś to jest sieczka, której się nie da przeczytać

procedure TForm7.DBGrid1CellClick(Column: TColumn);
var
  id: string;
begin
  id := dbgrid1.Fields[0].AsString;


  form6.edit11.Clear;
  form6.edit12.Clear;
  form6.combobox1.Clear;
  form6.combobox2.Clear;
  form6.combobox10.Clear;
  form6.edit14.Clear;
  form2.ibdysk.First;
  while not form2.ibram.EOF do
  begin
    if form2.ibram.fieldvalues['id_ramu'] = id then
    begin
      if form2.ibdysk.fieldvalues['id_dysku'] <> '' then
        form6.edit1.Text := form2.ibdysk.fieldvalues['id_dysku'];
      if form2.ibram.fieldvalues['ilosc'] <> '' then
        form6.edit12.Text := form2.ibram.fieldvalues['ilosc'];
      if form2.ibram.fieldvalues['rodzaj'] <> '' then
        form6.combobox1.Text := form2.ibram.fieldvalues['rodzaj'];
      if form2.ibram.fieldvalues['pojemnosc_pamieci'] <> '' then
        form6.combobox2.Text := form2.ibram.fieldvalues['pojemnosc_pamieci'];
      if form2.ibram.fieldvalues['czestotliwosc_szyny'] <> '' then
        form6.combobox10.Text := form2.ibram.fieldvalues['czestotliwosc_szyny'];
      if form2.ibram.fieldvalues['dodatkowe_informacje'] <> '' then
        form6.edit14.Text := form2.ibram.fieldvalues['dodatkowe_informacje'];

    end;
    form2.ibram.Next;
  end;
end;
0

Bardzo dziękuje za pomoc. Pomogło :) Mam jeszcze takie pytanie jak zrobić, żeby kolumny w gridzie dopasowały się do zawartości?

0

Kolego Misiekd mam pytanie.

Czy dobrze rozumiem, że zaznaczenie rekordu w gridzie powoduje zaznaczenie tego samego rekordu w tabeli, tak, że cała pętla until staje się niepotrzebna? (jestem twórcą tego nieszczęsnego kodu i szczerze mówiąc założyłem że zaznaczając uda mi się jedynie pobrać wartość, żeby później po przeszukaniu tabeli pętlą dopasować do niej rekord)

EDIT: Bilobil3 - można zmieniać szerokości kolumn w ich parametrach po wybraniu ich z listy Structure

EDIT2: misiekd - hm... to chyba niemożliwe, zeby działało bez pętli...? U mnie nie działą taka procedura jak poniżej:

procedure Tf_kontrahenci.grid_kontrahenciCellClick(Column: TColumn);
var id:string;
begin
id:=grid_kontrahenci.Fields[0].AsString;
e_id.clear;
e_imie.Clear;
e_nazwisko.Clear;
e_telefon.Clear;
e_ulica.Clear;
e_nr_domu.Clear;
e_nr_mieszkania.Clear;
e_kod_pocztowy.Clear;
e_miasto.Clear;
e_nip.Clear;
e_firma.Clear;
e_regon.Clear;
e_rabat.Clear;
t_kontrahenci.First;
//while not t_kontrahenci.Eof do
//  begin
//    if t_kontrahenci.fieldvalues['id_kontrahenta']=id then
      begin
        if t_kontrahenci.fieldvalues['id_kontrahenta']<>NULL then e_id.text:=t_kontrahenci.fieldvalues['id_kontrahenta'];
        if t_kontrahenci.fieldvalues['imie']<>NULL then e_imie.text:=t_kontrahenci.fieldvalues['imie'];
        if t_kontrahenci.fieldvalues['nazwisko']<>NULL then e_nazwisko.Text:=t_kontrahenci.fieldvalues['nazwisko'];
        if t_kontrahenci.fieldvalues['telefon']<>NULL then e_telefon.text:=t_kontrahenci.fieldvalues['telefon'];
        if t_kontrahenci.fieldvalues['ulica']<>NULL then e_ulica.Text:=t_kontrahenci.fieldvalues['ulica'];
        if t_kontrahenci.fieldvalues['nr_domu']<>NULL then e_nr_domu.Text:=t_kontrahenci.fieldvalues['nr_domu'];
        if t_kontrahenci.fieldvalues['nr_mieszkania']<>NULL then e_nr_mieszkania.Text:=t_kontrahenci.fieldvalues['nr_mieszkania'];
        if t_kontrahenci.fieldvalues['kod_pocztowy']<>NULL then e_kod_pocztowy.Text:=t_kontrahenci.fieldvalues['kod_pocztowy'];
        if t_kontrahenci.fieldvalues['miasto']<>NULL then e_miasto.Text:=t_kontrahenci.fieldvalues['miasto'];
        if t_kontrahenci.fieldvalues['nip']<>NULL then e_nip.text:=t_kontrahenci.fieldvalues['nip'];
        if t_kontrahenci.fieldvalues['nazwa_firmy']<>NULL then e_firma.Text:=t_kontrahenci.fieldvalues['nazwa_firmy'];
        if t_kontrahenci.fieldvalues['regon']<>NULL then e_regon.Text:=t_kontrahenci.fieldvalues['regon'];
        if t_kontrahenci.fieldvalues['rabat']<>NULL then e_rabat.Text:=t_kontrahenci.fieldvalues['rabat'];
       end;
//    t_kontrahenci.Next;
//  end;
end;

Daje to dość oczywisty efekt. Zczytanie po kliknieciu zawsze wartości pierwszego rekordu (t_kontrahenci.first).

FINAL EDIT: Boze, co za głupota, cała ta procedura powinna być znacznie prostsza i wyglądac tak:

procedure Tf_kontrahenci.grid_kontrahenciCellClick(Column: TColumn);
begin
e_id.text:=grid_kontrahenci.Fields[0].AsString;
e_imie.text:=grid_kontrahenci.Fields[1].AsString;
e_nazwisko.text:=grid_kontrahenci.Fields[2].AsString;
e_telefon.text:=grid_kontrahenci.Fields[3].AsString;
e_ulica.text:=grid_kontrahenci.Fields[4].AsString;
e_nr_domu.text:=grid_kontrahenci.Fields[5].AsString;
e_nr_mieszkania.text:=grid_kontrahenci.Fields[6].AsString;
e_kod_pocztowy.text:=grid_kontrahenci.Fields[7].AsString;
e_miasto.text:=grid_kontrahenci.Fields[8].AsString;
e_nip.text:=grid_kontrahenci.Fields[9].AsString;
e_firma.text:=grid_kontrahenci.Fields[10].AsString;
e_regon.text:=grid_kontrahenci.Fields[11].AsString;
e_rabat.text:=grid_kontrahenci.Fields[12].AsString;
end;
0

@JacekKw chyba sam sobie odpowiedziałeś na większość swoich pytań.
Co do DBGrida (i w ogóle kontrolek, które zaczynają się na DB) to on NIE PRZECHOWUJE żadnych danych. On je tylko wyświetla. Tak samo standardowe podświetlenie w DBGridzie (nie mówimy tu o zaznaczeniu z SHIFT czy CTRL) nie jest trzymane gdzieś osobno tylko jest brane jako aktywny rekord z DataSetu

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