Dziwna sytuacja z dbGridem - zmieniające się DataSety

0

Witam,
mam problem bazodanowy w delphi, jako że dopiero odkrywam tajniki baz danych ( i delphi) to już napotkałem problem.
Mianowicie mam na formie DBgrida, ktory sluzy mi jako proste wyswietlanie rekordow, ktore zwraca mi zapytanie np. SELECT.
Mam np. pobraną listę pracownikow i jest 30 rekordow w dbgridzie - teraz zrobilem tak ze jak klikne dwa razy na rekord to pojawia mi sie forma z danymi pelnymi pracownika ( tutaj osobny SELECT po id pracownika) - i mam te dane w kontrolach Tedit - jednak tabela spod formy otwartej - owy DBGrid z lista pracownikow - czysci sie i zawiera potem tylko jeden rekord z wybranym pracownikiem - jak wylacze dane pelne pracownika to mam grida z jednym wierszem - nie sadze zeby pobieranie ponowne wszystkim pracownikow bylo sensowne.

W zwiazku tym mam dwa pytania:

  1. Jak pobierac poprawnie id wybranego wiersza w dbgridzie - czy tak moze byc? -> Grid.DataSource.DataSet.RecNo
  2. Co zrobić zeby dbgrid nie przyjmowal podzapytan tylko trzymal jedno - w tym wypadku liste pracownikow wszystkich.

Dodam ze uzywam FireDAC, a takze dodam iz mam tylko jeden obiekt na formie typu FDConnection oraz FDQuery, dodatkowo jedno DataSource i jeden DBGrid.

pozdrawiam

0

Dodaj na formę jeszcze jeden komponent FDQuery i w nim wstaw zapytanie sql-owe lub editom przypisz wartość w ten sposób

 edit.text:=dbgrid.fields[1].asString
0

a nie jest czasem tak że masz ten sam 'dataset' do przechowania wyniku obu zapytań, ???

ad. 1

id:= dataset.fieldbyname('id').asinteger 

ad,. 2
DBgrid nie przechowuje żadnych danych , służy jedynie do wizualizacji danych z dataset'a

0

dzieki za informacje, pozdrawiam

0

Ponownie ja :)

Mam powiedzmy taka sytuacje w stylu -> mam pracownikow pobranych selectem z bazy i rekordy przypisane do dbgrida.
Teraz jak wybieram pracownika to otwiera mi sie formatka z jego danymi personalnymi - na tej formatce jest powiedzmy 10 dbgridow dotyczacych tego pracownika -np. tabelka z jego rzeczami (pobrane po id pracownika z podtabeli), tabelka z jego dniami roboczymi (pobrane po id pracownika z podtabeli) itd itp.

Pytania:

  1. czy musze tworzyc 10 Tquery i 10 datasetow aby podpinac je pod dbgridy tak zeby wszystkie dane byly wyswietlane poprawnie w tabelach? jak to sie robi 'profesjonalnie'
  2. czy mozna pod dbgrida podpiac swoje dane np z rekordow - wtedy bym nie musial tworzyc tylu kwerend i datasetow?

pozdrawiam

0

Musisz mieć tyle datasetów ile różnych zestawów danych równocześnie chcesz zwizualizować.
Gridów może być mniej , ponieważ w zależności od sytuacji, można grida (lub Datasource) dynamicznie wiązać z żądanym datasetem, a w skrajnym przypadku wystarczył by jeden.
Najprostszym programowo rozwiązaniem to do każdego dataseta oddzielny grid .

A jeśli chodzi o podany przez Ciebie przykład, to najlepszym rozwiązaniem było by powiązanie typu master->detail , wtedy przesuwając kursor w tabeli pracowników , automatycznie aktualizaują
się datasety zawierzające szczegółowe informacje o pracowniku

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