Μανο,
το πρόβλημά σου, αν και απλό, είναι σύνθετο για κάποιον που τώρα ξεκινά. Να συμφωνήσω κατ'αρχήν με τον Θωμά οτι το θεμα της δημοσίευσης καλό θα ήταν να είναι πιό συγκεκριμένο για να μπορούμε γρήγορα να εντοπίζουμε τι είναι αυτό που απασχολεί τον συντάκτη της δημοσίευσης. Παμε λοιπόν να δούμε λίγο τι συμβαίνει με το θέμα σου:
Αυτό που προσπαθείς να κάνεις είναι να δημιουργήσεις ένα string το οποίο θα στείλεις στην Access. Το string αυτό θα είναι ένα SQL Insert Query. Για να το κάνεις αυτό, συνενώνεις την εντολή INSERT INTO και τις τιμές κάποιων μεταβλητών που έχεις ορίσει.
Ομως, η εντολη INSERT INTO έχει κάποιους κανόνες. Για παράδειγμα (ας υποθέσουμε οτι ο πίνακάς σου είχε ένα πεδίο κάθε φορά και όχι τρία όπως τώρα), αν έδινες τις εντολές απευθείας (και όχι μέσα από script) θα μπορούσες να έχεις κάποιες περιπτώσεις όπως τις παρακάτω:
INSERT INTO tblParalavi (Promitheytis) VALUES ('Sotiris')
INSERT INTO tblParalavi (ArParast) VALUES (954)
Γιατί στην πρώτη εντολή έβαλα τα μονά εισαγωγικά και στη δεύτερη όχι; Μα γιατί το πρώτο INSERT αφορά σε πεδίο τύπου string (η, για να είμαι πιό ακριβής, char κατά τον ορισμό της access). Η τιμή λοιπόν που πρέπει να του περάσω είναι ένα string. Το δεύτερο INSERT αφορά εισαγωγή σε πεδίο τύπου integer (number), οπότε εκεί περνάω μια τιμή ως έχει. Αν προσπαθήσω στη δεύτερη περίπτωση να περάσω κάτι τέτοιο:
INSERT INTO tblParalavi (ArParast) VALUES ('954')
Θα πάρω το μήνυμα "Data type mismatch in criteria expression". Αυτό, γιατί θα προσπαθήσω να περάσω το STRING '954' (το οποίο δεν έχει διαφορά από το string 'bourboulia' π.χ.) σε ένα ΑΡΙΘΜΗΤΙΚΟ πεδίο. Αρα, τι σφάλμα προκύπτει; Λάθος data type (data type mismatch). Πού προκύπτει; Στο criteria expression μου (στο VALUES κομμάτι του query, το οποίο για την Access είναι το criteria expression).
Ωραία μέχρι εδώ. Τώρα, εσύ προσπαθείς όλα αυτά να τα συνδυάσεις σε ένα μεγααααλο string επιχειρώντας να εισάγεις τιμές σε τρία πεδία με διαφορετικά data types το καθένα. Ας προσπαθήσουμε να φτιάξουμε το string σου με ενα πεδίο στην αρχή:
strSQL="INSERT INTO tblParalavi (Promitheytis) VALUES ('" + sPromitheytis + "')"
Εδώ ενώνεις το string σου με την τιμή της μεταβλητής sPromitheytis. Ομως, επειδή το πεδίο Promitheytis του πίνακά σου είναι τύπου char, θα χρειαστείς αυτάκια γύρω από την τιμή του sPromitheytis. Αν το sPromitheytis εχει την τιμή "Μήτσος", το τελικό αποτέλεσμα που θα μπεί στη μεταβλητή strSQL θα είναι το εξής:
INSERT INTO tblParalavi (Promitheytis) VALUES ('Μήτσος')
Ωραία. Ας το δοκιμάσουμε με το δεύτερο πεδίο:
strSQL="INSERT INTO tblParalavi (ArParast) VALUES (" + sArParast + ")"
Προσεξες οτι εδώ, που έχουμε να κάνουμε με το ΑΡΙΘΜΗΤΙΚΟ πεδίο ArParast δεν έβαλα αυτάκια; Γιατί; Γιατί θέλεις να βγεί στο τέλος ένα string χωρίς αυτάκια γύρω από την τιμή του sArParast το οποίο είναι νούμερο. Βεβαια, εδώ υπάρχει ένα παράδοξο: Προσπαθούμε να κάνουμε ένωση ενός string (που αντιπροσωπεύει την εντολή insert into) με την τιμή του sArParast που είναι αριθμός. Η Access, βέβαια, μας προφυλάσσει από λάθη χρησιμοποιώντας κάποιο implicit conversion. Αν όμως παίρνουμε σφάλμα (που είναι πολύ πιθανό), καλό ειναι να κάνουμε το εξής (εύχομαι να το γράφω σωστά):
strSQL="INSERT INTO tblParalavi (ArParast) VALUES (" + cStr(sArParast) + ")"
Η συνάρτηση cStr μετατρέπει την τιμή του arParast σε string για να ενωθεί με τα υπόλοιπα κομμάτια δίνοντας τιμή στην strSQL. Ομως, η τιμή συνεχίζει να μην έχει αυτάκια, οπότε μόλις την "δώσεις" στην Access θα καταλάβει οτι είναι αριθμός.
Για το πρώτο σου πεδίο DateAgoras, το οποίο επιχειρείς να περάσεις ΜΕ αυτάκια, επειδή είναι πεδίο datetime, η access "συγχωρεί" την ασυμβατότητα μετατρέποντας το string που θα της περάσεις (με αυτάκια) σε τιμή datetime.
Αρα λοιπόν μια σωστή συνολική σύνταξη θα ήταν:
strSQL =
"INSERT INTO tblParalavi (DateAgoras,Promitheytis,ArParast) VALUES ('"+ sDateAgoras + "' ,' " + sPromitheftis + "'," + sArParast + ")"
Εχοντας αυτάκια ουσιαστικά γύρω από τις δύο πρώτες μεταβλητές μας. Αυτό θα μας έδινε εντέλει σαν τιμή του strSQL το string (παράδειγμα:)
INSERT INTO tblParalavi (DateAgoras,Promitheytis,ArParast) VALUES ('1/1/2000', 'Makis o ftinos', 1032)
Το άλλο error που παίρνεις εκτιμώ οτι οφείλεται σε λανθασμένη χρήση των "αυτακίων". Γενικά τα διπλά quotes οριοθετούν ένα string ενώ τα μονά quotes οριοθετούν τα "αυτάκια" γύρω από τις τιμές των μεταβλητών που θα προκύψουν στο τελικό query.
Ελπίζω να βοήθησα λίγο.
Σωτήρης Φιλιππίδης
DotSee Web Services