Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: zapis do pliku - co robie zle??
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
zapis do pliku - co robie zle??

Pisze aplikacje pseudo-bazodanowa. Robie ja zwyczajnie na plikach txt bo z kontrolka bazy nigdy nie mialem do czynienia i nie znam sie na niej . Zdefiniowalem swoj typ danych, wszystkie informacje sa wprowadzane przez inputbox, nastepnie zapisywane do jednego pliku, zapis i odczyt jest za pomoca LineInput i Print(dzialanie na rekordach jako usertype). Wszystko jest ladnie i pieknie - wprowadza sie i odczytuje ale do czasu... W pewnym momencie w pliku pojawia sie fragment albo nawet caly zapis z pliku *.frm albo czasami totalna "sieczka" a program juz nie chce odczytywac wczesniej zapisanych danych tylko wyswietla same "!!!!!!!!!!!!" lub "qqqqq" lub inne znaki, prawidlowo wyswietla tylko ostatnio dodany wpis.... Co robie zle???? czemu tak sie dzieje i jak temu zaradzic?? Tylko prosze nie piszcie zebym sie wzial za ta kontrolke bazy bo jestem w trakcie sesji (4 egzaminy-totalne kobyły ) i jak siadam do VB to doslownie tylko na chwile w zwiazku z czym nie mam zbytnio czasu uczyc sie tej kontrolki. Jak to zrobic prawidlowo na zwyklym txt?? Pomozcie kto moze - za kazda rade bede wdzieczny!!

Pozdrawiam!!


_____________________________________________
SANTA!!

08-06-2003 22:19
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

Proponowal bym umieszczenie tutaj kodu Zapisywania ,Odczytywania i deklaracji zmiennych...
bo bez tego to raczej bedzie .....

09-06-2003 07:48
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
a wiec....

typ uzytkownika:

Public Type Dane_Do_Zapisu

    dana1 As String * 40
    dana2 As String * 24
    dana3 As String * 60
    dana4 As String * 80
    dana5 As String * 20
    dana6 As String * 20
    dana7 As String * 100
    dana8 As String * 60
    dana9 As String * 240

End Type

no i pisze : Dim recrekord As Dane_Do_Zapisu

