astral_cyborg Δημοσ. 27 Σεπτεμβρίου 2010 Δημοσ. 27 Σεπτεμβρίου 2010 Καλησπέρα. Είμαι αρκετά αρχάριος στον προγραμματισμό, αλλά προσπαθώ να φτιάξω μια απλή εφαρμογή φακελώματος προσωπικών στοιχείων μέσω Visual Basic .NET (Visual Studio Express 2010) και Access (Office XP). Η εφαρμογή αποτελείται από 3 φόρμες, οι οποίες συνδέονται με 3 πίνακες από την βάση, μια φόρμα ανά πίνακα αντίστοιχα. Μέσω της κύριας φόρμας εμφανίζονται οι άλλες δύο, παρέχοντας τα αντίστοιχα δεδομένα της βάσης, τα οποία συνδέονται με τον πίνακα της κύριας φόρμας. Θα ήθελα να φιλτράρω όμως την εμφάνισή τους, έτσι ώστε με την επιλογή ενός ονόματος να εμφανίζονται από τους άλλους πίνακες μόνο δεδομένα που συνδέονται με αυτό κι όχι ολόκληρο το περιεχόμενό τους. Επειδή την σύνταξη της SQL την έκανα μέσω του Query Builder του Visual Studio, θα ήθελα να μάθω αν υπάρχει τρόπος να χρησιμοποιήσω μέσα στο περιβάλλον του μεταβλητές από άλλους πίνακες. Παρακάτω δίνω ένα παράδειγμα δύο πινάκων (AtomikosFakelos με Onomateponimo ως PK και ArithmosFakelou με ArithmosFakelouID ως PK και Onomateponimo ως FK) όπου θέλω να εμφανίσω τα περιεχόμενα του πίνακα ArithmosFakelou που αντιστοιχούν μόνο με το Onomateponimo του πίνακα AtomikosFakelos: SELECT ArithmosFakelou.Onomateponimo, ArithmosFakelou.ArithmosFakelou, ArithmosFakelou.AitiologiaDiagrafis FROM (ArithmosFakelou INNER JOIN AtomikosFakelos ON ArithmosFakelou.Onomateponimo = AtomikosFakelos.Onomateponimo) WHERE ArithmosFakelou.Onomateponimo = ??? Στην θέση των ερωτηματικών προσπαθώ λοιπόν με κάποιο τρόπο να περάσω την τιμή του frmAtomikosFakelos.txtOnomateponimo.Text (που ανήκει σε διαφορετική φόρμα και σε διαφορετικό πίνακα, που συνδέεται όμως με αυτόν). Πώς θα μπορούσα να περάσω την τιμή αυτή μέσα από το Query Builder; Ευχαριστώ για οποιαδήποτε συμβουλή.
user-64 Δημοσ. 27 Σεπτεμβρίου 2010 Δημοσ. 27 Σεπτεμβρίου 2010 SELECTArithmosFakelou.Onomateponimo, ArithmosFakelou.ArithmosFakelou, ArithmosFakelou.AitiologiaDiagrafis FROM (ArithmosFakelou INNER JOIN AtomikosFakelos ON ArithmosFakelou.Onomateponimo = AtomikosFakelos.Onomateponimo) WHERE ArithmosFakelou.Onomateponimo = ??? ArithmosFakelou.Onomateponimo = @myvariable μέσα στον Query Builder του VS
astral_cyborg Δημοσ. 27 Σεπτεμβρίου 2010 Μέλος Δημοσ. 27 Σεπτεμβρίου 2010 ArithmosFakelou.Onomateponimo = @myvariable μέσα στον Query Builder του VS Αν δώσω πχ. @frmAtomikosFakelos.txtOnomateponimo.Text ή το περάσω πρώτα σε μεταβλητή μέσα στον κώδικα (πχ. Dim myvariable As String = Str(frmAtomikosFakelos.txtOnomateponimo.Text) εμφανίζει το ακόλουθο: Error in WHERE clause near '@'. Unable to parse query text. Μήπως πρέπει να δηλώσω το @ πουθενά πρώτα;
user-64 Δημοσ. 27 Σεπτεμβρίου 2010 Δημοσ. 27 Σεπτεμβρίου 2010 οχι δεν γινεται ετσι δες αυτο εδώ δεν σου δίνω τον κώδικα απλά σε βοηθάω να ψάξεις http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx
isim Δημοσ. 27 Σεπτεμβρίου 2010 Δημοσ. 27 Σεπτεμβρίου 2010 Το namespace που χρειαζεται ο φιλος ειναι το System.Data.Oledb κα οχι το System.Data.sqlclient. το πως θα συνταξεις το sql statement εξαρταται απο το αν θα φτιαξεις query στην access και θα το καλεσεις στον κωδικα σου, η αν θα γραψεις inline sql statement οπου και εκει θα περασεις την παραμρτρο σου. Ο,τι απο τα δυο επιλεξεις να κανεις εχει απειρα παραδειγματα στο google Sent from my iPod touch using Insomnia.app
astral_cyborg Δημοσ. 5 Οκτωβρίου 2010 Μέλος Δημοσ. 5 Οκτωβρίου 2010 Ok, τελικά κάτι τέτοιο μπορεί να γίνει και μέσω μεθόδου του Binding Source. Παρακάτω δίνω την γραμμή κώδικα που χρειαζόταν, την οποία την προσέθεσα στο φόρτωμα της φόρμας: 'Ο εξορισμού κώδικας με τον προσαρμογέα των πινάκων που δημιουργείται αυτόματα με την ολοκλήρωση των ερωτημάτων στον Query Builder. 'Σημείωση πως τον κώδικα της SQL τον άφησα όπως ήταν, δηλαδή πχ.: 'SELECT Onomateponimo, ArithmosFakelou, AitiologiaDiagrafis 'FROM ArithmosFakelou Me.ArithmosFakelouTableAdapter.Fill(Me.MyDataDataSet.ArithmosFakelou) 'Φιλτράρισμα περιεχομένων της στήλης που με ενδιαφέρει με χρήση σε regular expression ολόκληρο το ονοματεπώνυμο που με ενδιαφέρει, το οποίο λαμβάνεται από το αντίστοιχο textbox που ήθελα. ArithmosFakelouBindingSource.Filter = "Onomateponimo LIKE '%" & frmAtomikosFakelos.txtOnomateponimo.Text & "%'" Ελπίζω το παραπάνω να βοηθήσει χρήστες με παρόμοιο πρόβλημα. Αν και απ' ό,τι φαίνεται, το καλύτερο είναι να αποδίδει κανείς σε κώδικα από την αρχή τη σύνδεση της βάσης και τον χειρισμό της, γιατί αν και είναι πιο δύσκολο και με περισσότερες πιθανότητες λαθών, δίνει πλήρη διαχείριση σε αυτήν. Ευχαριστώ για τις απαντήσεις.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.