CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Dodawanie kolumn do DBGrid w locie

Dodawanie kolumn do DBGrid w locie

Problemy związane z tworzeniem i zarządzaniem programami bazo-danowymi.
Regulamin działu


Zadając pytania dotyczące baz danych należy podawać szczegółowe informacje o bazie danych nad którą się pracuje, czyli:

  • Rodzaj serwera bazodanowego: MySql, MSSQL, Oracle itp.
  • Wersja bazy danych
  • Technologia bazodanowa używana w programie: ADO, DbExpress, InterBase
  • Komponenty użyte do zestawienia połączenia: ADOConnection, SqlConnection
  • Sposób zestawienia komponentów bazodanowych np. DataSet - DataSource - DbGrid lub DataSet - DataSetProvider - ClientDataSet - DataSource - DbGrid
  • Jeżeli używane były biblioteki innych firm niż Borland, CodeGeer i Embarcadero proszę podać ich nazwy, numer wersji i adres źródła.

Dodawanie kolumn do DBGrid w locie

Nowy postprzez g00se » środa, 14 sierpnia 2013, 13:15

Witam,

Problem jest chyba dość błahy. Otóż poprzez procedurę składowaną pobieram dane z bazy i wyświetlam wynik w DBGridzie. Działa. Natomiast w trakcie działania programu muszę dodać dynamicznie kolumny do tego DBGrida ale nie bardzo wiem jak. Do dodania nowego pola TField używam składni:

KOD cpp:     UKRYJ  
TFloatField *field = new TFloatField(JvDBGrid1->Owner);
field->Name = NewFieldName;

JvDBGrid1->DataSource->DataSet->Fields->Add(field)


Parametr FieldList->Count komponentu JvDBGrid1 faktycznie się zwiększa po dodaniu, ale nie widać tych zmian na formatce. I to jest problem na etapie dodania nowej kolumny do DBGrida. Nie chcę na tym etapie zapisywać danych do bazy ale wyłącznie przedstawić je na interfejse.

Jeśli dodam kolumnę poprzez JvDBGrid1->Columns->Add() to kolumna się dodaje, ale dane pobrane z bazy znikają...

Jak poprawnie zabrać się za taką operację?
Avatar użytkownika
g00se
Bladawiec
Bladawiec
 
Posty: 12
Dołączył(a): poniedziałek, 7 stycznia 2013, 09:41
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: - Windows XP SP3
Kompilator: - Visual Studio 2008
- Rad Studio XE2
Gadu Gadu: 0
    Windows 7Chrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Mironas » środa, 14 sierpnia 2013, 13:25

Może wystarczy przeładować tabelę (zamknąć i ponownie otworzyć) po JvDBGrid1->Columns->Add()
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 449
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez g00se » środa, 14 sierpnia 2013, 13:29

Niestety, kolumny się dodają ale wynik z procedury znika...
Avatar użytkownika
g00se
Bladawiec
Bladawiec
 
Posty: 12
Dołączył(a): poniedziałek, 7 stycznia 2013, 09:41
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: - Windows XP SP3
Kompilator: - Visual Studio 2008
- Rad Studio XE2
Gadu Gadu: 0
    Windows 7Chrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Mironas » środa, 14 sierpnia 2013, 14:00

Jak rozumiem w DataSet masz już tą kolumnę, tylko chcesz ją pokazać w DBGrid.
Zakładając, że pole bazy danych nazywa się "LICZBA" zrób to tak:
KOD cpp:     UKRYJ  
void __fastcall TForm1::btnDodajKolumneClick(TObject *Sender)
{
  TColumn* kolumna = DBGrid1->Columns->Add();
  kolumna->FieldName = "LICZBA";
  btnDodajKolumne->Enabled = false;
}
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 449
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez g00se » środa, 14 sierpnia 2013, 15:06

