QBS >> Q-Line 3000 Szybki Start >> Pierwsze dane Chcę zapytać

Tabela z danymi użytkownika

Czas ćwiczenia:
  30 min.
Cel:
  Założenie tabeli z danymi użytkownika
Kroki:
  Modyfikacja pliku struct.qcon
  Wprowadzenie danych użytkownika programu

Nowa pozycja w MENU

Spróbujmy dodać do MENU dodatkową pozycję "Moje dane".
Poniżej prezentuję krótki opis w jaki sposób możemy to wykonać:

W katalogu z programem znajduję się katalog qcon a w nim plik struct.qcon, który będziemy edytować. Plik ten można edytować dowolnym edytorem tekstowym pod warunkiem, że używany przez nas edytor nie dopisuje własnych znaków do pliku. Do naszych celów możemy używać np: notepada. Po otworzeniu plik powinien wyglądać tak:

//---------------------------------------------------------------------------
// POCZĄTEK:  MainMenu
//---------------------------------------------------------------------------

MENU MainMenu

    TITLE="Menu główne"
    POS=50 50

{
ID      ACTION         SHORTCUT    NAME                    ;
PODR    MENU PodrMenu     P        "Komplet podręczników"  ;        
FunSys  MENU SysMenu      S        "Operacje systemowe"    ;   
}
//---------------------------------------------------------------------------
// KONIEC:  MainMenu
//---------------------------------------------------------------------------

MENU PodrMenu
      TITLE = "Menu dodatkowe"
      POS   = 50 50
{
ID          ACTION                              SHORTCUT  NAME;
OGOLNY      THTML SRC="podr/ogolny/index.html"
            DST="podr/ogolny/dysk.html";          O       "Podręcznik ogólny do programów serii 3000";
PRINT_ERROR THTML SRC="podr/print_error.html";    D       "Problemy podczas drukowania"              ;
}

UWAGA !!!
To co znajduje się pomiędzy wpisami
POCZĄTEK: MainMenu
KONIEC: MainMenu
przekłada się na MENU w sposób następujący:

Opis pliku struct.qcon

Dla początkujących konstruktorów zapis ten może wydawać się dość skomplikowany, dlatego postaramy się objaśnić elementy występujące w struct.qcon

Dodanie tabeli "Moje dane"

Po tym krótkim wstępie spróbujmy dodać do MENU dodatkową pozycję. Aby to zrobić należy w pliku struct.qcon umieścić następujący wpis:

MYDATA  RECEDIT   TAB=SYSED_MOJE_DANE;  "Moje dane"             ;

Wpis ten należy dodać do definicji menu głównego. Po tej operacji plik powinien wyglądać tak

//---------------------------------------------------------------------------
// POCZĄTEK:  MainMenu
//---------------------------------------------------------------------------

MENU MainMenu

    TITLE="Menu główne"
    POS=75 20

{
ID      ACTION                          NAME                    ;
PODR    MENU PodrMenu                   "Komplet podręczników"  ;        
FunSys  MENU SysMenu                    "Operacje systemowe"    ;   
//---------------------------------------------------------------------------
MYDATA  RECEDIT   TAB=SYSED_MOJE_DANE;  "Moje dane"             ;
//---------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
// KONIEC:  MainMenu
//---------------------------------------------------------------------------

MENU PodrMenu
      TITLE = "Menu dodatkowe"
      POS   = 50 50
{
ID          ACTION                              SHORTCUT  NAME;
OGOLNY      THTML SRC="podr/ogolny/index.html"
            DST="podr/ogolny/dysk.html";          O       "Podręcznik ogólny do programów serii 3000";
PRINT_ERROR THTML SRC="podr/print_error.html";    D       "Problemy podczas drukowania"              ;
}

Po uruchomieniu programu (standardowo plik q.bat) w MENU pokazała się nowa pozycja "Moje dane".

Gdy będziemy próbowali w nią wejść program zakończy działanie, ponieważ nie zdefiniowaliśmy tabeli o nazwie SYSED_MOJE_DANE, którą wywołujemy w MENU. Wszystkie błędy występujące podczas niespodziewanego zakończenia programu zapisywane są w pliku out.txt. Na podstawie wpisów z pliku out.txt możemy odnajdywać i eliminować te błędy. Aby naprawić błąd, który wystąpił należy zdefiniować tabelę o nazwie SYSED_MOJE_DANE tuż za MENU. Oto kod który należy wprowadzić:

TAB SYSED_MOJE_DANE
    TITLE="Moje dane"
    LAYOUT= HPAN(
                 GRP("Dane osobiste" TCP(NAZWA ULICA PNA MIASTO NIP))
                 GRP("Logo użytkownika" VPAN(TCP(FILENAME) TCP(LOGO)))
                )
{
ID            LEN     TYPE      ATTRIB      NAME     ;
ID            8       INT       -           "Id"          VIS=HIDE   ;
NAZWA        30       STRING    (FCAPITAL)  "Nazwa"  ;
ULICA        30       STRING    (FCAPITAL)  "Ulica"  ;
PNA           6       STRING    -           "Kod pocztowy" MASK=MASK("00\\-000");
MIASTO       30       STRING    (CAPITAL)   "Miejscowość"  ;
NIP          13       STRING    (CAPITAL)   "NIP"   MASK=MASK("000\\-000\\-00\\-00");
LOGO          8       INT           -       "  " MASK=IMAGE RESIZABLE(11 5) AUTFUN=filedata(FILENAME);
FILENAME      60      STRING        -       "Nazwa pliku"    
                                            MASK=FILE (APIC="Pliki graficzne (*.jpg; *.gif; *.png;)"
                                                       BALL="Wszystkie pliki (*.*;)")
                                            EDILEN=15
                                            ANCHOR="imageName";
}

Jeżeli występują błędy lub program niespodziewanie kończy swoje działanie to prawdopodobnie w pliku struct.qcon znajdują się błędne wpisy. Należy podejrzeć plik out.txt i tam szukać błędów lub porównać plik struct.qcon z wpisem poniżej.

//---------------------------------------------------------------------------
// POCZĄTEK:  MainMenu
//---------------------------------------------------------------------------

MENU MainMenu

    TITLE="Menu główne"
    POS=75 20

{
ID      ACTION                          NAME                    ;
PODR    MENU PodrMenu                   "Komplet podręczników"  ;        
FunSys  MENU SysMenu                    "Operacje systemowe"    ;   
MYDATA  RECEDIT   TAB=SYSED_MOJE_DANE;  "Moje dane"             ;
}
//---------------------------------------------------------------------------
// KONIEC:  MainMenu
//---------------------------------------------------------------------------

MENU PodrMenu
      TITLE = "Menu dodatkowe"
      POS   = 50 50
{
ID          ACTION                              SHORTCUT  NAME;
OGOLNY      THTML SRC="podr/ogolny/index.html"
            DST="podr/ogolny/dysk.html";          O       "Podręcznik ogólny do programów serii 3000";
PRINT_ERROR THTML SRC="podr/print_error.html";    D       "Problemy podczas drukowania"              ;
}
//---------------------------------------------------------------------------
// POCZĄTEK:  Moje dane
//---------------------------------------------------------------------------
TAB SYSED_MOJE_DANE
    TITLE="Moje dane"
    LAYOUT= HPAN(
                 GRP("Dane osobiste" TCP(NAZWA ULICA PNA MIASTO NIP))
                 GRP("Logo użytkownika" VPAN(TCP(FILENAME) TCP(LOGO)))
                )
{
ID            LEN     TYPE      ATTRIB      NAME     ;
ID            8       INT       -           "Id"          VIS=HIDE   ;
NAZWA        30       STRING    (FCAPITAL)  "Nazwa"  ;
ULICA        30       STRING    (FCAPITAL)  "Ulica"  ;
PNA           6       STRING    -           "Kod pocztowy" MASK=MASK("00\\-000");
MIASTO       30       STRING    (CAPITAL)   "Miejscowość"  ;
NIP          13       STRING    (CAPITAL)   "NIP"   MASK=MASK("000\\-000\\-00\\-00");
LOGO          8       INT           -       "  " MASK=IMAGE RESIZABLE(11 5) AUTFUN=filedata(FILENAME);
FILENAME      60      STRING        -       "Nazwa pliku"    
                                            MASK=FILE (APIC="Pliki graficzne (*.jpg; *.gif; *.png;)"
                                                       BALL="Wszystkie pliki (*.*;)")
                                            EDILEN=15
                                            ANCHOR="imageName";
}
//---------------------------------------------------------------------------
// KONIEC:  Moje dane
//---------------------------------------------------------------------------

Po poprawnym zdefiniowaniu tabeli możemy rozpocząć wprowadzanie danych użytkownika systemu.

Wprowadzenie własnych danych.

Powrót