DBGrid - problem z wyświetleniem danych

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.

DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » środa, 30 marca 2011, 13:12

Tym razem problemik wyświetlania mnie unieruchomił.

KOD cpp:     UKRYJ  
void __fastcall TOkno_glowne::BitBtn20Click(TObject *Sender) //Filtr na zleceniach po rok / numer
{
ObZ_TZlecenia_Zapytanie_Select("SELECT idTZlecenia, CONCAT(Nr_zlecenia, '/', Rok_zlecenia) AS Numer_zlecenia, Data_przewidywany_odbior FROM tzlecenia WHERE rok_zlecenia LIKE '%" + Edit53->Text + "%' AND nr_zlecenia LIKE '%" + Edit55->Text + "%' ORDER BY idTZlecenia DESC");

Kontrola_Czy_Jest_Otwarte_Zlecenie();
}
//---------------------------------------------------------------------------
void __fastcall TOkno_glowne::Kontrola_Czy_Jest_Otwarte_Zlecenie(void) // Kontrola czy są wyświetlone jakieś otwarte zlecenia
{
if(DataModule2->ObZ_ADOTZlecenia->Fields->FieldByName("NR_ZLECENIA")->AsString == "")
        {
        TabSheet13->TabVisible = false;

        DBGrid3->Columns->Items[0]->Visible = false; //idTZlecenia,
        DBGrid3->Columns->Items[1]->Visible = false; //Rok_zlecenia + Nr_zlecenia,
        DBGrid3->Columns->Items[2]->Visible = false; //Data_przewidywany_odbior,

        ShowMessage("Nie ma aktualnie żadnych OTWARTYCH zleceń");
        }
else
        {
        TabSheet13->TabVisible = true;

        DBGrid3->Columns->Items[0]->Visible = false; //idTZlecenia,
        DBGrid3->Columns->Items[1]->Visible = true; //Rok_zlecenia + Nr_zlecenia,
        DBGrid3->Columns->Items[2]->Visible = true; //Data_przewidywany_odbior,
        }
}


W efekcie dostaję coś takiego:

Obrazek

Jak widać kolumna 1 - podaje wartość (VARBYTES), ale jak zawartość pola w bazie wyświetlę np. w Labelu to jest prawidłowa (widoczna nad polem nazwisko i imię).
Dlaczego tak jest ?
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » czwartek, 31 marca 2011, 09:53

LiMeS napisał(a):
Kod: Zaznacz cały
void __fastcall TOkno_glowne::BitBtn20Click(TObject *Sender) //Filtr na zleceniach po rok / numer
{
ObZ_TZlecenia_Zapytanie_Select("SELECT idTZlecenia, CONCAT(Nr_zlecenia, '/', Rok_zlecenia) AS Numer_zlecenia, Data_przewidywany_odbior FROM tzlecenia WHERE rok_zlecenia LIKE '%" + Edit53->Text + "%' AND nr_zlecenia LIKE '%" + Edit55->Text + "%' ORDER BY idTZlecenia DESC");

Kontrola_Czy_Jest_Otwarte_Zlecenie();
}



1. TRAGEDIA i podstawowy błąd - wsadzanie w kod programu zapytań SQL. Przerób to na procedurę składowaną.
2. Kontrola_Czy_Jest_Otwarte_Zlecenie(); Słaby pomysł na nazywanie funkcji - zawiły.
3. Nazewnictwo kolumn w bazie - polecam poczytać jakieś książki.


To tak po za tematem. Co do problemu.

1. Jakiego typu jest wartość kolumny NR_ZLECENIA ???
2. Cholernie zawiły sposób myślenia i kodowania. Napisz mi dokładnie co chcesz zrobić !!!!!!
3.
LiMeS napisał(a):if(DataModule2->ObZ_ADOTZlecenia->Fields->FieldByName("NR_ZLECENIA")->AsString == "")


Co to jest ?? Patrz punkt 2 :-)

Podsumowując. Napisz co masz i co chcesz osiągnąć. Wtedy ci pomogę.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House

Za ten post autor Corvis otrzymał podziękowanie od:
LiMeS
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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » czwartek, 31 marca 2011, 12:22

No tak - jeszcze długa nauka przede mną - jestem tego świadomy. :oops:

A temat, który chcę zrealizować ?

Mam w bazie pola nr_zlecenia - typu int, rok_zlecenia typu int, a potrzebuję pokazać w dbgridzie połączone pola w postaci : rok_zlecenia / nr_zlecenia i tytuł dbgrida powinien się nazywać numer_zlecenia
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » czwartek, 31 marca 2011, 13:42

Nie napisałeś jakiego typu jest pole numer zlecenia. Najprawdopodobniej problem leży w konwersji wykonywanej w linii:

Kod: Zaznacz cały
CONCAT(Nr_zlecenia, '/', Rok_zlecenia)


Nie wiem też jakiego serwa bazodanowego używasz. Spróbuj zrobić tak:

Kod: Zaznacz cały
CONCAT(cast(Nr_zlecenia as char), '/', cast(Rok_zlecenia as char))


albo

Kod: Zaznacz cały
cast(CONCAT(Nr_zlecenia, '/', Rok_zlecenia) as char)



Troche strzelam bo nie mam wszystkich danych. Takich jak gdzie są pobierane dane z bazy ? Do jakiego DataSeta, czy pola w datasecie są stałe czy dynamicznie tworzone ? jeżeli stałe jakiego typu jest pole odpowiadające za wyświetlanie numeru zlecenia.
"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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » czwartek, 31 marca 2011, 23:56

No to po kolei:
Kod: Zaznacz cały
SELECT idTZlecenia, CONCAT(Nr_zlecenia, '/', Rok_zlecenia) AS Numer_zlecenia

samo polecenia jako tako działa - sprawdziłem w MySQL Query Browserze i po wprowadzeniu tworzy się widok zawierający poprawnie wypełnione pole Numer_zlecenia.

Czyli problem jest w samym wyświetlaniu danych w DBGridzie.

Parę odpowiedzi na wcześniejszy post:
Baza: MySQL 5.1
Podłączona za pomocą kontrolki ADOConnection
Tabela zlecenia ADOQuery z TDataSource. DBGrid wskazuje na DSZlecenia.
Pola w DBGridzie wypełniane są dynamicznie przy wykonywanym SELECT;cie.

Ps.
Kompilator C++Builder 2007
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » piątek, 1 kwietnia 2011, 09:09

LiMeS napisał(a):Czyli problem jest w samym wyświetlaniu danych w DBGridzie.


To, że select działa w konsoli, nie znaczy że będzie poprawnie wyświetlony w TDbGrid - już nie raz się o tym przekonałem. Sprawdziłeś to co ci podałem ???

Możesz jeszcze, żeby było lepiej to zrobione, przerobić to tak:

1. Skoro masz MySql polecam używać dbExpressa zamiast ADO .
2. Zestaw połączenie i komponenty tak:

TSqlConnection -> TSqlDataSet -> TDataSetProvider -> TClientDataSet -> TDataSource -> TDBGrid

ClientDataSet łączysz z DataSetProvider poprzez PROVIDER NAME.

3. Ustaw zapytanie w SqlDataSet
4. Otwórz ClientDataSet - (nie SqlDataSet !!!!)


I Sprawdź wyniki, daj znać też czy sprawdziłeś to co ci podałem z Cast
"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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » niedziela, 3 kwietnia 2011, 14:05

Zarówno próba pierwszego zastosowania zapytania z cast jak i drugiego zapytania kończy się błędem.

Obrazek

Co do połączenia komponentów dbExpress - niestety nie radzę sobie z ich prawidłowym podpięciem.
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » niedziela, 3 kwietnia 2011, 21:48

1.Wklej SQL
2. Z czym dokładnie sobie nie radzisz ?
"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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » niedziela, 3 kwietnia 2011, 22:34

Corvis napisał(a):1.Wklej SQL


Ech... Corvis - do MySQL Query Browsera wklejałem zapytanie z palca - działało; co CBuildera wrzucałem z kodu programu i nie działało. Stworzyłem sobie edita do którego wkleiłem treść zapytania i... EUREKA - cholernego przecinka nie zauważyłem.


SELECT idTZlecenia, CONCAT(cast(Nr_zlecenia as char), '/', cast(Rok_zlecenia as char)), Data_otwarcia, Stan_zlecenia, FROM tzlecenia ORDER BY idTZlecenia DESC



Kod: Zaznacz cały
SELECT idTZlecenia, CONCAT(cast(Nr_zlecenia as char), '/', cast(Rok_zlecenia as char)), Data_otwarcia, Stan_zlecenia FROM tzlecenia ORDER BY idTZlecenia DESC


Jednym słowem gra i buczy - serdeczne dziękuję.
Zmodyfikowałem to jeszcze, by pole wynikowe wyglądało w miarę OK

Kod: Zaznacz cały
SELECT idTZlecenia, CONCAT(cast(Nr_zlecenia as char), '/', cast(Rok_zlecenia as char)) as Numer_zlecenia, Data_otwarcia, Stan_zlecenia, FROM tzlecenia ORDER BY idTZlecenia DESC


Ad. 2 - Postawiłem sobie komponenty dbExpress na nowej formie i nie bardzo wiedziałem w jaki sposób je połączyć. W ADO wydawało mi się to znacznie prostsze.
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 08:23

Napisałem ci jak to połączyć :P

TDbGrid -> TDataSource (w gridzie ustawiasz DataSource)
TDataSource -> TClientDataSet (w DataSource ustawiasz DataSet)
TClientDataSet -> TDataSetProvider (w cds ustawiasz to poprzez provider name)
TDataSetProvider -> TDataSet ( w providerze ustawiasz DataSet)


Gdzie jest problem :-) ??
"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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » poniedziałek, 4 kwietnia 2011, 18:57

Hmmm. Dzisiaj poszło od strzału. Wniosek - musiałem ostatnio coś naknocić.
Dziękuje raz jeszcze i... do następnego razu :).
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox

Re: DBGrid - problem z wyświetleniem danych

Nowy postprzez Corvis » poniedziałek, 4 kwietnia 2011, 19:26

Sprawdź sobie czy w dbexpressie potrzebny jest CAST w zapytaniu SQL :-)
"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: DBGrid - problem z wyświetleniem danych

Nowy postprzez LiMeS » poniedziałek, 4 kwietnia 2011, 23:27

Hmmm. Cast niepotrzebny - tabela zachowuje się tak jak w MySQL Query Browserze. Bez CAST'a działa, z CAST'em też działa :).
----
LiMeS
Avatar użytkownika
LiMeS
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): niedziela, 27 lutego 2011, 12:48
Podziękował : 5
Otrzymał podziękowań: 0
System operacyjny: Win XP SP3
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows XPFirefox


  • 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 17 gości

cron