🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych.msaccess
5 messages
5 total messages Started by Jacek Fri, 02 Sep 2016 12:24
Do BraZby'ego.
#133810
Author: Jacek
Date: Fri, 02 Sep 2016 12:24
57 lines
1918 bytes
Cześć Zbyszku.

Pisałem na mejla, ale wrócił.
Pozwolę sobie zamieścić tutaj.

Napisałem taki prosty programik do robienia archiwizacji.
Pierwotnie używałem Shell(xcopy…), ale że folderów Buchaltera jest jakieś
80, to uruchamiało się tyle ‘hostcon.exe’ i mój
komunikat o skończonym kopiowaniu był nieprawdziwy.

Próbuję ze scripting, ale mi się wywala.
Ścieżka do plików źródłowych istnieje, tworzy się pierwszy katalok poprzez
MkDir, ale samo kopiowanie wywala błąd.

P.S. Jako że baza Płatnika i pliki Rewizora nie są duże, to stosuję Shell.

Oto kod:

Private Sub Polecenie2_Click()
DoCmd.Hourglass True
Dim fobj As Object
Set fobj = CreateObject("Scripting.FileSystemObject")
Dim Data As String, s As String, d As String
Data = Format(Date, "yyyy-MM-dd")
If Dir("G:\" & Data & "\", vbDirectory) <> "." Then
    MkDir ("G:\" & Data)
    MkDir ("G:\" & Data & "\Platnik")
    MkDir ("G:\" & Data & "\Rewizor")
    MkDir ("G:\" & Data & "\Buchalter")
End If
q = Shell("Xcopy P:\Baza G:\" & Data & "\Platnik\ /E /Y /H", vbHide)
q = Shell("Xcopy R:\ G:\" & Data & "\Rewizor\ /E /Y /H", vbHide)

Dim db As Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("Buchalter")
rs.MoveLast
rs.MoveFirst
For x = 1 To rs.RecordCount
    If rs.Fields("Archiwizowac") = True Then
        Kat = rs.Fields("Katalog")
        MkDir ("G:\" & Data & "\Buchalter\" & Kat)
        k = "Xcopy F:\Buch\" & Kat & " G:\" & Data & "\Buchalter\" & Kat &
\ /E /Y /H"
        s = "F:\Buch\" & Kat & "\"
        d = "G:\" & Data & "\Buchalter\" & Kat & "\"
        fobj.CopyFolder s, d, True ' tu się wywala, że nie znalazł ścieżki
        Exit For
        'q = Shell(k, vbHide)
        'Sleep (1000)
        qq = SysCmd(acSysCmdSetStatus, Kat)
    End If
    rs.MoveNext
Next
inf = MsgBox("Archiwizacja wykonana pomyślnie.", vbOKOnly, "UWAGA")
DoCmd.Hourglass False
End Sub
Re: Do BraZby'ego.
#133811
Author: Smyk
Date: Fri, 02 Sep 2016 16:02
27 lines
852 bytes
Jacek wrote at Fr 02.09.2016 12:24:

> Cze¶æ Zbyszku.

Jam co prawda nie Zbyszek, ale pozwolê sobie zabraæ g³os ;)

> Set rs = db.OpenRecordset("Buchalter")
> rs.MoveLast
> rs.MoveFirst
> For x = 1 To rs.RecordCount
>     If rs.Fields("Archiwizowac") = True Then
>         Kat = rs.Fields("Katalog")
>         MkDir ("G:\" & Data & "\Buchalter\" & Kat)
>         k = "Xcopy F:\Buch\" & Kat & " G:\" & Data & "\Buchalter\" & Kat &
> \ /E /Y /H"
>         s = "F:\Buch\" & Kat & "\"
>         d = "G:\" & Data & "\Buchalter\" & Kat & "\"
>         fobj.CopyFolder s, d, True ' tu siê wywala, ¿e nie znalaz³ ¶cie¿ki
>         Exit For
>         'q = Shell(k, vbHide)
>         'Sleep (1000)
>         qq = SysCmd(acSysCmdSetStatus, Kat)
>     End If
>     rs.MoveNext
> Next

Czy masz w polu "Katalog" tabeli "Buchalter" warto¶ci które zawieraj± spacjê
?
Re: Do BraZby'ego.
#133812
Author: Jacek
Date: Fri, 02 Sep 2016 16:40
31 lines
989 bytes
Dnia Fri, 02 Sep 2016 16:02:07 +0200, Smyk napisa³(a):

> Jacek wrote at Fr 02.09.2016 12:24:
>
>> Cze¶æ Zbyszku.
>
> Jam co prawda nie Zbyszek, ale pozwolê sobie zabraæ g³os ;)
>
>> Set rs = db.OpenRecordset("Buchalter")
>> rs.MoveLast
>> rs.MoveFirst
>> For x = 1 To rs.RecordCount
>>     If rs.Fields("Archiwizowac") = True Then
>>         Kat = rs.Fields("Katalog")
>>         MkDir ("G:\" & Data & "\Buchalter\" & Kat)
>>         k = "Xcopy F:\Buch\" & Kat & " G:\" & Data & "\Buchalter\" & Kat &
>> \ /E /Y /H"
>>         s = "F:\Buch\" & Kat & "\"
>>         d = "G:\" & Data & "\Buchalter\" & Kat & "\"
>>         fobj.CopyFolder s, d, True ' tu siê wywala, ¿e nie znalaz³ ¶cie¿ki
>>         Exit For
>>         'q = Shell(k, vbHide)
>>         'Sleep (1000)
>>         qq = SysCmd(acSysCmdSetStatus, Kat)
>>     End If
>>     rs.MoveNext
>> Next
>
> Czy masz w polu "Katalog" tabeli "Buchalter" warto¶ci które zawieraj± spacjê
> ?

Nie. Zwróæ uwagê, ¿e ciapki s± odpowiednie.
Re: Do BraZby'ego.
#133813
Author: Zbigniew Bratko
Date: Sat, 03 Sep 2016 23:00
83 lines
2577 bytes
W dniu 2016-09-02 o 12:24, Jacek pisze:
> Cześć Zbyszku.
>
> Pisałem na mejla, ale wrócił.
> Pozwolę sobie zamieścić tutaj.
>
> Napisałem taki prosty programik do robienia archiwizacji.
> Pierwotnie używałem Shell(xcopy…), ale że folderów Buchaltera jest jakieś
> 80, to uruchamiało się tyle ‘hostcon.exe’ i mój
> komunikat o skończonym kopiowaniu był nieprawdziwy.
>
> Próbuję ze scripting, ale mi się wywala.
> Ścieżka do plików źródłowych istnieje, tworzy się pierwszy katalok poprzez
> MkDir, ale samo kopiowanie wywala błąd.
>
> P.S. Jako że baza Płatnika i pliki Rewizora nie są duże, to stosuję Shell.
>
> Oto kod:

Ciężko jest analizować kod, bez przykładowych plików, folderów, tabeli itp.

Dla porządku użyłbym instrukcji Option Explicit
w celu wymuszenia jawnej deklaracji  zmiennych.

Poniższe zmienne nie są zadeklarowane
q, x,  kat, k,  qq, inf

>
> Private Sub Polecenie2_Click()
> DoCmd.Hourglass True
> Dim fobj As Object
> Set fobj = CreateObject("Scripting.FileSystemObject")
> Dim Data As String, s As String, d As String
> Data = Format(Date, "yyyy-MM-dd")
> If Dir("G:\" & Data & "\", vbDirectory) <> "." Then
>     MkDir ("G:\" & Data)
>     MkDir ("G:\" & Data & "\Platnik")
>     MkDir ("G:\" & Data & "\Rewizor")
>     MkDir ("G:\" & Data & "\Buchalter")
> End If
> q = Shell("Xcopy P:\Baza G:\" & Data & "\Platnik\ /E /Y /H", vbHide)
> q = Shell("Xcopy R:\ G:\" & Data & "\Rewizor\ /E /Y /H", vbHide)
>

[...]

> For x = 1 To rs.RecordCount
>     If rs.Fields("Archiwizowac") = True Then
>         Kat = rs.Fields("Katalog")
>         MkDir ("G:\" & Data & "\Buchalter\" & Kat)
>         k = "Xcopy F:\Buch\" & Kat & " G:\" & Data & "\Buchalter\" & Kat &
> \ /E /Y /H"

Powyższa linijka chyba jest zbędna, jeśli nie to powinna mieć postać:
         k = Shell("Xcopy F:\Buch\" & kat & " G:\" & Data &
"\Buchalter\" & kat & "\ /E /Y /H")
gdyż po zadeklarowaniu zmiennej k jako typ Long dostaję błąd nr 13 Type
Mismath.

Bez użycia instrukcji Option Explicit zmienna k jest Typu Variant i
przypisywany  do niej ciąg znaków "Xcopy F: ..... \ /E /Y /H" jest jak
najbardziej prawidłowy, tyle tylko że nie dostajesz informacji, czy ta
linijka w ogóle zadziałała.


>         s = "F:\Buch\" & Kat & "\"
>         d = "G:\" & Data & "\Buchalter\" & Kat & "\"

Spróbuj, czy zadziała ścieżka 's' bez ostatniego backslash'a:

          d = "G:\" & Data & "\Buchalter\" & Kat & ""

	fobj.CopyFolder s, d, True
[...]

> End Sub
>


--
Pozdrowienia
BraZby
www.faq.accdb.pl
www.accdb.pl
Re: Do BraZby'ego.
#133814
Author: Jacek
Date: Sat, 10 Sep 2016 06:47
80 lines
2753 bytes
Dnia Sat, 3 Sep 2016 23:00:00 +0200, Zbigniew Bratko napisał(a):

> W dniu 2016-09-02 o 12:24, Jacek pisze:
>> Cześć Zbyszku.
>>
>> Pisałem na mejla, ale wrócił.
>> Pozwolę sobie zamieścić tutaj.
>>
>> Napisałem taki prosty programik do robienia archiwizacji.
>> Pierwotnie używałem Shell(xcopy…), ale że folderów Buchaltera jest jakieś
>> 80, to uruchamiało się tyle ‘hostcon.exe’ i mój
>> komunikat o skończonym kopiowaniu był nieprawdziwy.
>>
>> Próbuję ze scripting, ale mi się wywala.
>> Ścieżka do plików źródłowych istnieje, tworzy się pierwszy katalok poprzez
>> MkDir, ale samo kopiowanie wywala błąd.
>>
>> P.S. Jako że baza Płatnika i pliki Rewizora nie są duże, to stosuję Shell.
>>
>> Oto kod:
>
> Ciężko jest analizować kod, bez przykładowych plików, folderów, tabeli itp.
>
> Dla porządku użyłbym instrukcji Option Explicit
> w celu wymuszenia jawnej deklaracji  zmiennych.
>
> Poniższe zmienne nie są zadeklarowane
> q, x,  kat, k,  qq, inf
>
>>
>> Private Sub Polecenie2_Click()
>> DoCmd.Hourglass True
>> Dim fobj As Object
>> Set fobj = CreateObject("Scripting.FileSystemObject")
>> Dim Data As String, s As String, d As String
>> Data = Format(Date, "yyyy-MM-dd")
>> If Dir("G:\" & Data & "\", vbDirectory) <> "." Then
>>     MkDir ("G:\" & Data)
>>     MkDir ("G:\" & Data & "\Platnik")
>>     MkDir ("G:\" & Data & "\Rewizor")
>>     MkDir ("G:\" & Data & "\Buchalter")
>> End If
>> q = Shell("Xcopy P:\Baza G:\" & Data & "\Platnik\ /E /Y /H", vbHide)
>> q = Shell("Xcopy R:\ G:\" & Data & "\Rewizor\ /E /Y /H", vbHide)
>>
>
> [...]
>
>> For x = 1 To rs.RecordCount
>>     If rs.Fields("Archiwizowac") = True Then
>>         Kat = rs.Fields("Katalog")
>>         MkDir ("G:\" & Data & "\Buchalter\" & Kat)
>>         k = "Xcopy F:\Buch\" & Kat & " G:\" & Data & "\Buchalter\" & Kat &
>> \ /E /Y /H"
>
> Powyższa linijka chyba jest zbędna, jeśli nie to powinna mieć postać:
>          k = Shell("Xcopy F:\Buch\" & kat & " G:\" & Data &
> "\Buchalter\" & kat & "\ /E /Y /H")
> gdyż po zadeklarowaniu zmiennej k jako typ Long dostaję błąd nr 13 Type
> Mismath.
>
> Bez użycia instrukcji Option Explicit zmienna k jest Typu Variant i
> przypisywany  do niej ciąg znaków "Xcopy F: ..... \ /E /Y /H" jest jak
> najbardziej prawidłowy, tyle tylko że nie dostajesz informacji, czy ta
> linijka w ogóle zadziałała.
>
>
>>         s = "F:\Buch\" & Kat & "\"
>>         d = "G:\" & Data & "\Buchalter\" & Kat & "\"
>
> Spróbuj, czy zadziała ścieżka 's' bez ostatniego backslash'a:
>
>           d = "G:\" & Data & "\Buchalter\" & Kat & ""
>
> 	fobj.CopyFolder s, d, True
> [...]
>
>> End Sub
>>

To był ten ostatni łamaniec w zmiennej s, dzięki.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads