Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πρόβλημα στο campacting Access .accdb αρχείο [VB.NET 2010]

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 11-07-2012, 16:56. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-07-2012, 22:40 70802

    Πρόβλημα στο campacting Access .accdb αρχείο [VB.NET 2010]

    Καλησπέρα.. κάνω ένα πρόγραμμα το οποίο θα χρειάζεται να κάνει χιλιάδες προσθέσεις και αφαιρέσεις σε μια βάση δεδομένων Access 2010 .accdb

    Θέλω το πρόγραμμά μου, κάθε φορά πριν αρχίσει να κάνει τη δουλειά του, να κάνει ένα compact τη βάση δεδομένων..


    Έχω αυτόν τον κώδικα, αλλά δεν δουλεύει όμως...

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
        Public Sub CompactAccessDB(ByVal DatabasePath As String, ByVal ConnectionString As String, Optional ByVal Password As String = "")
            Try
                Dim jro As New JRO.JetEngine
                Dim strTempDbPath As String = strExtras & "tmpDB" & GetExt(DataBaseFile)
    
                FileCopy(DatabasePath, strTempDbPath)
                UnlockFileFolder(DatabasePath)
    
                'Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                Dim ConnectionPassword As String = ""
                If Password <> "" Then
                    ConnectionPassword = ";Jet OLEDB:Database Password=" & Password
                End If
    
                jro.CompactDatabase(ConnectionString & "Data Source=" & strTempDbPath & ConnectionPassword & ";Jet OLEDB:Engine Type=5", _
                ConnectionString & "Data Source=" & DatabasePath & ConnectionPassword)
    
                DelFileFolder(strTempDbPath)
    
            Catch ex As Exception
                CreateCrushFile(ex.ToString)
                MsgBox(ex.ToString)
            End Try
        End Sub

    το πρόβλημα εμφανίζεται στην γραμμή 16 (που είναι η κρίσιμη γραμμή, αυτή που θα κάνει το compact!).

    Το πρόβλημα που βγαίνει είναι:

    "System.Runtime.InteropServices.COMException (0x80004005): Invalid argument.
    at JRO.IJetEngine.CompactDatabase(String SourceConnection, String Destconnection)
      at Ultra_PoS.modGlobal.CompactAccessDB(String DatabasePath, String ConnectionString, String Password) in C:\Users\Giannis M\Dropbox\Visual Basic 2010\Projects\Ultra PoS\Ultra PoS\Modules\modGlobal.vb:line 396"

    (Το line 396 είναι το 16 στον κώδικα που έγραψα εδώ) 

    Στο  jro.CompactDatabase(,)  περνιούνται 2 arguments:

    Πρίν το κόμμα περνιέται το:

    1
     
    PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Giannis M\Dropbox\Visual Basic 2010\Projects\Ultra PoS\Ultra PoS\bin\Debug\Extras\tmpDB.accdb;Jet OLEDB:Engine Type=5
    Μετά το κόμμα περνιέται το:

    1
     
    PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Giannis M\Dropbox\Visual Basic 2010\Projects\Ultra PoS\Ultra PoS\bin\Debug\Database\Database.accdb

    Τι κάνω λάθος???


  •  07-07-2012, 17:17 70807 σε απάντηση της 70802

    Απ: [VB.NET 2010] Πρόβλημα στο campacting Access .accdb αρχείο

    Είσαι σίγουρος ότι δουλεύει το JRO με βάσεις Access 2010; Νομίζω ότι ακόμα και να βρεις το λάθος δεν θα δουλέψει. Στην θέση σου θα χρησιμοποιούσα το Microsoft.Office.Interop.Access assembly.

    Στο NameSpace Microsoft.Office.Interop.Access.Dao έχει ένα Interface που λέγεται DBEngine, χρησιμοποίησε το αντίστοιχο method  compactDatabase που έχει.


     

  •  07-07-2012, 17:51 70808 σε απάντηση της 70807

    Απ: [VB.NET 2010] Πρόβλημα στο campacting Access .accdb αρχείο

    ευχαριστω πλ, θα τ δοκιμασω αμεσως.


    το θεμα ειναι οτι δν δουλευει ουτε για access 2000.... μπορουμε να βρουμε το προβλημα κ σε αυτο?? γτ θελω το προγραμμα να ανοιγει κ βασεις 2000...


  •  11-07-2012, 16:56 70830 σε απάντηση της 70807

    Απ: [VB.NET 2010] Πρόβλημα στο campacting Access .accdb αρχείο

    Libra Storm:

    Είσαι σίγουρος ότι δουλεύει το JRO με βάσεις Access 2010; Νομίζω ότι ακόμα και να βρεις το λάθος δεν θα δουλέψει. Στην θέση σου θα χρησιμοποιούσα το Microsoft.Office.Interop.Access assembly.

    Στο NameSpace Microsoft.Office.Interop.Access.Dao έχει ένα Interface που λέγεται DBEngine, χρησιμοποίησε το αντίστοιχο method  compactDatabase που έχει. 

    Αχ και να είχα τις γνώσεις σου!

    Δουλεύει τέλεια!! :) Ευχαριστώ πάρα πολύ.

    Αυτό πιστεύω είναι ένα από τα πιο σημαντικά πράγματα για τη σωστή λειτουργία του προγράμματός μου.



    [edit:]

    ένα μικρό προβληματάκι ακόμα σε άλλο θέμα έχει γίνει post εδώ: http://www.dotnetzone.gr/cs/forums/thread/70813.aspx.

    Τσεκάρετέ το εαν γίνεται :)

    [/edit]


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems