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

Visual BasiC for Access - import/kopiowanie określonych plików xml

05 Kwi 2015 19:24 3030 37
  • Użytkownik usunął konto  
  • Poziom 22  
    Cytat:
    nie prosze o gotowy kod tylko odpowiedź czy jest możliwe

    Jest możliwe.

    Są2 opcje. Ładna i brzydka:
    - dodać referencję do obsługi XML-a, czyli skorzystać z gotowców do obsługi XML-a, następnie podglądać wybrane gałęzie i sprawdzać czy zawierają "reject" (wybrać coś z Tools>References>MSxml), i kopiować
    - przeszukiwać każdy plik pod kątem położenia i treści "reject" jak plik tekstowy.
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 22  
    Cytat:
    idę dobrym tropem?


    Jak najbardziej :idea: :) Wystarczy odchudzić ten kod, bo w nim robisz w sumie 2 operacje, wczytujesz kod do DOMObject-a w postaci tekstu który zaciągasz poprzez Line Input #intFile, strXML . Możesz od razu zrobić sprawdzanie danej gałęzi, a plik ładować do obiektu poprzez objectdom.Load(_plik_) np:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    i potem korzystać z niej przed podejmowaniem decyzji o kopiowaniu:
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 22  
    co do kopiowania tifow to:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    mozna to wykorzystac po sprawdzeniu ifem czy dany xml plik zawiera reject
    if sprawdzxml then
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    co do dat i tworzenia folderow to moze tak
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 22  
    Dobrze, że wrzuciłeś XML. Tych RejectReasonow może być wiele, więc trzeba zmodyfikować lekko funkcję, aby nie sprawdzał tylko pierwszego wpisu, a wszystkie.

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    PS. Sam się właśnie złapałem na tym sprawdzając to - zwracaj uwagę na wielkość liter :) Kod na pewno działa na konstrukcji Twojego XML-a (aż wrzuciłem ją do onlineowego OCR-a i na dysk, żeby znaleźć błąd).
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 22  
    cos ze sciezkami... (CurrentFolder= "sciezk & plik < nie wyrzyca bledu?)
    sprawdz msgbox-em albo debug.printem co masz w zmiennych current file i newfile po ifie sprawdz

    msgbox currentfile
    msgbox new file

    edit
    ps... katalogi zawieraja spacje c:\sdfsfd sdf nie zadziala
    musi byc "c:\sdfsfd sdf"
  • Użytkownik usunął konto  
  • Poziom 22  
    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 22  
    Źle rozumiesz. 1. Split ze ścieżki "c:\moja\ścieżka\plik.xml" zrobi macierz [c: ; moja ; ścieżka ; plik.xml]
    2. UBound weźmie ostatnią komórkę (upper boundary - górna granica)... czyli weźmie samą wartość plik.xml
    3. Plik ma końcówkę xml, a my chcemy taką samą nazwę tylko tif, więc podmienia się rozszerzenie xml na tif (podmieniasz jakieś xeml na tif ?)

    Polecam korzystanie z Watcha, nie ma sensu, żebyś wklejał kod linijka po linijce i pytał się co się nie zgadza.
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 22  
    Wydaje mi się, że wisi gdzieś aktywny formularz dopięty do tabeli którą usuwasz, więc przed usunięciem zamknij formularze które są z nią połączone
    np.:
    DoCmd.Close acForm, "nazwa formularza korzystajacego za tabeli address_result"
    DoCmd.DeleteObject acTable, "address_result"
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 22  
    Możesz wyczyścić tabelę np tak
    Kod: sql
    Zaloguj się, aby zobaczyć kod
    pozostanie tylko struktura a wszystkie dane wylecą.
  • Użytkownik usunął konto  
  • Poziom 22  
    Tak, pozostaną na stałe bo są unikalne, więc nie ma potrzeby ich usuwać. Jeśli klucz podstawowy nie jest Ci potrzebny to możesz po prostu z niego nie korzystać albo usunąć ze struktury tabeli. Nie wiem jak go zresetować. Sam Microsoft pisze, żeby stworzyć nową tabelę i przenieść dane... https://support.microsoft.com/en-us/kb/812718

    Nawias kwadratowy jak najbardziej wskazany w nazwie tabeli, unikniesz błędów jeśli nazwy zawierają spacje.
  • Użytkownik usunął konto  
  • Poziom 22  
    U mnie działa tak. Timer ustawiam przy otwieraniu formularza:

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 22  
    No tak to nie zadziała. InStr zwraca pozycję (liczbę integer) pierwszego wystąpienia jednego stringa w drugim. Poza tym RejectReason jest nazwą gałęzi a nie wartością.
  • Użytkownik usunął konto  
  • Poziom 22  
    Dam mały przykład pokazujący jakiego stringa tak na prawdę szukasz stawiając tego like-a w argumencie funkcji, który jest stringiem.

    Kod: vb
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 33  
    Witam

    a zobacz taki zapis

    Kod: vb
    Zaloguj się, aby zobaczyć kod