CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TDBGrid "ręczne" wstawianie danych

TDBGrid "ręczne" wstawianie danych

dział ogólny

TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » czwartek, 5 maja 2011, 14:35

Czy do komponentu DBGrid1 idzie wstawić dane "ręcznie" tak jak do TListViev ?
KOD cpp:     UKRYJ  
for(int ii = 0; ii < 10; ii++)
{

        TListItem * ElementListy=ListView1->Items->Add();
        ElementListy->Caption = (String) jj;
        ElementListy->SubItems->Add("---");
        // itd...
}

Pozdrawiam
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Cyfrowy Baron » czwartek, 5 maja 2011, 15:47

Darek_C++ napisał(a):Czy do komponentu DBGrid1 idzie wstawić dane "ręcznie" tak jak do TListViev ?


Jeżeli już to prędzej tak jak do StringGrid, ale tak czy owak nie jest to możliwe. DBGrid to tabela bazodanowa i musi być wypełniana przez bazę danych, ręcznie nie da się tego zrobić. Musisz posłużyć się raczej TStringGrid, ale ta tabela nie współpracuje, z żadną bazą danych.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Corvis » czwartek, 5 maja 2011, 21:35

Na upartego da się to zrobić wykorzystując TClientDataSeta i DataSourca. Wtedy dodajesz dane do TClientDataSeta a dane dodają się do TDBGrida. To tak w skrócie tłumaczone. Pytanie za 100 pkt. Po co to robić :P jak jest TStringGrid jak napisał baron.
"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 VistaChrome

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Cyfrowy Baron » piątek, 6 maja 2011, 09:18

Corvis napisał(a):Na upartego da się to zrobić wykorzystując TClientDataSeta i DataSourca. Wtedy dodajesz dane do TClientDataSeta a dane dodają się do TDBGrida.


No Tak, ale w ten sposób dodajesz dane do tabeli poprzez komponenty bazodanowe, a nie bezpośrednio "ręcznie", jak to ujął Darek_c++.

Na pytanie zadane przez Darek_c++, odpowiedź brzmi NIE! Gdyby jednak było wiadomo o co dokładnie chodzi, to być może wtedy dałoby się znaleźć jakieś rozwiązanie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » piątek, 6 maja 2011, 10:00

O konkretne zastosowanie nie chodziło. Chciałem się dowiedzieć czy "jest taka możliwość".
Pozdrawiam
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » czwartek, 20 grudnia 2012, 09:40

Chciał bym odświeżyć zagadnienie tyczce DBGrid1, więc mam w związku z tym kilka pytań :)
Jest :
DBGrid1 który ma ustawione DataSource na DataSource1
DataSource1 który ma ustawione DataSet na ClientDataSet1
I ClientDataSet1

Przykładowe dane do DBGrid1 wstawiam następująco:

KOD cpp:     UKRYJ  
private:        // User declarations
   int iNr;
//-------------------------------------------------------------------
void __fastcall TForm4::FormCreate(TObject *Sender)
{
        ClientDataSet1->Active = false;
        ClientDataSet1->CreateDataSet();
        DBGrid1->Columns->Items[0]->Width = 50;
        DBGrid1->Columns->Items[1]->Width = 100;
        DBGrid1->Columns->Items[2]->Width = 100;
}

//---------------------------------------------------------------------------
void __fastcall TForm4::Button2Click(TObject *Sender)
{
       // wstawianie
        for(int jj = 0; jj <= 10; jj++)
        {
                ClientDataSet1->Insert();
                ClientDataSet1->FieldByName("ID")->Value = iNr;
                ClientDataSet1->FieldByName("LOGIN")->Value = "TEST "+(String)jj;
                ClientDataSet1->FieldByName("HASŁO")->Value = Time().TimeString();
                ClientDataSet1->FieldByName("STATUS")->Value = Time().TimeString();
                ClientDataSet1->Post();
                if((jj % 1000)==0) Application->ProcessMessages();
                iNr++;
        }
}
 

i DBGrid1 wypełnia się danymi. Kwestia jest taka, że jak kliknę na jakąś linię danych ustawi się tam > i jeśli kliknę ponownie na Button2 kolejne dane wstawiane są od tego miejsca, a mają się wstawiać "od góry" czyli jako kolejne... . Jak to zmienić ?
Następne pytania po opanowaniu tego :) Obrazek
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Mironas » czwartek, 20 grudnia 2012, 10:24

ClientDataSet1->First();
a dopiero potem
ClientDataSet1->Insert();

Za ten post autor Mironas otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Corvis » czwartek, 20 grudnia 2012, 10:25

ClientDataSet1->First(); Dodaj przed wstawieniem
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House

Za ten post autor Corvis otrzymał podziękowanie od:
Darek_C++
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: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » czwartek, 20 grudnia 2012, 10:42

OK, to jeszcze mam kolejen dwa pytania:
KOD cpp:     UKRYJ  
void __fastcall TForm4::DBGrid1DblClick(TObject *Sender)
{
        // Jak pobrać dane z klikniętej linii danych ?
      // Analogicznie do  TListViev :  int nrNaLiscieT = ListVievAdresy->Selected->Index;
     // ListVievAdresy->Items->Item[nrNaLiscie]->Caption;
        Memo2->Lines->Add( ID +" : "+ LOGIN +" : "+ HASŁO +" : "+ STATUS  );
}