odczyt: ( na podstawie DANA1 z comboBox'a)

Open "test.txt" For Input As #1 Len = Len(recrekord)
On Error Resume Next
Seek #1, Len(recrekord) * (Combo1.ListIndex + 1)
Input #1, dana1
If dana1 = "" Then
    Close #1
    Exit Sub
End If
Line Input #1, dana2
Line Input #1, dana3
Line Input #1, dana4
Line Input #1, dana5
Line Input #1, dana6
Line Input #1, dana7
Line Input #1, dana8
Line Input #1, dana9
Close #1


zapis: (daną DANA1 pobralem przez inputbox i umiescilem w comboboxie) i teraz:

Open "test.txt" For Output As #1 Len = Len(recrekord)

Seek #1, Len(recrekord) * (Combo1.ListCount)

Print #1, dana1
Print #1, dana2
Print #1, dana3
Print #1, dana4
Print #1, dana5
Print #1, dana6
Print #1, dana7
Print #1, dana8
Print #1, dana9

Close #1

no i kicha! czasami pozwoli mi dokonac 7 wpisow a czasami juz po 3 widze wykrzykniki i inne nie chciane badziewia.... Co z tym zrobic??


_____________________________________________
SANTA!!

09-06-2003 21:18
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
otworz plik w innym trybie...

Otwórz plik w trybie Random. To jest specjalny tryb do zapisywania danych zdefiniowanych przez użytkownika. To powinno załatwić sprawę. Sprawdź moją stronkę (adres pod podpisem) w dziale Free->materiały i pobierz helpa Uniwersalny kod lub kliknij tutaj


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

10-06-2003 20:13
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
dalej nie dziala.....

ok dalem tryb Random ale teraz dorzuca sie do funkcji Print przy zapisie, wyswietla mi komunikat "Bad file mode" (error 54), no i dalej wisze!!!!!!!!!! Pomocy!!!!!!!!!


_____________________________________________
SANTA!!

10-06-2003 21:18
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
anonim




Typ: Nie zarejestrowany

Spróbuj ustawiać wskaż\źnik położenia danych w pliku przy każdym zapisie :
seek x
write#1,Dana
seek x+100
write#1,dana1 itp
Powinno być ok,.
Podobną metodą robię zapis i odczyt danych dla wykresu temperatur - pliki o wielkości do 100M

11-06-2003 08:36
  
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
............

ale to mnie nie poratuje poniewaz zmienne dana - dana9 sa tak jakby jednym wpisem, a ja chce miec n takich wpisow w jednym pliku... tylko ze sie mota przy odczycie a do pliku mi wpisuje jakas sieczke poza wlasciwymi stringami....


_____________________________________________
SANTA!!

12-06-2003 09:35
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003
try this...


Option Explicit 'wymuś deklarowanie zmiennych

Public Type Dane_Do_Zapisu
    dana1 As String * 40
    dana2 As String * 24
    dana3 As String * 60
    dana4 As String * 80
    dana5 As String * 20
    dana6 As String * 20
    dana7 As String * 100
    dana8 As String * 60
    dana9 As String * 240
End Type

Dim recrekord As Dane_Do_Zapisu

'Odczyt danych
'Całkowicie zmieniłem Twoją procedurę odczytu danych
'pobierasz dane do zmiennej recrekord, czyli...
'wypełniasz swoje dana1, dana2,... dana9 jakimiś wartościami

Sub Odczyt()
Dim i As Long

Open "test.txt" For Random As #1 Len = Len(recrekord)
    Do While Not EOF(1)    'jedź aż do końca pliku
        Get #1, , recrekord 'pobierz dane do zmiennej zdefiniowanej przez użytkownika
        FrmMain.List.AddItem "" 'dodaj nowy wiersz
        'numerowanie kolumn od zera!
        FrmMain.List.Column(0, i) = recrekord.dana1 'kolumna 1 = dana1
        FrmMain.List.Column(1, i) = recrekord.dana2 'kolumna 2 = dana2
        FrmMain.List.Column(2, i) = recrekord.dana3 'itd..
        FrmMain.List.Column(3, i) = recrekord.dana4
        FrmMain.List.Column(4, i) = recrekord.dana5
        FrmMain.List.Column(5, i) = recrekord.dana6
        FrmMain.List.Column(6, i) = recrekord.dana7
        FrmMain.List.Column(7, i) = recrekord.dana8
        FrmMain.List.Column(8, i) = recrekord.dana9 'kolumna 9 = dana9
        i = i + 1
    Loop 'zapętlaj
Close #1

End Sub


'Zapis wszystkich danych
Sub Zapis()
Dim i As Long

Open "test.txt" For Random As #1 Len = Len(recrekord)
    For i = 0 To FrmMain.List.ListCount - 1 'przez wszystkie wiersze ListBox'a
        'kolumny liczone są od zera!
        recrekord.dana1 = FrmMain.List.Column(0, i) 'ciśnij dane z kolumny 1 do dana1
        recrekord.dana2 = FrmMain.List.Column(1, i) 'ciśnij dane z kolumny 2 do dana2
        recrekord.dana3 = FrmMain.List.Column(2, i) 'itd...
        recrekord.dana4 = FrmMain.List.Column(3, i)
        recrekord.dana5 = FrmMain.List.Column(4, i)
        recrekord.dana6 = FrmMain.List.Column(5, i)
        recrekord.dana7 = FrmMain.List.Column(6, i)
        recrekord.dana8 = FrmMain.List.Column(7, i)
        recrekord.dana9 = FrmMain.List.Column(8, i) 'ciśnij dane z kolumny 2 do dana9
        Put #1, i + 1, recrekord 'ciśnij recrekord na podaną pozycję w pliku
    Next i
Close #1

End Sub

'Zapis pojedynczego rekordu
'poz = nr zaznaczonego wiersza w ListBox'ie
Sub ZapisNaPozycji(poz As Long)

Open "test.txt" For Random As #1 Len = Len(recrekord)
    'kolumny liczone są od zera!
    recrekord.dana1 = FrmMain.List.Column(0, poz) 'ciśnij dane z kolumny 1 do dana1
    recrekord.dana2 = FrmMain.List.Column(1, poz) 'ciśnij dane z kolumny 2 do dana2
    recrekord.dana3 = FrmMain.List.Column(2, poz) 'itd...
    recrekord.dana4 = FrmMain.List.Column(3, poz)
    recrekord.dana5 = FrmMain.List.Column(4, poz)
    recrekord.dana6 = FrmMain.List.Column(5, poz)
    recrekord.dana7 = FrmMain.List.Column(6, poz)
    recrekord.dana8 = FrmMain.List.Column(7, poz)
    recrekord.dana9 = FrmMain.List.Column(8, poz) 'ciśnij dane z kolumny 9 do dana9
    Put #1, poz + 1, recrekord  'ciśnij rekord na podaną pozycję w pliku
Close #1

End Sub

'Spróbuj dopasować ten kod do Twoje potrzeby
'w razie czego wyśluj maila do mnie a podeślę Ci działający przykład



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

13-06-2003 20:31
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
....sprobuje!

Dzieki wielkie!!! juz sie biore do sprawdzenia


_____________________________________________
SANTA!!

13-06-2003 21:33
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1