Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Stworzenie bazy danych w dBase

szefos 22 Mar 2010 22:15 2904 26
  • #1 22 Mar 2010 22:15
    szefos
    Poziom 12  

    Witajcie. Mam za zadanie stworzyć bazę danych w programie dBase. Ma być ona tak zrobiona aby miała podprogramy dzięki którym będę mógł ją:
    a) przeglądać
    b) edytować
    c) kasować dane
    d) tzw. wydruki danych

    Baza ma dotyczyć telefonów komórkowych. Model, marka, seria, cena itp.
    Wrzucam to co do tej pory zrobiłem, tylko ze dalej nie mam pomysłu. Bardzo potrzebuje pomocy kogoś kto coś takiego robił.

    0 26
  • #2 24 Mar 2010 13:58
    arnoldziq
    Moderator Programowanie

    Program koniecznie musi być napisany w DBase? To straszny staroć jest. I jeszcze ta wersja III PLUS (1987 rok)... koszmar.

    0
  • #3 24 Mar 2010 14:28
    szefos
    Poziom 12  

    No niestety musi być dBase ;/

    0
  • #4 25 Mar 2010 17:45
    szun
    Poziom 19  

    Programowałem w dBase (dokładnie CLIPPER) na początku lat dziewiędziesiątych.
    Nawet niedawno w trakcie wiosennego sprzątania , migneła mi książka Clippera 5.0 .Jeśli by się przydała to bedę kopał w moim arch.

    Dodano po 29 [minuty]:

    arnoldziq napisał:
    Program koniecznie musi być napisany w DBase? To straszny staroć jest. I jeszcze ta wersja III PLUS (1987 rok)... koszmar.

    To nie koszmar to działało i było przyjazne , i chodziło bardzo sprawnie na ówczesnych PC.

    0
  • #5 25 Mar 2010 17:54
    arnoldziq
    Moderator Programowanie

    szun napisał:
    To nie koszmar to działało i było przyjazne , i chodziło bardzo sprawnie na ówczesnych PC.


    Tego nie neguję, nawet ja pisałem kiedyś w dBase. Tylko po tylu latach, nie mam kompletnie żadnych kodów źródłowych a i pamięć się trochę "zatarła" :)

    0
  • #6 25 Mar 2010 19:48
    szefos
    Poziom 12  

    Też mam jakąś książke w której jest coś o dBase, ale przestudiowałem i za bardzo nie pomogło.

    1
  • #7 25 Mar 2010 20:27
    szun
    Poziom 19  

    O ile dobrze pamiętam dBase: To tworzenie bazy danych ,analiza ,sortowanie, zliczanie , itd.
    A Clipper umożliwiał pisanie programów z wykorzystaniem baz danych i po skompilowaniu był to program wykonałny na PC.

    A więc czy chodzi tylko o dBase.

    0
  • #8 25 Mar 2010 22:17
    szefos
    Poziom 12  

    Wszystko od początku tworzyłem w dBase, kompilowałem i tworzyłem zbiór w pliku o formacie dbf.

    1
  • #9 26 Mar 2010 15:12
    szefos
    Poziom 12  

    To moge liczyc na czyjąś pomoc? Czas mam do poniedzialku z tym.

    0
  • #10 26 Mar 2010 15:31
    zdd
    Poziom 12  

    W dBase ewentualnie dbu ( narzędzie z Clippera) tworzy się tylko struktury baz typu dbf.
    Żeby stworzyć program wykonywalny obsługujący te bazy używa się Clippera. W dBase możliwa jest obsługa baz - np: wpisywanie danych,ale programu wykonywalnego nie zrobisz.

    Moderowany przez arnoldziq:

    1. Program nazywa się Clipper a nie Clippera.
    2. Zarówno kompilator jak i interpreter języka dBase znajdują się w pakiecie dBase III+.
    3. Co takiego nowego i odkrywczego chciał kolega swoją wypowiedzą dodać do tematu, i jak kolegi wypowiedź ma w jakikolwiek sposób pomóc autorowi tematu?

    1
  • Pomocny post
    #11 26 Mar 2010 17:51
    arnoldziq
    Moderator Programowanie

    Zmodyfikowałem odrobinkę jeden z twoich kodów, tak aby można było dodawać rekordy. Powodzenia z resztą.

    Code:
    set color to w+/b
    

    clear
    klawisz='t'
    do while klawisz='t' .or. klawisz='T'
    clear gets
    clear
    mar=space(20)
    mod=space(15)
    seria1=space(4)
    aparat1=0
    obudowa1=space(8)
    pamiec1=0
    ekran1=0
    klawiatura1=space(9)
    cena1=0
    rp1=0
    kp1=space(10)

    @0,0 to 24,79 double
    @1,25 say '<<DOPISYWANIE DANYCH>>'
    @2,1 to 2,78
    @4,10 say 'Marka:' get mar picture ' !xxxxxxxxxxxxxxxxxxx'
    @4,50 say 'Model: ' get mod picture ' !xxxxxxxxxxxxxx'
    @6,10 say 'Seria:' get seria1 picture 'xxxx'
    @8,10 say 'Aparat:' get aparat1 picture '9.9'
    @8,22 say 'MPx'
    @8,50 say 'Obudowa:' get obudowa1 picture 'xxxxxxxx'
    @9,10 say 'Pamiec:' get pamiec1 picture '99 999'
    @9,22 say 'MB'
    @9,50 say 'Ekran:' get ekran1 picture '99 999.99'
    @11,10 say 'Klawiatura:' get klawiatura1 picture 'xxxxxxxxx'
    @11,50 say 'Cena:' get cena1 picture '9999.99'
    @11,63 say 'zl'
    @13,10 say 'Rok produkcji:' get rp1 picture '9999'
    @13,50 say 'Kraj produkcji:' get kp1 picture 'xxxxxxxxxx'
    read

    set color to n/w
    kl=0
    do while kl<> 110 .and. kl<>78 .and. kl<>84 .and. kl<>116
    @23,1 clear to 23,78
    @23,25  say 'Dane prawidlowe T/N ?'
    kl=inkey()
    enddo

    if kl=84 .or. kl=116
     use menus
    select menus
    append blank
    replace menus->MARKA with mar
    replace menus->MODEL  with mod
    replace menus->SERIA  with seria1
    replace menus->OBUDOWA  with obudowa1
    replace menus->APARAT  with aparat1
    replace menus->PAMIEC  with pamiec1
    replace menus->EKRAN  with ekran1
    replace menus->KLAWIATURA with klawiatura1
    replace menus->CENA with cena1
    replace menus->KP  with kp1
    replace menus->RP  with rp1
    endif

    set color to w+/b

    kl=0
    do while kl<>110 .and. kl<>78 .and. kl<>84 .and. kl<>116
    @23,1 clear to 23,78
    @23,25 say 'Nastepny wpis T/N ?'
    kl=inkey()
    enddo

    if kl=110 .or. kl=78
    clear
    return
    endif

    klawisz=chr (kl)
    clear
    enddo

    0
  • #12 26 Mar 2010 19:10
    szefos
    Poziom 12  

    Arnoldziq, wielkie dzięki, przyda sie na pewno ;) Czekam na wiecej podpowiedzi

    0
  • Pomocny post
    #13 26 Mar 2010 19:20
    szun
    Poziom 19  

    Też przeglądam twoje PRG .
    Kod menus.prg moim zdaniem jest nie aktualny .
    Czy możesz przesłać aktualny
    Ps. Do poniedziałku masz aż trzy nocki powodzenia.

    0
  • #14 26 Mar 2010 20:15
    szefos
    Poziom 12  

    Code:
    SET DATE GERMAN     &&ustawia date na format dd.mm.rr
    
    SET ECHO OFF    && wyłącza wyświetlanie wydawanych poleceń
    SET ESCAPE OFF && wyłącza działanie klawisza esc
    SET TALK OFF   && wyłącza wyświetlanie komend w dolnej części ekranu
    SETCOLOR('w+/b,gr+/bg')
    clear

    do while .T.
    set color to r/w
    @0,0 clear to 0,79
    @0,29 say "Autor: SzefoS"
    @24,0 clear to 24,79
    @0,65 say date()
    @24,28 say "Technikum Informatyczne"
    set color  to w+/b
    set cursor off

    @6,28 to 14,50 double
    @7,29 PROMPT " Dopisywanie danych "
    @8,29 PROMPT  " Aktualizacja danych "
    @9,29 PROMPT  " Przegladanie danych "
    @10,29 PROMPT " Kasowanie danych    "
    @11,29 PROMPT " Wydruki danych      "
    @12,29 PROMPT " Koniec programu     "

    menu to opcja

    do case
    case opcja=1
    do dopis

    case opcja=2


    case opcja=3
    do przeg

    case opcja=4
    do kas

    case opcja=5


    case opcja=6
    clear
    exit
    otherwise
    endcase
    enddo
    quit

    0
  • #15 28 Mar 2010 16:11
    szefos
    Poziom 12  

    Moge liczyc na jeszcze jakas pomoc?

    0
  • #16 28 Mar 2010 18:21
    szun
    Poziom 19  

    Aby testować program musisz mieć bazę danych ,wszystkie opcje zawarte w MENUS.prg odnoszą się do bazy danych w twoim przypadku MENUS.dbf

    arnoldziq :
    podał ci gotowca jak dodawać rekordy do MENUS.dbf przy pomocy polecenia APPEND BLANK .
    Ciekawy jestem czy to przetestowałeś ?
    I na jakim etapie jesteś.

    0
  • #17 28 Mar 2010 18:57
    szefos
    Poziom 12  

    Odrazu to wkleilem i dziala bez najmniejszego pierniecia. Teraz kombinuje robic podprogramy jesli chodzi o przegladanie i kasowanie danych. Nie bardzo mi to idzie.

    0
  • #18 28 Mar 2010 19:15
    szun
    Poziom 19  

    Poświęciłem trochę czasu i przeglądanie działa.
    Ciekawe w czym masz problem ,napisz dokładniej .
    Prześlij MENUS.dbf

    0
  • #21 29 Mar 2010 19:00
    szun
    Poziom 19  

    Baza danych jaką wysłałeś jest pusta . :?:
    Czyli nic do niej nie wpisałeś .
    Bardzo prosty przeg.prg niema co przeglądać :cry: czyli w programie musisz przewidzieć ten fakt ,bo inaczej leci to w kosmos..
    I mam poważne wątpliwości czy wykorzystałeś gotowca od arnoldziq . :cry:

    1
  • #22 29 Mar 2010 19:15
    szefos
    Poziom 12  

    Jaka pusta, w niej jest 11 rekordów..

    0
  • #24 29 Mar 2010 19:51
    szefos
    Poziom 12  

    oo dzieki szun. Przegladanie dziala bez problemu, to teraz jeszcze aktualizacja danych i wydruki danych mi zostały

    0
  • Pomocny post
    #25 29 Mar 2010 20:51
    szun
    Poziom 19  

    Z wydrukiem to polecenie SET PRINTER
    Przeglądanie aktualizacja to np. funkcja BROWSE ()
    I do roboty .::||powodzenia.

    0
  • #26 11 Kwi 2010 19:03
    szefos
    Poziom 12  

    Problem teraz mam z dopisywaniem, tkwi on w 52 lini ;/

    Code:
    set color to w+/b
    

    clear
    klawisz='t'
    do while klawisz='t' .or. klawisz='T'
    clear gets
    clear
    mar=space(20)
    mod=space(15)
    seria1=space(4)
    aparat1=0
    obudowa1=space(8)
    pamiec1=0
    ekran1=0
    klawiatura1=space(9)
    cena1=0
    rp1=0
    kp1=space(10)

    @0,0 to 24,79 double
    @1,25 say '<<DOPISYWANIE DANYCH>>'
    @2,1 to 2,78
    @4,10 say 'Marka:' get mar picture ' !xxxxxxxxxxxxxxxxxxx'
    @4,50 say 'Model: ' get mod picture ' !xxxxxxxxxxxxxx'
    @6,10 say 'Seria:' get seria1 picture 'xxxx'
    @8,10 say 'Aparat:' get aparat1 picture '9.9'
    @8,22 say 'MPx'
    @8,50 say 'Obudowa:' get obudowa1 picture 'xxxxxxxx'
    @9,10 say 'Pamiec:' get pamiec1 picture '99 999'
    @9,22 say 'MB'
    @9,50 say 'Ekran:' get ekran1 picture '99 999.99'
    @11,10 say 'Klawiatura:' get klawiatura1 picture 'xxxxxxxxx'
    @11,50 say 'Cena:' get cena1 picture '9999.99'
    @11,63 say 'zl'
    @13,10 say 'Rok produkcji:' get rp1 picture '9999'
    @13,50 say 'Kraj produkcji:' get kp1 picture 'xxxxxxxxxx'
    read

    set color to n/w
    kl=0
    do while kl<> 110 .and. kl<>78 .and. kl<>84 .and. kl<>116
    @23,1 clear to 23,78
    @23,25  say 'Dane prawidlowe T/N ?'
    kl=inkey()
    enddo

    if kl=84 .or. kl=116
     use menus
    select menus
    append blank
    replace menus->MARKA with mar
    replace menus->MODEL  with mod
    replace menus->SERIA  with seria1
    replace menus->OBUDOWA  with obudowa1
    replace menus->APARAT  with aparat1
    replace menus->PAMIEC  with pamiec1
    replace menus->EKRAN  with ekran1
    replace menus->KLAWIATURA with klawiatura1
    replace menus->CENA with cena1
    replace menus->KP  with kp1
    replace menus->RP  with rp1
    endif

    set color to w+/b

    kl=0
    do while kl<>110 .and. kl<>78 .and. kl<>84 .and. kl<>116
    @23,1 clear to 23,78
    @23,25 say 'Nastepny wpis T/N ?'
    kl=inkey()
    enddo

    if kl=110 .or. kl=78
    clear
    return
    endif

    klawisz=chr (kl)
    clear
    enddo


    i z aktualizacja, po wejsciu do niej i kliknieciu entera na na obojetnie ktorej pozycji z listy wychodzi calkowicie z calego programu

    Code:
    set cursor off
    
    set color to w+/b

    clear
    use menus
    ilosc=reccount()
        if ilosc>0
    kl=0
    do while kl<>27
    set color to w+/b
    PRIVATE tablica[2],naglowek[2]
    naglowek[1]="  Marka"
    naglowek[2]=" Model"

    tablica[1]="marka"
    tablica[2]="model"

    @0,18 to 23,59 double
    set color to n/w
    @24,0 say '  Enter-aktualizacja    '+chr(25)+'- w dol   '+chr(24)+'-  w gore     gUp/-20    PgDn/+20          '

      set color to w+/b
           DBEDIT(1,19,22,58,tablica,1,1,   naglowek)
           DO CASE
               CASE LASTKEY()=13
     do akt1
              CASE LASTKEY()=27
             
     clear
     return

     exit
             ENDCASE
     enddo      

        else
    clear
    return
       endif

    0
  • #27 12 Kwi 2010 10:46
    arnoldziq
    Moderator Programowanie

    Co do pierwszego kodu, to sprawa jest dość jasna.
    Otrzymujesz komunikat : Numeric Expected. Oznacza to jedynie, że próbujesz zapisać wartość Char do pola Numeric w swoim pliku DBF.
    Z nieznanych przyczyn :) twój plik DBF wygląda tak :
    Stworzenie bazy danych w dBase
    a wartość pobierasz :

    Code:
    @4,50 say 'Model: ' get mod picture ' !xxxxxxxxxxxxxx'
    - czyli typowy char.
    Kiedy poprawiałem ten kod wcześniej, to stworzyłam własny plik DBF i tam model (zgodnie z logiką) był char(15) - z tego co wiem np. Samsung robi modele SGH-A100 i SGH-Z100 (czy jakoś podobnie). Więc wykorzystanie char jest tutaj jak najbardziej na miejscu.

    Dodano po 7 [minuty]:

    W drugim kodzie, spróbuj zmienić linię :
    Code:
    PRIVATE tablica[2] , naglowek[2]
    Na :
    Code:
    DECLARE tablica[2] , naglowek[2]

    I zamieść tutaj deklarację tej procedury :
    Code:
    DBEDIT(1,19,22,58,tablica,1,1,   naglowek)
    Bo na razie nie bardzo można ten kod odpalić :)

    0