void __fastcall TForm4::Button9Click(TObject *Sender)
{
        // Oraz jak programowo zmienić dane w wybranej linni w DBGrid1 analogicznie do TListViev :
     // ListView1->Items->Item[this->nrNaListViev]->SubItems->Strings[2] = "Start..."; 
     // Jak zmienić dane w wybranej po numerze linii danych w ich komórkach DBGrid1
}
 
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Corvis » czwartek, 20 grudnia 2012, 10:51

1. ClientDataSet->FiledByName("NazwaPola")->AsString;
2. http://edn.embarcadero.com/article/29122
"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: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Mironas » czwartek, 20 grudnia 2012, 11:01

Jak pobrać dane z klikniętej linii danych ?

np.:
KOD cpp:     UKRYJ  
String s = ClientDataSet1->FieldByName("LOGIN")->AsString;


jak programowo zmienić dane w wybranej linni

Wybrać właściwy rekord (wiersz) w tabeli danych - w Twoim przypadku jest to ClientDataSet1 (nie mylić z DBGridem) a potem zapisać do wybranego pola:
KOD cpp:     UKRYJ  
TLocateOptions lo;
ClientDataSet1->Locate("ID", 12, lo);  // wybor wiersza
ClientDataSet1->FieldByName("LOGIN")->AsString = "Jacek";
ClientDataSet1->FieldByName("HASLO")->AsString = "Placek";
 

Mam wrażenie, że mylisz podstawowe pojęcia. W bazach danych informacje zapisujesz do tabeli bazy danych a nie do DBGrid-a. DBGrid jest tylko komponentem który pokazuje co znajduje się w tabeli. Więc wszystkie operacje wykonuje się na tabeli (tutaj ClientDataSet1) a nie na DBGrid-zie.

Za ten post autor Mironas otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » czwartek, 20 grudnia 2012, 11:04

Chodzi mi o wizualne przedstawienia danych w tym komponencie czyli taki zmienik dla TListView :)
Źródło danych nie jest istotne, bo może być dowolne XML, plik tekstowy odpowiednio formatowany itd....


Pobranie danych po dubleclick w wybraną linię danych rozwiązałem:
KOD cpp:     UKRYJ  
void __fastcall TForm4::DBGrid1DblClick(TObject *Sender)
{
        Memo2->Lines->Add( DBGrid1->Fields[0]->AsString +":"+ DBGrid1->Fields[1]->AsString +":"+ DBGrid1->Fields[2]->AsString);
//6:TEST 6:10:03:15
// 5:TEST 5:10:03:15
// 4:TEST 4:10:03:15
// itd ...
}
Ale nadal
Kod: Zaznacz cały
pozostaje kwestia
:
- dostania się do danych "programowo" czyli po numerze kolejnym na lini dannych w DBGrid1 - analogia do:
int nrNaLiscieT = ListVievAdresy->Selected->Index;
String jakiedane = ListVievAdresy->Items->Item[nrNaLiscie]->Caption;

No i programowej zmiany danych dla danego "rekordu".

Jak to realizować ?

=========
KOD cpp:     UKRYJ  
void __fastcall TForm4::Button9Click(TObject *Sender)
{
        // Jak zmienic dane w wybranej po numerze linni danych w ich komórkach

        TLocateOptions lo;
        ClientDataSet1->Locate("ID", 5, lo);  // wybor wiersza
        ClientDataSet1->FieldByName("LOGIN")->AsString = "Jacek";
        ClientDataSet1->FieldByName("HASLO")->AsString = "Placek";
}
Generuje wyjątek:

Exception class EDatabaseError with message 'ClientDataSet1: Dataset not in edit or insert mode'.

Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Corvis » czwartek, 20 grudnia 2012, 11:14

Widziałeś tego linka ??

http://edn.embarcadero.com/article/29122

Twój ClientDataSet nie jest w trybie edycji danych.
"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: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Darek_C++ » czwartek, 20 grudnia 2012, 11:20

Corvis napisał(a):Widziałeś tego linka ??
http://edn.embarcadero.com/article/29122
Twój ClientDataSet nie jest w trybie edycji danych.
Tak widziałem i już z niego nauczyłem się dwóch nowy funkcji, ale jeszcze nie ustawić na tryb edycji :(

Ten zestaw komponentów dopiero poznaje, więc poproszę o małą wyrozumiałość, bo z tego co widzę nie jednak analogii do TlistViev.
///
Chodzi mi o to czy mogę je wykorzystać do wizualizacji danych z możliwościami podobnie jak TlistViev stąd moje pytania.
Możliwie, że jednak nie i bardziej do tego nadaje się TtringGrid który od samego początku jakoś nie przypadł mi do gustu ;)
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

Re: TDBGrid "ręczne" wstawianie danych

Nowy postprzez Mironas » czwartek, 20 grudnia 2012, 11:25

Darek_C++ napisał(a):Generuje wyjątek:

Exception class EDatabaseError with message 'ClientDataSet1: Dataset not in edit or insert mode'.


Mój błąd (pisałem z palca) powinno być:
KOD cpp:     UKRYJ  
TLocateOptions lo;
ClientDataSet1->Locate("ID", 5, lo);  // wybor wiersza
ClientDataSet1->Edit();  // włączenie trybu edycji
ClientDataSet1->FieldByName("LOGIN")->AsString = "Jacek";
ClientDataSet1->FieldByName("HASLO")->AsString = "Placek";
ClientDataSet1->Post();  // zatwierdzenie zmian
 


Sugeruję abyś poczytał o bazach danych (link podany przez Corvisa lub jakiś inny tutorial/kurs). Forum to nie kompletny kurs, a tylko miejsce gdzie można zadać pytanie jeśli nie radzisz sobie z konkretnym problemem.

Za ten post autor Mironas otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

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