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

 

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

vb.net Γράψιμο σε Access

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος maria58 στις 29-11-2011, 18:49. Υπάρχουν 27 απαντήσεις.
Σελίδα 1 από 2 (28 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-09-2011, 01:32 67190

    vb.net Γράψιμο σε Access

    καλησπέρα, έχω ένα πρόβλημα και είναι απίστευτης σημασίας για μένα. Σας παρακαλώ αν ανοίξατε το πόστ να διαβάσετε προσπαθήστε να με βοηθήσετε!

    Έχω γράψει κώδικα ώστε να ανοίγει μια βάση δεδομένων Microsoft Access απο το πρόγραμμά μου και να μπορείς να διαβάσεις αυτά που έχει μέσα της, όπως επίσης και να γράψεις.


    Και πράγματι δουλεύει για καινούργια Access αρχεία που μπορεί να κάνω τώρα. Όμως θέλω να δουλέψει για ένα συγκεκριμένο Access αρχείο (.mdb) το οποίο έχει φτιαχτεί με ένα παλιό Microsoft Access. Νομίζω το Access 2000 ήταν.

    Μέσα στο συμπιεσμένο αρχείο που παραθέτω παρακάτω βρίσκετε ο πηγαίος κώδικας του προγράμματος, μαζί με ένα καινούργιο αρχείο Access (στο οποίο το πρόγραμμα μπορεί να γράψει) και μαζί με το παλίο Access αρχείο στο οποίο το πρόγραμμα δεν μπορεί να περάσει δεδομένα.

    το error message είναι: "Syntax error in INSERT INTO statement."


    Για να δείτε ότι στο ένα δουλεύει και στο άλλο όχι, τρέξτε το πρόγραμμα, θα κρασάρει, και μετά μετονομάστε το αρχείο Journal σε Journal_Not_Working, και Journal_working σε Journal και ξανατρέξτε το πρόγραμμα. στο δεύτερο αρχείο το πρόγραμμα μπορεί να γράψει! Να σημειωθεί ότι το πρόγραμμα διαβάζει δεδομένα και απο τα 2 αρχείο, στο γράψιμο είναι το πρόβλημα.

                Dim cb As New OleDb.OleDbCommandBuilder(da)
                Dim dsNewRow As DataRow
     
                dsNewRow = ds.Tables("AddressBook").NewRow()
    
                dsNewRow.Item(1) = txtFirstName.Text 'or .Item(1) =
                dsNewRow.Item(2) = txtSurname.Text
     
                ds.Tables("AddressBook").Rows.Add(dsNewRow)
    
    'To κρασάρισμα συμβαίνει εδώ, στο da.Upate!!!!            da.Update(ds, "AddressBook")

    Στο Form1_load έχω:
            dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
            dbSource = "Data Source = " & DBFile
     
            con.ConnectionString = dbProvider & dbSource
     
            con.Open()
     
            sql = "SELECT * FROM " & DBTable
            da = New OleDb.OleDbDataAdapter(sql, con)
            da.Fill(ds, "AddressBook")
     
            con.Close()
     
            MaxRows = ds.Tables("AddressBook").Rows.Count
            inc = -1

    κατεβάστε το απο δω:

    http://dl.dropbox.com/u/18135227/Projects.rar


    Όποιος μου βρει λύση στο να μπορώ να κάνω save και στο παλιό access αρχείο θα του είμαι πραγματικά για πάντα ευγνώμων!

    Δεν μπορείτε να φανταστείτε πόσο σημαντικό είναι αυτό για μένα. Ευχαριστώ εκ των προτέρων παιδιά!!


  •  11-09-2011, 01:56 67191 σε απάντηση της 67190

    Απ: vb.net Γράψιμο σε Access

    AlKiS βάλε το error message που σου βγάζει ώστε να μην μπαίνουμε στην περιπέτεια να το τρέχουμε
    Antonios Chatzipavlis

  •  11-09-2011, 02:15 67193 σε απάντηση της 67191

    Απ: vb.net Γράψιμο σε Access

    Έχεις δίκιο το ποιο σημαντικό ξέχασα!!

    το error message είναι: "Syntax error in INSERT INTO statement."


    ΌΜΩΣ τονίζω οτι ΔΕΝ το βγάζει το πρόβλημα για καινούργια αρχεία!!!!

    Μόνο στο συγκεκριμένο το βγάζει.

    Το θέμα είναι οτι το συγκεκριμένο αρχείο είναι ύψιστης σημασία για μένα, πρέπει να βρω τρόπο να περνάω δεδομένα στο table: Journal του συγκεκριμένου αρχείου.


  •  11-09-2011, 02:22 67194 σε απάντηση της 67193

    Απ: vb.net Γράψιμο σε Access

    ΟΚ

    Κάνε τώρα μια ακόμα παλικαριά

    Από τον command builder που έχεις βάλτον να σου πει και να μας πεις το INSERT που φτιάχνει για να το δούμε που στο γέρο λύκο είναι το syntax error


    Antonios Chatzipavlis

  •  11-09-2011, 02:26 67195 σε απάντηση της 67194

    Απ: vb.net Γράψιμο σε Access

    δεν ξέρω πως να το κάνω αυτό, σε παρακαλώ πες μου

    και σε ευχαριστώ πάρα πολύ που προσπαθείς να με βοηθήσεις φίλε μου!

    Αν βαριέσαι βραδιάτικα να μου εξηγείς πως να το κάνω αυτό που μου ζητάς, μπορώ να σε πάρω τηλ σήμερα ή αύριο, ή να με πάρεις εσύ στο [reducted] ή να μπείς στον υπολογιστή μου με teamviewer και να το κάνεις εσύ. ότι θέλεις!

    απλώς είναι απίστευτα σημαντικό για μένα να βρω πως να λυθεί το πρόβλημα.

    ότι θέλεις πες μου!


  •  11-09-2011, 02:33 67196 σε απάντηση της 67195

    Απ: vb.net Γράψιμο σε Access

    Φίλε μου,  οι δύο πίνακες δεν έχουν τα ίδια πεδία και όχι μόνο αυτό από μια γρήγορη ματιά που έριξα στις δυο βάσεις αυτή που δεν σου δουλεύει έχει και υποχρεωτικά πεδία για αυτό και δεν σου δουλευει


    Antonios Chatzipavlis

  •  11-09-2011, 02:37 67197 σε απάντηση της 67196

    Απ: vb.net Γράψιμο σε Access

    Δεν έχουν τα ίδια πεδία, συμφωνώ, αλλά προσπαθώ να γράψω σε πεδία που έχουν και οι 2. δηλαδή στο δεύτερο πεδίο (row(1)) και στο τρίτο πεδίο (row(2)).

    Και οι 2 πίνακες έχουν αυτά τα πεδία.

    Τα υποχρεωτικά πεδία δεν ξέρω τι είναι, μπορείς να μου εξηγήσεις σε παρακαλώ? ή εναλακτικά, απότι κατάλαβα σημαίνει οτι για να γίνει το newrow πρέπει σε κάποια πεδία να δώσω υποχρεωτικά τιμή. μπορείς να μου πείς ποιά πεδία είναι αυτά για να το κάνω??


  •  11-09-2011, 02:50 67198 σε απάντηση της 67197

    Απ: vb.net Γράψιμο σε Access

    Αυτό που θέλεις να κάνεις έτσι όπως πας να το κάνεις δεν θα παίξει καθώς χρησιμοποιόντας DataAdapter και DataTables και με την χρήση του command builder θα έχεις πάντα ένα insert το οποίο θα έχει περισσότερα πεδία όταν πας να διαβάσεις την παλαιά βάση σου. Για να λύσεις το πρόβλημα σου θα πρέπει να παίξει με OleDBCommand στην οποία να έχει φτιάξει εσύ το Insert ώστε να δίνεις τιμές στα πεδία που θέλεις

    OleDbCommand command = new OleDbCommand();

    command.Connection = conn;

    command.CommandText= "INSERT INTO myTable (col1, col2) VALUES (@p_col1, @p_col2)";

    command.Parameters.Add ("@p_col1", OleDbType.String).Value = textBox1.Text;

    ...

    command.ExecuteNonQUery(); 

    Έτσι θα έχεις την επιτυχία που θέλεις. 

    Το γεγονός ότι διαβάζεις είνα εύκολα εξηγήσιμο καθώς στο SELECT έχεις *


    Antonios Chatzipavlis

  •  11-09-2011, 02:56 67199 σε απάντηση της 67198

    Απ: vb.net Γράψιμο σε Access

    Αν και δεν κατάλαβα ακριβώς τι λες, ούτε μπορώ να καταλάβω γιατί σε οποιοδήποτε access αρχείο κι αν δημιουργήσω τώρα ο κωδικός δουλεύει, ενώ στο παλιό δεν δουλεύει..

    φαίνεται οτι ξέρεις τι παίζει εδώ. θα σε πείραζε αν αύριο σε έπερνα τηλέφωνο να σου κάνω 1-2 ερωτήσεις?

    Σε παρακαλώ, με σώζεις!

    Αν ναι, τότε στείλε μου σε ΠΜ ή στο [email protected] το σταθερό σου (ή κινητό αλλά κατα προτίμηση σταθερό) για να σε πάρω αύριο τηλ.


    Σε ευχαριστώ πολύ!


  •  11-09-2011, 03:15 67200 σε απάντηση της 67199

    Απ: vb.net Γράψιμο σε Access

    Για να καταλάβεις το προβλημα ποιο είναι κάνε κάτι απλό

    χρησιμοποίησε την βάση που σου παίζει και μετα το σημείο που φτιάχνεις τον command builder (cb)

    γραψε την εντολή

    MessageBox.Show(cb.GetInsertCommand().CommandText)

    ή καλύτερα άμα ξέρεις το debugger

    Debug.WriteLine ( cb.GetInsertCommand().CommandText )

    θα πάρεις το insert που σε αυτές που δεν έχεις προβλημα δουλεύει

    Αν τώρα βάλεις αυτή που δεν σου δουλευει θα δεις ένα τελειως διαφορετικό Insert το οποίο εσυ το γεμίσεις με λιγότερα στοιχεία καθώς  του δίνεις λιγότερα και λογικά δεν παίζει

    Για να δώσεις λύση στο προβλημα σου ή θα πρέπει να φτιάξεις όπως σου είπα και πριν ένα command όπου στο command text να έχεις το Insert αυτό που θα πάρεις από την αρχική εκτέλεση. Αυτό σημαίνει όμως ότι ξέρεις να χρησιμοποιείς commands

    Άλλος τρόπος είναι, για να ξεγελάσεις τον builder και με την προυπόθεση ότι δεν υπάρχουν υποχρεωτικά πεδία σε αυτά που θα παραλείψουμε, στο σημείο όπου κάνεις SELECT να βάλεις μόνο τα πεδία που υπάρχουν στις βάσεις που δουλεύει κανονικά και όχι *. δηλαδη

    SELECT Journal.ID, Journal.Kasse, Journal.Artikel, Journal.Betrieb, Journal.Anzahl, Journal.Umsatz, Journal.Steuer, Journal.ZahlArt, Journal.Kundenkonto, Journal.Kellner, Journal.Schluessel, Journal.Datum, Journal.Zeit, Journal.Hausbon, Journal.Z_Datum, Journal.BonNum
    FROM Journal

    Θα σου έλεγα να το δοκιμάσεις αυτό μήπως είσαι τυχερός και δεν έχεις υποχρεωτικά πεδία και να πας για ύπνο ήσυχα


     


    Antonios Chatzipavlis

  •  11-09-2011, 12:24 67203 σε απάντηση της 67200

    Απ: vb.net Γράψιμο σε Access

    Δοκίμασα και τις 2 συμβουλές σου,


    Στο να βάζω τιμές σε όλα τα πεδία που μου δείχνει το cb.GetInsertCommand().CommandText μου βγάζει το ίδιο ακριβώς πρόβλημα, 


    Στο να μην διαλέγω όλα τα πεδία αλλά μόνο αυτά που θέλω να περάσω τιμές μέσα τους μου βγάζει το εξής πρόβλημα:

    Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.


    Σε παρακαλώ πες μου πως να συνεχίσω.


  •  11-09-2011, 20:38 67205 σε απάντηση της 67203

    Απ: vb.net Γράψιμο σε Access

    Σωστό και αυτό κοίταξα ξανα την βαση και ο πίνακας δεν έχει primary key!!!

    Πρέπει να έχεις ένα pk


    Antonios Chatzipavlis

  •  11-09-2011, 22:44 67207 σε απάντηση της 67205

    Απ: vb.net Γράψιμο σε Access

    Δεν μπορώ να κάνω καμία απολύτως αλλαγή γιατί με το Office 2010 που το ανοίγω εγώ μου είναι κλειδωμένο! Μου ζητάει να το μετατρέψει σε *.accdb αλλά έτσι χάνετε όλο το νόημα. σημασία έχει να μπορέσω να ανοίξω ακριβώς αυτό το αρχείο στην κωδικοποίηση που είναι (.mdb).


    Αν έχεις εσύ Access παλιό και σου ανοίγει, σε παρακαλώ κάνε την αλλαγή και δώσε μου το αρχείο αλλαγμένο με το primary key να δοκιμάσω αν δουλεύει. 

    Σε ευχαριστώ πολύ για την βοήθεια σου


  •  11-09-2011, 23:15 67208 σε απάντηση της 67207

    Απ: vb.net Γράψιμο σε Access

    Δυστυχώς δεν έχω Access 2000 έχω και εγώ 2010. Αλλά το θέμα σου δεν είναι η version της Access αυτό είναι σίγουρο. Το θέμα σου είναι ότι δεν έχεις όλα όσα έχουμε πει παραπάνω. Έτσι και αλλιως θα πρέπει να προχωρήσεις με την προσθήκη του PK στον πίνακα. Ακόμα και σε περίπτωση που θα σου έρθει ακόμα μια τέτοια βάση αυτό θα πρέπει να κάνεις. Είναι μονόδρομος εφόσον θέλεις να μείνεις έτσι όπως το έχεις υλοποιήσει.


    Antonios Chatzipavlis

  •  12-09-2011, 00:19 67209 σε απάντηση της 67208

    Απ: vb.net Γράψιμο σε Access

    Δεν με πειράζει να αλλάξει το πρόγραμμα, ας μην μείνει τίποτα ίδιο απο τον πηγαίο κώδικα που που έγραψα!! το μόνο που με νοιάζει είναι να βρεθεί ένας τρόπος να βάζω δεδομένα μέσα σε αυτό το access αρχείο με Visual Basic 2010. 

    Οποιοσδήποτε τρόπος είναι καλοδεχούμενος..

    Οπότε.. καμιά ιδέα??


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