Sprawdzę jutro te rozwiązanie ale poradziłem sobie w inny sposób :) Mam jeszcze pytanie odnośnie edytowania danych w DBGridzie (i pochodnych). Dlaczego, gdy pobiorę dane przez procedurę skladowaną, nie mogę zmieniać danych w gridzie? jak go skonfigurować aby dało się edytować wartości? Trzeba najpierw wszystkie pobrane pola (TFields) ustawiać na konkretny typ? Np. TFloatField? Brak mi pomysłów... Korzystam też z komponentów TADODataSet -> TDataSource -> DBGrid/JvDBGrid
Avatar użytkownika
g00se
Bladawiec
Bladawiec
 
Posty: 12
Dołączył(a): poniedziałek, 7 stycznia 2013, 09:41
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: - Windows XP SP3
Kompilator: - Visual Studio 2008
- Rad Studio XE2
Gadu Gadu: 0
    Windows 7Chrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Corvis » środa, 14 sierpnia 2013, 15:29

Po 1 - włączyć możliwość edycji w TDBGrid :) w opcjach masz goEdit albo goEdditing, z głowy nie pamiętam
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Mironas » środa, 14 sierpnia 2013, 15:39

g00se napisał(a):Dlaczego, gdy pobiorę dane przez procedurę skladowaną, nie mogę zmieniać danych w gridzie?

Nie sprawdzałem, ale chyba nie da się edytować w DBGrid danych pobranych przez procedurę składowaną. Procedura wykonuje się po stronie serwera i od strony klienta można ją co najwyżej wywołać. Edycja danych w DBGrid generuje dużą transmisję klient-serwer, a procedury składowane są po to aby ograniczać taką transmisję.
Jednak jak pisałem nie bawiłem się tym więc nie mam pewności.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 449
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez g00se » środa, 14 sierpnia 2013, 15:54

Tak, wiem. Chodzi o to aby dane wyświetlić, zrobić locka na pobrane dane i edytować dataset bez informacji zwrotnej. Informacja zwrotna pójdzie po zatwierdzeniu inna procedura.
Avatar użytkownika
g00se
Bladawiec
Bladawiec
 
Posty: 12
Dołączył(a): poniedziałek, 7 stycznia 2013, 09:41
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: - Windows XP SP3
Kompilator: - Visual Studio 2008
- Rad Studio XE2
Gadu Gadu: 0
    MacintoshSafari

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Corvis » czwartek, 15 sierpnia 2013, 11:12

Poco sobie tak życie utrudniać ? :) Czy edytowanie danych z poziomu TDBGrid-a jest naprawdę takie fajne ?? ( chyba, że takie są twarde wymagania ) Mi to się nie podoba - mało czytelny sposób. Osobiście wizualizuję tylko dane w TDBGrid-zie, całe zarządzanie mam po kliknięciu w odpowiedni rekord i otwarciu formularza do zarządzania danymi. Wtedy mam nad wszystkim pełną kontrolę.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez g00se » piątek, 16 sierpnia 2013, 06:34

Teoretycznie masz racje. Ale w tym wypadku łatwiej oraz czytelniej będzie edytować dane w DBGridzie. Macie jakieś rozwiazanie? Do głowy przychodzi mi jedynie napisanie metody ToArray() i zasilenie StringGrida... Ale nie wiem czy to będzie taki optymalne...
Avatar użytkownika
g00se
Bladawiec
Bladawiec
 
Posty: 12
Dołączył(a): poniedziałek, 7 stycznia 2013, 09:41
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: - Windows XP SP3
Kompilator: - Visual Studio 2008
- Rad Studio XE2
Gadu Gadu: 0
    MacintoshSafari

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Mironas » piątek, 16 sierpnia 2013, 10:31

Albo samodzielnie przepisuj dane do StringGrid-a i tam je edytuj. Masz wtedy pełną kontrolę nad tym co dzieje Ci się w tabelce.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 449
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Dodawanie kolumn do DBGrid w locie

Nowy postprzez Corvis » niedziela, 18 sierpnia 2013, 13:26

Też jest pomysł.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Bazy danych

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron