Login · Register
08.09.2010 00:11:43
Aktualnie online
· Gości online: 3

· Użytkowników online: 0

· Łącznie użytkowników: 52
· Najnowszy użytkownik: snake


Reklama
www.ddt.pl

www.maddevblog.eu

Statystyki reklamowe

Statystyki

Monitorowanie:



W sieci od:
24 czerwca 2009


Logowanie
Nazwa użytkownika

Hasło



Nie masz jeszcze konta?
Zarejestruj się

Nie możesz się zalogować?
Poproś o nowe hasło

Ostatnie artykuły

Ostatnio Widziani
· djszalas02:17:13
· kabanek03:56:09
· DamianLii08:15:47
· pipczaqu 5 dni
· janisz 6 dni
· radzioon 6 dni
· snake 6 dni
· damn 6 dni
· iluvathar 6 dni
· adam2006 1 tydzień

Zobacz temat
DevQt.pl - Programowanie C++ / Qt :: PROGRAMOWANIE - C++ i Qt :: Szukam Pomocy
Kto jeszcze czyta ten temat? 2 gość(ci)
 Drukuj temat
Układanie rekordów z bazy mysql
djszalas
#1 Drukuj posta
Dodany dnia 06.07.2010 14:49:46
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Wybaczcie za moje zaśmiecanie problemami ale mam kolejny. Muszę zmodyfikować troszkę swój projekt dla fryzjera tak więc zrobiłem kalendarz(pokazuje rekordy z bazy z datą na którą się kliknie) tylko teraz cały wygląd okna dnia ma wyglądać następująco:

Wypisane na stałe godziny:
8:00
8:30
9:00
9:30
... do
19:30

i teraz trzeba powiedzieć temu mojemu programowi zeby danego klienta wrzucał pod tą godziną którą mu się wpisze(czyli w tej lini gdzie jego godzina). Znając mysql`a "najświeższy" wpis jest wrzucany pod ostatnim i tak kolejno, oczywiście filtrując całą tabele datą mozemy otrzymać różne dziwne rzeczy jeśli chodzi o wyświetlenie kolejności wpisów. Próbowałem zrobić relacje ale też wyświetla bez względu na godzine pokolei. Pomóż ktoś proszę Sad
 
MadMike44
#2 Drukuj posta
Dodany dnia 06.07.2010 15:33:30
Awatar

Główny administrator


Postów: 61
Data rejestracji: 03.09.09

Jakoś nie do końca rozumiem, dlaczego masz takie problemy.. Z tego co napisałeś wynika, że wystarczy wykonać odpowiednie zapytanie SELECT na bazie i wyświetlić wyniki. Chyba, że masz dziwnie zorganizowane tabele - mógłbyś pokazać, jaką masz strukturę tabel ?
 
www.devqt.pl
kof
#3 Drukuj posta
Dodany dnia 06.07.2010 16:14:41
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Próbowałem zrobić relacje ale też wyświetla bez względu na godzine pokolei.
Być może trudność utworzenia relacji własnie leży w złym typie wyrażającym godzinę.
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
MadMike44
#4 Drukuj posta
Dodany dnia 06.07.2010 16:30:36
Awatar

Główny administrator


Postów: 61
Data rejestracji: 03.09.09

Ja używam akurat SQLite - tam typów jest niewiele Smile Natomiast MySQL dla godziny używa chyba pola typu "time" - ale nic nie stoi na przeszkodzie, żeby po prostu użyć typu tekstowego ("char" lub "varchar" ).
Edytowane przez MadMike44 dnia 06.07.2010 16:31:01
 
www.devqt.pl
djszalas
#5 Drukuj posta
Dodany dnia 06.07.2010 18:23:23
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Godzina jest "varcharem"(nie było sensu bawić sie w szczegóły).

Zapisując klienta personel wpisuje imie, nazwisko, telefon, date i godzine. Daty oraz godziny nie wyświetlam bo jest zbędne ze względu na kalendarz i "statycznie" wpisane godziny. Już tłumacze, otóż pewien fryzjer zapisywanie klienta ma na kartce papieru z wypisanymi kolejno godzinami tak jak pisałem wyżej i teraz moim zadaniem jest przenieść to do programu ale mysql ma pewne głupie reguły. Chce poprostu tylko tyle ze jak wpisuje klienta o godzinie 13:00 to ma być w lini z tą właśnie godziną a nie według kolejności wpisywania przez mysql. Godziny chciałem wypisać QLabel`em ale jak macie inny pomysł to pls pomóżcie.
 
MadMike44
#6 Drukuj posta
Dodany dnia 06.07.2010 18:38:16
Awatar

Główny administrator


Postów: 61
Data rejestracji: 03.09.09

To nie wypisuj całej bazy w takiej formie, w jakiej jest, tylko ją posortuj względem godziny. Możesz też po prostu użyć zapytania:
Pobierz kod źródłowy  Kod źródłowy

SELECT imie, nazwisko FROM tabela WHERE godzina='13:00'




I wynik wypisujesz obok godziny 13:00. Ogólnie wyodrębniaj potrzebne Ci dane z bazy, a nie wypisuj całej bazy.
 
www.devqt.pl
kof
#7 Drukuj posta
Dodany dnia 06.07.2010 19:02:19
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Godziny chciałem wypisać QLabel`em ale jak macie inny pomysł to pls pomóżcie.

Przedstaw screen obrazujący obecny stan okna wyświetlającego informacje. Następnie spróbuje Ci w tej kwestii pomóc.
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
djszalas
#8 Drukuj posta
Dodany dnia 06.07.2010 21:31:41
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Tutaj jest okno które wyświetla przykładowego klienta. Jak już zdąrzyliście pewnie zauważyć jest zapisany na godzine 10:00 jednak QTableView wraz z MySQL`em wyświetlają go jako pierwszy rekord ponieważ jest to jedyny rekord z datą 13.06.2010. A mnie zależy na tym zeby klient na godzine 10:00 był dokładnie w tej samej lini co QLabel z godziną 10:00.
djszalas dodał/a następującą grafikę:


[84.63Kb]
 
kof
#9 Drukuj posta
Dodany dnia 06.07.2010 22:33:14
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Stosowanie tabeli w tym przypadku jest złe, to nieczytelne rozwiązanie dla tak prostych danych. Tablica charakteryzuje się niepotrzebną rozpiętością w tym przypadku.

Złe również jest tu twe podejście. Dlaczego usilnie dążysz do tego, aby były widoczne wszystkie godziny. Przecież w sytuacji, gdy jest 2 spotkania niemal cała plansza jest pusta i trwoni obszar ekranu użytkownika.

Poza tym zastanawiałeś co powinno w tej tabeli się stać jeśli fryzjer może w danym momencie obsłużyć kilka osób?

Wg mnie poleganie na tablicy i labelach jest mocno przesadzone. W tej sytuacji postawiłbym na listę.

http://thesmithfa...is-dialog/

Dzięki niej dane będą lepiej przedstawiane, będzie można wstawić kilka spotkań o tej samej dacie, gdzie przy okazji zostanie zużyta mniejsza ilość powierzchni ekranu.

O kolejności elementów decydowałoby wykonane zapytanie oparte o sortowanie względem daty.
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
janisz
#10 Drukuj posta
Dodany dnia 07.07.2010 00:05:19
Awatar

Użytkownik


Postów: 51
Data rejestracji: 22.03.10

Sam widziałem jak ludzie sobie porządkują wpisy w warsztacie/przychodni/itp i bardzo często używają tabelek (nawet dla tak prostych danych). W sumie program ma być zwykłym kalendarzem przystosowanym tylko i wyłącznie do zapisywania klientów. Może lepiej skorzystać z Google calendar i przygotować dla niego ładne GUI do inputu danych?

A, tak z ciekawości, sam wymyśliłeś taki program czy masz znajomego fryzjera?
 
djszalas
#11 Drukuj posta
Dodany dnia 07.07.2010 08:05:30
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

kof napisał/a:
Złe również jest tu twe podejście. Dlaczego usilnie dążysz do tego, aby były widoczne wszystkie godziny. Przecież w sytuacji, gdy jest 2 spotkania niemal cała plansza jest pusta i trwoni obszar ekranu użytkownika.


Jest to konsultowane ze znajomym fryzjerem i ma być poprostu przerzucone z papieru na komputer... Nie wnikam w to czy są puste miejsca czy nie bo zdarzało sie ze i na ich papierach była cała kartka tylko z dwoma klientami na cały tydzień... Próbowałem zrobić kalendarz ale zeby wyświetlał tylko tydzień(nie da sie) tak jak szef zakładu chciał. A to screen który przesłałem jest oczywiście przykładem zeby pokazać wam o co mi chodzi i z czym mam problem.

janisz napisał/a:
A, tak z ciekawości, sam wymyśliłeś taki program czy masz znajomego fryzjera?


Tak jak wyżej dla kofa pisałem. Miałem na początku całkiem inny wygląd tego programu ale szefostwo stwierdziło że jest to nie czytelne i chcieliby zeby to wyglądało tak jak mają w swoim wydrukowanym zeszycie. Aktualnie pisząc tą odpowiedź jestem w pracy ale jak wrócę do domu to wam zrobie zdjęcie jednej karteczki z tego zeszyciku i wrzucę. Smile
 
kof
#12 Drukuj posta
Dodany dnia 07.07.2010 09:51:41
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Jeżeli pod wskazaną godzinę ma być tylko jeden klient to proponuje takie działanie:

Ustaw odpowiednią długość dla tabeli. Np. 20 wierszy (ilość wierszy ma być zależna od ilości wskazanych przez ciebie godzin). W tym celu użyj metody setRowCount.

Następnie każdej etykiecie wiersza zmień nazwę z 1, 2, 3, ... itd na 9:30, 10:00, ...itd. Aby to osiągnąć trzeba za pewnie posłużyć się QHeaderView. Za kilka godzin samemu spróbuje wykonać tę operację.

Jeżeli pomysł akceptujesz i uda cię szybciej numerowanie rzędów szybciej to podziel się sposobem implementacji.
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
kof
#13 Drukuj posta
Dodany dnia 07.07.2010 13:28:12
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Screen przedstawia ustawienia headera godzin, o którym wcześniej wspomniałem.
img59.imageshack.us/img59/486/headersf.png

Kod jest napisany w Java, ale łatwo go zmodyfikować do postaci C++.

Pobierz kod źródłowy  Kod źródłowy
private void settingTableView() {
   final int rowCount = 14;
   final int columnCount = 3;
   
   QStandardItemModel model = new QStandardItemModel(rowCount, columnCount);
   
   LinkedList<String> rowHeader = new LinkedList<String>();
   rowHeader.add("9:30");
   rowHeader.add("10:00");
   rowHeader.add("10:30");
   rowHeader.add("11:00");
   rowHeader.add("11:30");
   rowHeader.add("12:00");
   rowHeader.add("12:30");
   rowHeader.add("13:00");
   rowHeader.add("13:30");
   rowHeader.add("14:00");
   rowHeader.add("14:30");
   rowHeader.add("15:00");
   rowHeader.add("15:30");
   rowHeader.add("16:00");
   
   model.setVerticalHeaderLabels(rowHeader);
   ui.tableView.setModel(model);
}



Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
djszalas
#14 Drukuj posta
Dodany dnia 07.07.2010 14:40:10
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Ok super tylko teraz jeszcze mi powiedz jak mam wsadzić dane z bazy? Bo nie wydaje mi się zeby program zapamiętał wpisane dane do tych rubryk, a jest to ważne. Masz pewność ze po uruchomieniu ponownym tego programu wpisy zostaną bez zmian?
"Z wirusami na linuksie jest jak z Yeti. Niby jest ale nikt nie widział."
 
kof
#15 Drukuj posta
Dodany dnia 07.07.2010 15:50:15
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

No przecież w tym celu wykonuje się zapytanie do bazy, następnie pobrany wynik w postaci modelu podstawia się do wyświetlenia w table-view. Jeżeli fragment w jakimś momencie stanowi trudność możesz prześledzić działanie wykonanych example:
http://doc.qt.nok...l-cpp.html
http://idlebox.ne...model.html

Masz pewność ze po uruchomieniu ponownym tego programu wpisy zostaną bez zmian?

Jakie wpisy masz na myśli?
Edytowane przez kof dnia 07.07.2010 15:50:33
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
djszalas
#16 Drukuj posta
Dodany dnia 07.07.2010 16:35:43
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

ok inaczej.... Zapytanie do bazy juz mam, filtrowanie po dacie też mam za pomocą kalendarza. Potrzebuje tylko i wyłącznie pomysłu, propozycji na ułożenie klienta w lini z jego umówioną godziną czarno na białym (bądź otwrotnie)....

Zdjęcie kartki z zeszytu tak jak mówiłem:

http://www34.zipp.../file.html
Edytowane przez djszalas dnia 07.07.2010 16:36:10
"Z wirusami na linuksie jest jak z Yeti. Niby jest ale nikt nie widział."
 
kof
#17 Drukuj posta
Dodany dnia 07.07.2010 16:48:41
Awatar

Początkujący Użytkownik


Postów: 37
Data rejestracji: 04.07.10

Masz na myśli układ pojedynczego wiersza? Jeżeli tak, to w czym konkretnie leży problem? Tworzysz kolumny odpowiadające kolumnom tabeli z sql i dane przecież możesz w ten sposób wyświetlać. Popraw mnie jeżeli myślę o czymś innym.
Tylko programy tworzą programistów.
 
http://dev-kof.blogspot.com/
djszalas
#18 Drukuj posta
Dodany dnia 09.07.2010 12:04:54
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Nie potrafie tego ugryźć. Albo was nie rozumiem albo jestem za tępy na takie rzeczy. Biorąc pod uwagę screen od kofa jest to najbliżej mojej wizji na temat tego co musze zrobić ale teraz problem leży w tym jak mam w puste rubryki wrzucić rekordy z bazy... Kombinuje już któryś dzień z kolei. Termin mnie goni bo musze mieć to gotowe na 15 lipca. Bardzo bym prosił kogokolwiek o kawałek kodu z ewentualnym opisem.
"Z wirusami na linuksie jest jak z Yeti. Niby jest ale nikt nie widział."
 
MadMike44
#19 Drukuj posta
Dodany dnia 09.07.2010 12:36:18
Awatar

Główny administrator


Postów: 61
Data rejestracji: 03.09.09

Jeżeli chcesz to mieć w takiej tabeli, jak przedstawił kof, gdzie zostają puste miejsca, to wykonujesz po prostu takie działanie:

Pobierz kod źródłowy  Kod źródłowy

QSqlQuery query(database); //database - obiekt klasy QSqlDatabase - otwarta baza danych
query.exec("SELECT imie, nazwisko, telefon FROM tabela WHERE godzina='09:30'");

if(query.next()) // jeżeli klient jest zapisany na tę godzinę (wynik zapytania niezerowy)
{
    // wstawienie pól wynikowego rekordu do tabeli przy odpowiedniej godzinie
}






I tak dla każdej godziny w rozkładzie. A dane z wyniku zapytania pobiera się tak:

Pobierz kod źródłowy  Kod źródłowy

// dla podanego wyżej zapytania, gdzie dane są tekstowe
query.value(0).toString(); //imię przekształcone do QStringa
query.value(1).toString(); //nazwisko przekształcone do QStringa
query.value(2).toString(); //telefon przekształcony do QStringa





Trzeba to wszystko robić w ten sposób, bo tam, gdzie nie ma klienta, chcesz mieć puste pola. Bo jeżeli nie, to wystarczyło by posortować bazę względem godziny i wyświetlić w tabeli całą bazę :)
 
www.devqt.pl
djszalas
#20 Drukuj posta
Dodany dnia 09.07.2010 14:39:52
Awatar

Początkujący Użytkownik


Postów: 28
Data rejestracji: 03.06.10

Ok wszystko super, tylko teraz nie wiem jak sie nazywa funkcja klasy QStandardItemModel określająca daną rubryke tabelki... Jeszcze tylko tego bym potrzebował i daje wam spokój... I dziękuje odrazu z góry za pomoc i przepraszam za głupie pomysły.
"Z wirusami na linuksie jest jak z Yeti. Niby jest ale nikt nie widział."
 
Przeskocz do forum:
Podobne Tematy
Temat Forum Odpowiedzi Ostatni post
Integracja z MySQL. Szukam Pomocy 9 10.07.2010 17:20:11